가장자리 감지에 Hough 변환을 사용하려고하는데 그라디언트 이미지를 기본으로 사용하고 싶습니다.
I 화상은 주어진 지금까지 수행 한 어떤 I
크기 [M,N]
및 그 부분 유도체 gx
, gy
등의 각 화소에서의 기울기 각도를 산출한다 thetas = atan(gy(x,y) ./ gx
. 마찬가지로 그라디언트 크기를로 계산합니다 magnitudes = sqrt(gx.^2+gy.^2)
.
Hough 변환을 구축하기 위해 다음 MATLAB 코드를 사용합니다.
max_rho = ceil(sqrt(M^2 + N^2));
hough = zeros(2*max_rho, 101);
for x=1:M
for y=1:N
theta = thetas(x,y);
rho = x*cos(theta) + y*sin(theta);
rho_idx = round(rho)+max_rho;
theta_idx = floor((theta + pi/2) / pi * 100) + 1;
hough(rho_idx, theta_idx) = hough(rho_idx, theta_idx) + magnitudes(x,y);
end
end
결과 Hough 변환은 그럴듯 해 보이지만 ( http://i.stack.imgur.com/hC9mP.png 참조 ) 원래 이미지에서 최대 값을 가장자리 매개 변수로 사용하려고하면 결과가 다소 무작위로 나타납니다. Hough 변환을 구성 할 때 잘못된 점이 있습니까?
업데이트 : 내 코드에서 바보 같은 실수가 발생했습니다 . 대신 rho
로 계산되었습니다 . 즉, 나는 코사인과 사인 대신 두 개의 코사인을 사용하고있었습니다. 위의 코드를 편집했으며 새로운 결과 이미지가 아래에 있습니다. 그러나 이것은 훨씬 더 나은 가장자리를 제공하지 않았습니다.x*cos(theta)+y*cos(theta)
x*cos(theta)+y*sin(theta)
@endolith :에서 hough
-matrix 의 최대 값을 고려하여 모서리를 표시하기 rho_idx, theta_idx
위해 색인을 rho,theta
값으로 변환 합니다.
theta = (theta_idx -1) / 100 * pi - pi / 2;
rho = rho_idx - max_rho;
마지막으로 가장자리를로 표시 y= (rho - x*cos(theta)) / sin(theta)
합니다.