Matlab图像--霍夫变换Hough_Transform

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mr_muli/article/details/81457019

clc,close  
BW=imread('../7.jpg');
BW=rgb2gray(BW);  
% thresh 指定分割方法的阈值
thresh=[0.01,0.17];  

%定义高斯参数
sigma=2;
% canny算子 边缘检测
f = edge(double(BW),'canny',thresh,sigma);  
figure(1),imshow(f,[]);  
title('canny 边缘检测');  

% [H,theta,rho] = hough(BW,p,v)
% H是变换到的hough矩阵。
% theta和rho对应于矩阵每一列和每一行的ρ和θ值组成的向量。
% p与v成对使用。p如果使用thetaresolution则v是θ轴方向上的单位区间的长度,可取(0,90)之间,默认为1;
% p如果使用rhoresolution 则v是ρ轴方向上的单位区间长度,可取(0,norm(size(BW))之间,默认为1。
[H, theta, rho]= hough(f,'RhoResolution', 0.5);  

% peaks = houghpeaks(H,numpeak,p,v)
% peaks是一个Q*2的矩阵,每行的两个元素分别是某一峰值的行列索引,Q为找到的峰值数目。
% numpeak是寻找的峰值数目。
% p和v成对使用。p如果使用threshold则v表示峰值的阈值,只有大于阈值的点才被认为可能是阈值,默认为0.5*max(H(:))。p如果是NHoodSize则表示每次检测出一个峰值后,v就指出该峰值周围需要清零的邻域信息,并以向量[M N] 形式输出。
peak=houghpeaks(H,5);  
hold on  

% lines = houghlines(BW,theta,rho,peaks,p,v) 
% lines是个结构数组,有point1(端点1),point2(端点2),theta,rho。
% p和v成对使用。p如果使用fillgap则v表示同一幅图像中两条线的阈值,小于将会合并,默认20。p如果是minlength则v表示直线段最小长度阈值,默认40。
% point1:两元素向量[r1, c1],指定了线段起点的行列坐标。
% point2:两元素向量[r2, c2],指定了线段终点的行列坐标。
% theta:与线相关的霍夫变换的以度计量的角度。
% rho:与线相关的霍夫变换的ρ轴位置
lines=houghlines(f,theta,rho,peak);

figure,imshow(f,[]),title('Hough Transform Detect Result'),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  

猜你喜欢

转载自blog.csdn.net/mr_muli/article/details/81457019