[Algorithm] Hough Transform Line Detection

[Computer Vision] Hough Transform Line Detection

허프변환(선검출)은 이미지에서 직선을 검출하는 방법이다.

당연히 이미지=Edge를 적용한 이미지 이다.

우리는 기울기가 m , y절편이 n 인 수식을 일반적으로 다음과 같이 표현한다.

하지만 이 방법을 사용하게 되면, 기울기가 무한대가 되는 경우가 발생한다.

일단 알고 가야할것이, y 절편이 a , x 절편이 b인 식을 아래와 같이 표기한다.

우리는 위와같이 y=ax+b의 그래프를 r 과 Θ에 관한 식으로 나타내어야 한다.

  • 아마 그림을 많이 그릴것으로 예상되어 펜타블릿을 하나 사던지 해야겠다.

위와 같은 직각 삼각형이 있을때 삼각함수의 식은 아래와 같다.

그럼이제 위 수식을 바꿔보자.

파란색 선으로 된 그래프는 아래와 같다.

x cosΘ + y sinΘ = r 의 식으로 표기할 것이다. 이는 이산적인 함수라 컴퓨터로 표현이 가능하다.

여기서 rΘ가 가질수 있는 범위는 아래와 같다.

M , N 은 이미지의 가로/세로 픽셀수 이다.

1. Canny Edge가 적용된 이미지를 준비한다.
2. 모든 픽셀을 순회한다.
  • 2-1. 0~360 모든 각도에 대해 거리 r을 구한다.
  • 2-2. r이 범위내에 속하면, voting 한다.(counting)
3. voting한 지점이 일정한 값(threshold) 이상이면 직선이라 가정한다.

정말 심플한 알고리즘이다.

아래는 그 결과로 voting그래프와, Edge이미지,직선 검출 이미지이다.

변수는 CannyEdge의 상한값과 하한값, 그리고 threshold 이 3가지에 의해 결과는 달라진다.

전신주를 찾아야 하는데, 인간적으로 전기줄 거미줄마냥 나온사진을 보면 그냥 한숨만 나온다.



Hough Transform Line Detection VS2013 Project

https://drive.google.com/open?id=0B9hvQueMdS-2SnB4S3VhcFZzeUk

Reference