私はそれがどのように機能するかを正確に理解しようとしています。私は概念を理解していると信じています:
すべてのエッジ ピクセルについて、それを通過するすべての線を見つけ、これらの線のそれぞれについて、アキュムレータ配列の値 (勾配と 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