我正在尝试编写一些代码,可以在图像中找到线条,并在找到的线条上画一条红线。我已经设法使用霍夫变换做到了这一点,但我的问题是,我需要它只找到水平和垂直线,而忽略了所有其他斜率的线条。
我想我可以通过查找代码找到的直线的斜率来解决这个问题,并且使用if语句只在水平线和垂直线上显示红线,但是我在如何从找到的点中提取x和y值方面遇到了麻烦。
有人对如何解决这个问题有什么建议吗?
下面是我的代码:
function findlineshv(I)
% Read Image
img = imread(I);
% Convert to black and white because
% edge function only works with BW imgs
bwImage = rgb2gray(img);
% figure(1),imshow(bwImage);
% find edges using edge function
b=edge(bwImage,'sobel');
% show edges
% figure(1),imshow(b);
% compute the Hough transform of the edges found
% by the edge function
[hou,theta,rho] = hough(b);
% define peaks, x and y
peaks = houghpeaks(hou,5,'threshold',ceil(0.3*max(hou(:))));
x = theta(peaks(:,2));
y = rho(peaks(:,1));
lines = houghlines(bwImage,theta,rho,peaks,'FillGap',5,'MinLength',7);
figure, imshow(bwImage), hold on
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',3,'Color','red');
end
2条答案
按热度按时间puruo6ea1#
只需在Hough函数中设置所需的theta值即可完成此操作。
k2fxgqgv2#
这可以通过使用前面回答的所需θ范围来完成。增加这一点以提及θ范围必须在[-90,90)之内。
按以下方式更改Angular 限制将生成垂直线:
参考:https://www.mathworks.com/help/images/hough-transform.html