houghlines.m

%houghlines源程序
function lines=houghlines(f,theta,rho,rr,cc,fillgap,minlength)
%houghlines建立在Hough变换提取线部分
%lines=houghlines(f,theta,rho,rr,cc,fillgap,minlength)在一个Hough变换中,联系特殊的bin提取在图像f中的线部分。
%theta和rho是被Hough函数返回的向量。
%向量rr和cc是确立了Hough变换bins中的行和列,在线部分寻找。
%如果houghlines联系同一个Hough变换bin找到两个线部分,将通过小于fillgap像素被分开,houghlines将混合它们去一个单一线部分。
%若忽略,fillgap默认为20.
%合并线部分低于minlength像素长是被扔掉的。
%若忽略,minlength默认为40.
%
%lines是一个数组结构,它的长度等于找到合并线部分的数量。结构数组的每个元素有几个方面:
%point1     线部分的终点;二维向量
%point2     线部分的终点;二维向量
%length     point1和point2的距离
%theta       Hough变换bin的角度(在水平上)
%rho          Hough变换bin的rho的坐标方向

if nargin<6
    fillgap=20;
end
if nargin<7
    minlength=40;
end

numlines=0;lines=struct;
for k=1:length(rr)
    rbin=rr(k);cbin=cc(k);
    
    %得到所有像素与Hough变换单位相联系
    [r,c]=houghpixels(f,theta,rho,rbin,cbin);
    if isempty(r)
        continue
    end
    
    %转换像素位于(1,1)为了它们逼在一垂线上
    omega=(90-theta(cbin))*pi/180;
    T=[cos(omega) sin(omega);-sin(omege) cos(omega)];
    xy=[r-1 c-1]*T;
    x=sort(xy(:,1));
    
    %找到大于阈值的缺口
    diff_x=[diff(x);Inf];
    idx=[0;find(diff_x>fillgap)];
    for p=1:length(idx)-1;
        x1=x(idx(p)+1);x2=x(idx(p+1));
        linelength=x2-x1;
        if linelength>=minlength
            point1=[x1 rho(rbin)];point2=[x2 rho(rbin)];
            %转换端点回到初始角度
            Tinv=inv(T);
            point1=point1*Tinv;point2=point2*Tinv;
            numlines=numlines+1;
            lines(numlines).point1=point1+1;
            lines(numlines).point2=point2+1;
            lines(numlines).length=linelength;
            lines(numlines).theta=theta(cbin);
            lines(numlines).rho=rho(rbin);
        end
    end
end
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值