在Hough transform中执行MATLAB后,如何选择这些线条以便我可以比较两个或多个图像?
我按照Amro给出的例子,实际上我想要检测的是第一张照片中的两行。但是,我得到的是第二张照片中的那个。我怎样才能做到这一点?
答案 0 :(得分:4)
我认为你的目标是检测图像中的线条,而不是比较两个图像(?)。
无论如何,为了找到 Hough transform 函数生成的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]
注意:您必须添加偏移量才能获取未剪切原始图像中线条的位置。此外,如果您想要更准确的结果,您可能需要检测四条线并将线条放在中间,如下所示: