%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
houghlines.m
最新推荐文章于 2022-08-18 16:58:43 发布