在MATLAB中进行霍夫变换后,如何选择线条以便在两个或多个图像之间进行比较?
我遵循了 Amro 给出的示例,实际上我想要检测的是第一张图片中的两条线。但是,我得到的是第二张图片中的那个。我怎样才能做到这一点?
我认为您的目标是检测图像中的线条,而不是比较两个图像(?)。
无论如何,为了在函数生成的霍夫变换矩阵中找到最大强度hough
,我们使用该houghpeaks
函数,并将所需的峰值数量传递给它以进行检测。
我想我会添加一个示例来显示该过程:
%# 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
在您最近的更新之后,我只对上述相同的代码进行了一些更改,就设法检测到了这些行:
[200 70 160 140]
注意:您必须添加偏移量才能获得未裁剪的原始图像中线条的位置。此外,如果您想要更准确的结果,您可能需要检测四行并获取中间的行,如下所示: