정확하게 작동하는지 이해하려고합니다.행에 대한 허프 (Hough) 변환 이해하기
모든 에지 픽셀에 대해 모든 에지 픽셀을 찾아 누적 기 어레이 값 (기울기와 y 절편에 해당)을 1 씩 위로 늘립니다. 많은 엣지 포인트들을 통과하는 것은 accumulator 배열에서 많은 득표를 가질 것입니다.
내가 이해할 수없는 것은 구현을 위해 찾은 코드에 있습니다. 첫째, 가장자리 감지기가 적용된 후 에지 픽셀이 0이 아닌 값을 가지며 가장자리가 0이 아닌 것으로 가정 할 수 있다고 생각합니다. 내 교과서의 코드에서 프로그램은 0 점이있는 모든 점을 검색하고, 통과하는 모든 라인에 대해 해당 누적 기 값을 1 씩 증가시킵니다. 빈 포인트가 아닌 가장자리 포인트 (NON-ZERO)를 통과하는 라인을 찾지 않을 것이라고 생각 했습니까? 누군가이 부분을 나에게 설명 할 수 있습니까?
다음은 이미지 처리 교과서에서 찾은 Matlab 코드입니다. 나는 C++로 작업하면서 테스트하지 않았다. % 메시지는 특정 행의 기능을 이해하고 있습니다.
function HTline(inputimage)
[rows,columns] = size(inputimage);
acc1 = zeros(rows,91);
acc2 = zeros(columns,91);
for x = 1:columns
for y = 1:rows
if(inputimage(x,y)==0 %If pixel=0, i.e., non-edge
for m = -45:45 %For a certain range of slope values
b = round(y-tan((m*pi)/180)*x); %Calculate y-intercept for slope values
if (b<rows & b>0) %If y-intercept is within the image height
acc1(b,m+45+1)=acc1(b,m+45+1)+1; %Increase accumulator values. What?
end
end
for m=45:135 %etc
b=round(x-y/tan((m*pi)/180));
if(b<columns & b>0)
acc2(b,m-45+1)=acc2(b,m-45+1)+1;
end
end
end
end
end
불행히도이 책에서는 이해하기 쉽도록 개념을 설명하지만, 코드는 누적 기의 최대 값을 취하여 발견된다는 점을 제외하고는 많은 직접적인 참조없이 코드를 그림에 넣습니다. 따라서 검정색을 반전하지 않습니다. 화이트. 나는 학생이기 때문에 나는 틀렸다는 것을 믿을 의향이 있지만, 나는 C로 무엇인가를 만들고 무엇이 일어날지를 생각할 때라고 생각한다. 자세한 답장을 보내 주셔서 감사 드리며, 내가 말씀 드린 것을 계속 보관 해드릴 것입니다. – William
@ 윌리엄 당신이 테스트하고 물건을 쉽게 될 것이므로 당신이 matlab에 이것을 밖으로 시도 해야할지 모르겠다면. 그러나 C가 당신의 것이라면 앞으로 나아가 야합니다. 또한, 내가 말했듯이, 당신이 위에서 쓴 코드가 낡은 것임을 알아라. 나는 실제로 머신 비전 클래스에서 rho/theta 매개 변수화 및 그래디언트/소블 메서드를 기반으로 한 hough 변환을 구현 한 코드를 가지고 있습니다. 나는 당신이 관심이 있다면 그것을 나의 대답에 덧붙일 수있다. 마지막으로, 내 대답이 귀하의 질문에 답변한다면 그것을 수락하는 것이 좋습니다. – Justin
나는 아마 C를 고수하고 내 자신의 페이스대로 조금씩 배울 것이다. 그러나 어쨌든 고마워한다.Btw, 위의 내 의견에 오류가 실현, 어쩌면 실제로 흑백 반전했다. 죄송합니다 수락 잊어 버렸습니다! – William