我试图确切地了解它是如何工作的。我相信我理解这个概念:
对于所有边缘像素,找到所有穿过它的线,并且对于这些线中的每一条,将累加器数组值(对应于斜率和 y 截距)加 1。穿过许多边缘点的线将有很多票累加器数组。
我不明白的是我为实现它找到的代码。首先,我相信我们可以假设,在应用边缘检测器之后,边缘像素具有非零值,而非边缘为 0。在我教科书的代码中,程序搜索具有零值的所有点,并且,对于所有通过的线,将相应的累加器值增加 1。我认为它会寻找通过边缘点(非零)的线,而不是空白空间?有人可以向我解释这部分吗?
以下是我在一本图像处理教科书中找到的 Matlab 代码。我没有测试它,因为我正在使用 C++。%messages 是我对特定行的作用的理解:
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