Computer Vision/Implement

Hough transform (python 구현)

jstar0525 2021. 6. 11. 14:34
반응형

Hough transform


머신비전, 영상처리 분야의 Hough Transform에 대해 알아보겠습니다.

 

 

 

 

1. 개요


Hough Transform

Edge 영상에서

Edge 중 특정한 모양(직선, 원, 타원)을 찾아내는 알고리즘입니다.

 

이번 글은 직선에 대해서만 다루겠습니다.

 

 

핵심 원리는 Hough Space로 변환을 하여,

교차점으로부터 공통된 직선을 찾아낸는 것입니다.

 

Image space와 Hough space

 

 

https://nabinsharma.wordpress.com/2012/12/26/linear-hough-transform-using-python/

 

Linear Hough Transform Using Python

In this post I will explain the Hough transform for line detection. I will demonstrate the ideas in Python/SciPy. Hough transform is widely used as a feature extraction tool in many image processin…

nabinsharma.wordpress.com

 

 

 

 

2. 간단한 예제


좀 더 쉽게 이해하기 위해서

아래의 간단한 예제를 예로 들겠습니다.

 

점 2개가 찍혀 있는 이미지를

Hough space로 변환하면 아래와 같습니다.

 

Input image
Hough space

 

각 점에 대해서,

주기함수가 그려집니다.

 

교차하는 점의 ρ (distance)와 θ (angle)에 대하여

다시 이미지 공간에 해당하는 직선을 그리면,

아래와 같이 두 점을 지나가게 됩니다.

 

Detect line

 

따라서, 많은 선들이 교차할수록

해당하는 ρ와 θ의 직선에

많은 점들이 포함된다는 뜻입니다.

 

 

 

 

3. python 구현


사용한 라이브러리는 아래와 같습니다.

 

사용한 라이브러리


 

 

먼저, Edge를 찾은

바이너리 이미지를 불러옵니다.

 

바이너리 이미지

 


 

그리고 아래의 함수를 이용하여,

Hough Space로 변환하여 줍니다.

 

색이 빨간색일수록 많이 교차되었다는 것을 나타냅니다.

 

 

 

 


 

위 그림에서 교차점을 선택하여야 하는데,

주변에 비슷한 값들을 선택하지 않기 위해

threshold를 설정할 수 있도록 하였습니다

(threshold=20).

 

이 예제에서는 10개의 교차점(num=10)을 찾습니다.

 

선택한 점들을 Hough Space 위에 하얀 점으로 표시하였습니다.

 

 

 

 


 

 

위의 선택한 점들에 대하여,

직선을 그려줍니다.

 

Detect lines


 

 

마지막으로 선택한 직선 중

수평선을 기준으로

-10도 ~ +10도의 기울기를 가진 직선을 선별해 보겠습니다.

 

filter lines


참고자료

 

https://alyssaq.github.io/2014/understanding-hough-transform/

 

Understanding Hough Transform With Python

The Hough transform (Duda and Hart, 1972), which started out as a technique to detect lines in an image, has been generalised and extended to detect curves in 2D and 3D. Here, we understand how an ima

alyssaq.github.io

 

 

 

해당 소스는 아래의 링크에서 보실 수 있습니다.

 

https://github.com/jstar0525/MachineVision/tree/main/09%20Hough%20transform

 

jstar0525/MachineVision

Machine Vision Algorithm. Contribute to jstar0525/MachineVision development by creating an account on GitHub.

github.com

 

반응형