matlab-哈夫变换识别图像(棋盘)直线/直线检测

代码实现:



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  

运行结果:

matlab-哈夫变换识别图像(棋盘)直线/直线检测_第1张图片
matlab-哈夫变换识别图像(棋盘)直线/直线检测_第2张图片
matlab-哈夫变换识别图像(棋盘)直线/直线检测_第3张图片

致谢:本篇博客参考以下大佬的内容;

Hough直线检测原理及Matlab函数详解
Matlab实现——霍夫变换直线检测

你可能感兴趣的:(matlab)