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

如何在MATLAB中选择Hough变换的最大强度?,matlab,computer-vision,hough-transform,Matlab,Computer Vision,Hough Transform,在执行“输入”后,如何拾取线条以便在两个或多个图像之间进行比较 我遵循Amro给出的示例,实际上我想要检测的是第一张图片中的两行。然而,我得到的是第二张照片中的那张。我该怎么做 我想你的目标是检测图像中的线条,而不是比较两幅图像(?) 无论如何,为了找到由函数生成的矩阵中的最大强度,我们使用函数,并将所需数量的峰值传递给它进行检测 编辑1: 我想我应该添加一个示例来说明该过程: %# Load image, process it, find edges I = rgb2gray( imre

在执行“输入”后,如何拾取线条以便在两个或多个图像之间进行比较

我遵循Amro给出的示例,实际上我想要检测的是第一张图片中的两行。然而,我得到的是第二张照片中的那张。我该怎么做


我想你的目标是检测图像中的线条,而不是比较两幅图像(?)

无论如何,为了找到由函数生成的矩阵中的最大强度,我们使用函数,并将所需数量的峰值传递给它进行检测


编辑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]
  • 我使用了一个11x11高斯滤波器,sigma=3
注意:您必须添加偏移以获得原始图像中未剪切的线条位置。此外,如果您想要更精确的结果,您可能需要检测四行,并在中间得到行,如下所示:


非常感谢!这个例子真的帮了我很大的忙。@Veronica:这看起来是个很好的答案-你为什么不接受它?有没有一种方法可以让我在检测到线条后比较其中的两幅图像,以便计算位移和方向的变化?@Veronica:对于这个问题,我相信我给出的答案是合适的。请考虑接受。关于图像注册,由于您发布了另一个问题,我在这里提供了一个答案: