3

MATLAB中进行霍夫变换后,如何选择线条以便在两个或多个图像之间进行比较?

我遵循了 Amro 给出的示例,实际上我想要检测的是第一张图片中的两条线。但是,我得到的是第二张图片中的那个。我怎样才能做到这一点?

替代文字

替代文字

4

1 回答 1

4

我认为您的目标是检测图像中的线条,而不是比较两个图像(?)。

无论如何,为了在函数生成的霍夫变换矩阵中找到最大强度hough,我们使用该houghpeaks函数,并将所需的峰值数量传递给它以进行检测。


编辑1:

我想我会添加一个示例来显示该过程:

%# Load image, process it, find edges
I  = rgb2gray( imread('pillsetc.png') );
I = imcrop(I, [30 30 450 350]);
J = imfilter(I, fspecial('gaussian', [17 17], 5), 'symmetric');
BW = edge(J, 'canny');

%# Perform Hough transform and show matrix
[H,T,R] = hough(BW);
imshow(imadjust(mat2gray(H)), [], 'XData',T, 'YData',R, ...
       'InitialMagnification','fit')
xlabel('\theta (degrees)'), ylabel('\rho')
axis on, axis normal, hold on
colormap(hot), colorbar

%# Detect peaks
P  = houghpeaks(H, 4);
plot(T(P(:,2)), R(P(:,1)), 'gs', 'LineWidth',2);

%# Detect lines and overlay on top of image
lines = houghlines(BW, T, R, P);
figure, imshow(I), hold on
for k = 1:length(lines)
    xy = [lines(k).point1; lines(k).point2];
    plot(xy(:,1), xy(:,2), 'g.-', 'LineWidth',2);
end
hold off

累加器矩阵 带有重叠线条的图像


编辑2:

在您最近的更新之后,我只对上述相同的代码进行了一些更改,就设法检测到了这些行:

  • 我将该区域裁剪为:[200 70 160 140]
  • 我使用了 sigma=3 的 11x11 高斯滤波器

注意:您必须添加偏移量才能获得未裁剪的原始图像中线条的位置。此外,如果您想要更准确的结果,您可能需要检测四行并获取中间的行,如下所示:

四个封闭线

于 2009-12-29T15:43:57.553 回答