10/13/2011

Catmull-Rom Spline interpolation/ C++ source code/ 스플라인 보간

Created Date : 2010.11.
Language : C++
Tool : Visual Studio C++ 2008
Library & Utilized : -
Reference :Catmull-Rom Spline reference
Etc. : STL





This program is Catmull-Rom Spline code.
Please search detail contents about Catmull-Rom Spline in the internet. ^^
In the main.cpp, the source code consisted of Input, calculate spline and output.
In the function of Catmull-Rom Spline, parameters means coordinate(x,y), Step, number of interpolation in a section.

You can get interpolation points easily using this function(PathToCurve).


--------------------------------------------------------------------
이 소스 코드는 Catmull-Rom 보간법을 프로그래밍 한 것 입니다.
이론적인 내용은 인터넷을 검색하시면 많은 자료를 찾을 수 있어서 생략합니다.
메인 함수에는 입력, 보간, 출력으로 구성되어 있고, 입력을 원하는 좌표 값을 입력하여 해당 문제에 적용하시면될 거예요.
보간 함수는 좌표, 스텝,한 구간 보간 갯수를 입력하도록 하였습니다.
매트랩을 통하여 보간결과를 확인해보세요.
간단한 매트랩 파일도 첨부합니다.

좋은 답변 바랍니다. ^^


*main
/////////////////////////////////////////////////////////////////////////
//input
vector< pair<double , double > > InputPath;
FILE * fp1;
fp1 = fopen("input2.txt","r");
double x,y;
while( fscanf(fp1,"%lf %lf", &x, &y)!=EOF )
{
//printf("%lf %lf\n", x,y);
InputPath.push_back( make_pair(x,y) );
}
fclose(fp1);


//////////////////////////////////////////////////////////////////////////
//Spline
vector< pair<double , double > > curvePath;
curvePath = PathToCurve( InputPath, 1, 10);



//////////////////////////////////////////////////////////////////////////
//output
FILE* fp2;
fp2 = fopen("out.txt","w");
for(int i=0; i<curvePath.size(); ++i)
{
fprintf(fp2, "%lf %lf\n", curvePath[i].first, curvePath[i].second );
//printf("%lf %lf\n", curvePath[i].first, curvePath[i].second );
}
fclose(fp2);

*input
5 6
3 4
3 2
5 2
7 4

*output
1.000000 1.000000
1.174000 1.201000
1.392000 1.488000
1.648000 1.837000
1.936000 2.224000
2.250000 2.625000
2.584000 3.016000
2.932000 3.373000
3.288000 3.672000
3.646000 3.889000
4.000000 4.000000
4.359500 3.984500
4.736000 3.856000
5.126500 3.641500
5.528000 3.368000
5.937500 3.062500
6.352000 2.752000
6.768500 2.463500
7.184000 2.224000
7.595500 2.060500
8.000000 2.000000
8.400000 2.056000
8.800000 2.208000
9.200000 2.432000
9.600000 2.704000
10.000000 3.000000
10.400000 3.296000
10.800000 3.568000
11.200000 3.792000
11.600000 3.944000
12.000000 4.000000
12.418000 3.953000
12.864000 3.824000
13.326000 3.631000
13.792000 3.392000
14.250000 3.125000
14.688000 2.848000
15.094000 2.579000
15.456000 2.336000
15.762000 2.137000
16.000000 2.000000


plz give me your valuable comment. Thank you.





10/11/2011

Rect Corner Detection / C++, OpenCV1.0 / 사각형 모서리 찾기

Created Date : 2008.11.
Language : C++
Tool : Visual Studio C++6.0
Library & Utilized :OpenCV 1.0
Reference : -
Etc. : -
 
 
 



This program is for detecting 4 corners of rects(3 rect).
The detection process is shown below.

1. Candidate corner detection using cvGoodFeaturesToTrack function.
2. Blob Coloring - Find 3 biggest blobs
3. Angle inspection tracking outline of blob. - using cvConvexHull2 function.
    Corner's angle would be big than other angles. so we select 4 corners.

<Source Code>
---------------------------------------------------------------------


다음과 같은 과정으로 사각형 캘리브레이션 타켓의 모서리 4군데를 찾는다.

캘리브레이션 타켓의 코너 lefttop, righttop, rightbottom, leftbottom을 검출한다.

cvGoodFeaturesToTrack로 코너 검출
CBlobResult로 Blob Coloring하여 가장 큰 덩어리 3개를 찾음 (사각형 3개)
각 Blob에 대해 cvConvexHull2로 외곽 점 검출
외곽점을 따라가면서 점 간에 각을 저장
점 간의 각도 중 가장 각이 큰 4점을 선택하여 모서리로 판단함
판단된 4점에서 코너점과 가장 가까운 4점을 선택함
이렇게 한 사각형에 대한 모서리 점이 선택됨

결과는 세개의 사각형에 대한
Left Top, Right Top, Right Bottom, Left Bottom 의 이미지 좌표를 알려줌
따라서 카메라 캘리브레이션을 위한 월드 좌표 - 이미지 좌표 값을 자동으로 추출 가능함
 <Source Code>