个人邮箱:570664186@qq.com,如有疑问请备注CSDN
代码实现:
clear;
close all;
img = imread('C:\Users\lenovo\Desktop\1(1).bmp');
figure(1),
subplot(1,2,1);
imshow(img);
title('原始图像');
img=rgb2gray(img); % 灰度图像
subplot(1,2,2);
imshow(img);
title('灰度图像');
thresh=[0.01,0.10]; %敏感度阈值
sigma=3;%定义高斯参数
f = edge(double(img),'canny',thresh,sigma); %边缘检测
figure(2),
imshow(f);
title('canny 边缘检测');
% 检测函数;
[H, theta, rho]= hough(f,'Theta', 20:0.1:75); %0-1
% H->累计数组 , thetaH:对应的θ,实际上H的大小就是Rho×Theta
% Rho:H对应的ρ
peak=houghpeaks(H,1); %峰值提取
hold on %保留当前的图和特定的坐标轴属性,以便后续的绘图命令添加到现有的图表。
%得到线段信息
lines=houghlines(f,theta,rho,peak);
figure(3);
imshow(f,[]);
title('霍夫变换检测结果');
hold on ;
for k=1:length(lines)
xy=[lines(k).point1;lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',4,'Color',[.6 .6 .6]);
end
运行结果:
致谢:本篇博客参考以下大佬的内容;
Hough直线检测原理及Matlab函数详解 Matlab实现——霍夫变换直线检测