Hough transform
머신비전, 영상처리 분야의 Hough Transform에 대해 알아보겠습니다.
1. 개요
Hough Transform은
Edge 영상에서
Edge 중 특정한 모양(직선, 원, 타원)을 찾아내는 알고리즘입니다.
이번 글은 직선에 대해서만 다루겠습니다.
핵심 원리는 Hough Space로 변환을 하여,
교차점으로부터 공통된 직선을 찾아낸는 것입니다.
https://nabinsharma.wordpress.com/2012/12/26/linear-hough-transform-using-python/
2. 간단한 예제
좀 더 쉽게 이해하기 위해서
아래의 간단한 예제를 예로 들겠습니다.
점 2개가 찍혀 있는 이미지를
Hough space로 변환하면 아래와 같습니다.
각 점에 대해서,
주기함수가 그려집니다.
교차하는 점의 ρ (distance)와 θ (angle)에 대하여
다시 이미지 공간에 해당하는 직선을 그리면,
아래와 같이 두 점을 지나가게 됩니다.
따라서, 많은 선들이 교차할수록
해당하는 ρ와 θ의 직선에
많은 점들이 포함된다는 뜻입니다.
3. python 구현
사용한 라이브러리는 아래와 같습니다.
먼저, Edge를 찾은
바이너리 이미지를 불러옵니다.
그리고 아래의 함수를 이용하여,
Hough Space로 변환하여 줍니다.
색이 빨간색일수록 많이 교차되었다는 것을 나타냅니다.
위 그림에서 교차점을 선택하여야 하는데,
주변에 비슷한 값들을 선택하지 않기 위해
threshold를 설정할 수 있도록 하였습니다
(threshold=20).
이 예제에서는 10개의 교차점(num=10)을 찾습니다.
선택한 점들을 Hough Space 위에 하얀 점으로 표시하였습니다.
위의 선택한 점들에 대하여,
직선을 그려줍니다.
마지막으로 선택한 직선 중
수평선을 기준으로
-10도 ~ +10도의 기울기를 가진 직선을 선별해 보겠습니다.
참고자료
https://alyssaq.github.io/2014/understanding-hough-transform/
해당 소스는 아래의 링크에서 보실 수 있습니다.
https://github.com/jstar0525/MachineVision/tree/main/09%20Hough%20transform