如何在MATLAB中选择Hough变换的最大强度?

时间:2009-12-29 15:31:08

标签: matlab computer-vision hough-transform

Hough transform中执行MATLAB后,如何选择这些线条以便我可以比较两个或多个图像?

我按照Amro给出的例子,实际上我想要检测的是第一张照片中的两行。但是,我得到的是第二张照片中的那个。我怎样才能做到这一点?

Alt text

Alt text

1 个答案:

答案 0 :(得分:4)

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

无论如何,为了找到 Hough transform 函数生成的hough矩阵中的最大强度,我们使用 houghpeaks 功能,并传递所需数量的峰值进行检测。


EDIT1:

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

%# 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

Accumulator matrix Image with overlayed lines


EDIT2:

根据您最近的更新,我设法通过仅对上述代码进行一些更改来检测这些行:

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

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

Four enclosing lines