Matlab图像--霍夫变换Hough_Transform


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  
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值