我测试了Matlab的Hough变换来检测线条。 我在下面的代码中想出了一个奇怪的行为:
clc; clearvars; close all;
I = zeros(100,100);
I(50:70,25) = 1;
[H,T,R] = hough(I);
P = houghpeaks(H,1);
lines = houghlines(H,T,R,P,'MinLength',10);
disp([ 'Coordinates for beginning of line (x,y) = '...
,num2str(lines.point1(1,2)),',',num2str(lines.point1(1,1))]);
disp([ 'Coordinates for ending of line (x,y) = '...
,num2str(lines.point2(1,2)),',',num2str(lines.point2(1,1))]);
disp([ 'Length of detected line = ', num2str(norm(lines.point1 - lines.point2)) ]);
一个小狡辩是原始线长为21像素,而houghlines发现它为18.通过设置' Theta'通过替换
来提高精度[H,T,R] = hough(I);
到
[H,T,R] = hough(I,'Theta',-90:0.01:89.99);
我达到了20像素的值。将值设置为1到' RhoResolution'在霍夫变换函数中更多地混淆了结果。 所以这有点烦人 - 线的长度偏离1(我测试了其他长度)。
更令人烦恼的是原始图像是100x100像素,如果我没有将Theta设置为更高的分辨率,则终点(在我此处提供的初始示例中)不在网格中(x 108的坐标,这里的术语是行是x轴,列是y轴)!
如果我设置' Theta', - 90:0.01:89.99,起点和终点也完全偏离原始点(尽管它们仍然在图像边界内)。
对此的任何帮助将不胜感激。
谢谢!