8/29/2011

Hough Transform (Line, Circle) / C++ source (OpenCV) / 허프변환(선, 원)


Created Date : 2007.7
Language : C++
Tool : Visual C++ 6.0
Library & Utilized : OpenCV 1.0(for image saving)
Reference :  Hough Transform reference
etc. : -






This is Hough Transform program.
We can progress two type Hough Transform. One is Line Hough Transform, Second is Circle Hough Transform.
After processing, Hough Transform result, Edge Image and Parameter Space(txt) files save in your directory.

You can download source code <here>.

If you have good idea or advanced opinion, please reply me. Thank you
(Please understand my bad english ability. If you point out my mistake, I would correct pleasurably. Thank you!!)
-------------------------------------------------------------------------------

▣ 허프변환 프로그램 결과
<실험 1>
1. 입력 데이터
2. 에지 영상
3. Line 검출 결과
4. Parameter Space voting 영상

▣ 소스 코드 설명
1. Line 검출
①voting 부분
theta를 0~180까지 증가시키면서 rho를 구하고 그 값을 [theta][rho]의 2차원 배열에 Voting한다.

②Sorting 부분
voting된 Parameter를 정렬한다. 정렬은 STL을 사용함.

③Line 그리는 부분
정렬된 theta와 rho값을 이용하여 직선의 방정식의 기울기와 절편을 구하고 OpenCV에 Line Draw함수를 이용하여 라인을 그린다. 그려진 라인은 OpenCV의 IplImage에 저장된다.
라인을 그릴 때는 voting이 가장 많이 된 것의 선색을 255, 가장 voting이 안된 것의 선 색을 0으로, Voting된 것의 정도를 색으로 나타내었다.

2. Circle 검출
①voting 부분
반지름을 <10>에서 <이미지 대각방향의 픽셀 길이 빼기 10>까지 증가시키면서 theta를 0~360까지 증가시키며, 원의 중심 위치 Cx, Cy에 대하여 voting을 한다. voting된 결과는 를 담을 수 있는 Vector에 저장된다.

②Sorting 부분
의 정보를 갖고 있는 Vector에서 Voring 값으로 정렬을 한다.

③Circle 그리는 부분
정렬된 원중에서 상위 1%만 드로잉한다.
드로잉할 때는 라인을 그릴때와 마찬가지로 제일 많이 voting된 것을 255색, 제일 적게 voting된것을 0색으로 그려서 voting정도를 표시한다.

▣ 인터페이스 설명
실행 파일을 실행하여 파일명을 입력하고, Line을 검출하려면 1을 입력 Circle을 검출하려면 2를 입력한다.
검출이 끝나면 실행 시간이 나온다.


전체 소소는 여기서 다운 받을 수 있습니다. <here>

좋은 의견 어떤 글이든 답변 남겨주세요
감사합니다.





No comments:

Post a Comment