我使用以下代码从给定的25x25 black& white-image中提取线条:
[H, theta, rho] = hough(image);
peaks = houghpeaks(H, 20,'NHoodSize',[19 19]);
lines = houghlines(image, theta, rho, peaks, 'FillGap', 1, 'MinLength', 3);
然后我在给定图像上绘制找到的线条。结果如下:
我无法理解的是,为什么这个程序在图像的左边界没有找到一条线,从上到下(反之亦然)。相反,例如粉红色线被发现,我认为它在霍夫空间中的证据较少(因为它接触较少的白色像素)。 有没有人有直觉为什么会出现这种情况?
我尝试稍微更改参数或为图像添加一些填充,但到目前为止没有任何工作。
编辑: 原始图片要求:
在
答案 0 :(得分:2)
默认阈值太高,因此找不到该行。我也减少了nhood的大小,因为你想要找到水平和垂直线而不是角度,所以它们都会彼此非常接近。另请注意,在顶部我将边缘设置为零,在您张贴的图像中,外面有一个204的薄边框,这只是消除了边框。这是我的剧本。
clc;clearvars;close all;
im=imread('B5oOc.png');
im=rgb2gray(im);
im(:,1:2)=0;
im(1,:)=0;
im(end,:)=0;
im(:,end)=0;
BW=edge(im,'canny');
[H, T, R] = hough(BW);
P = houghpeaks(H, 20,'NHoodSize',[1 1],'threshold',ceil(0.3*max(H(:))));
lines = houghlines(BW, T, R, P, 'FillGap', 1, 'MinLength', 3);
imshow(imadjust(mat2gray(H)),'XData',T,'YData',R,...
'InitialMagnification','fit');
title('Hough Transform of Image');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(hot);
x = T(P(:,2));
y = R(P(:,1));
plot(x,y,'s','color','blue');
figure;
imagesc(im);hold on;colormap gray;
axis image;
max_len = 0;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
% Plot beginnings and ends of lines
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
% Determine the endpoints of the longest line segment
len = norm(lines(k).point1 - lines(k).point2);
if ( len > max_len)
max_len = len;
xy_long = xy;
end
end
% highlight the longest line segment
plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','red');
输出是这样的: