为什么霍夫找不到线?

时间:2014-05-08 12:07:58

标签: matlab image-processing computer-vision hough-transform

我使用以下代码从给定的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);

然后我在给定图像上绘制找到的线条。结果如下:

The lines found by my hough transform

我无法理解的是,为什么这个程序在图像的左边界没有找到一条线,从上到下(反之亦然)。相反,例如粉红色线被发现,我认为它在霍夫空间中的证据较少(因为它接触较少的白色像素)。 有没有人有直觉为什么会出现这种情况?

我尝试稍微更改参数或为图像添加一些填充,但到目前为止没有任何工作。

编辑: 原始图片要求:

original image

1 个答案:

答案 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');

输出是这样的: Hough transform result