function [linesInfo1,linesInfo2]=LineRefiner(linesInfo1,linesInfo2,valIntPts,distThre)
% [linesInfo1,linesInfo2]=LineRefiner(linesInfo1,linesInfo2,valIntPts)
% 用于将各线段的端点延伸至最近的有效交点处。
% 输入:
% 输入包含3个必要参数。
% linesInfo1为主方向直线段结构体数组<1xM struct>。
% linesInfo2为次方向直线段结构体数组<1xN struct>。
% valIntPts为有效交点结构体矩阵<MxN struct>。
% 输出:
% 输出包含2个必要参数。
% linesInfo1为修正后的主方向直线段结构体数组<1xM struct>。
% linesInfo2为修正后的次方向直线段结构体数组<1xM struct>。
% 示例:
% priLinesInfo=LinesSorter(priLinesInfo);
[M,N]=size(valIntPts);
used1=cell(1,M);
used2=cell(1,N);
for m=1:M
used1{m}=zeros(1,length(linesInfo1(m).x1));
end;
for n=1:N
used2{n}=zeros(1,length(linesInfo2(n).x1));
end;
for i=1:M
for j=1:N
switch (valIntPts(i,j).type)
case 2
%% 在主方向直线上且距离次方向线段端点在阈值内(在线段上)
for n=1:length(linesInfo2(j).x1)
dist1=sqrt((valIntPts(i,j).x-linesInfo2(j).x1(n))^2+(valIntPts(i,j).y-linesInfo2(j).y1(n))^2);
dist2=sqrt((valIntPts(i,j).x-linesInfo2(j).x2(n))^2+(valIntPts(i,j).y-linesInfo2(j).y2(n))^2);
if ((dist1>distThre)&&(dist2>distThre))
continue;
end;
if (dist1<dist2)
linesInfo2(j).x1(n)=valIntPts(i,j).x;
linesInfo2(j).y1(n)=valIntPts(i,j).y;
else
%% 判断右端点是否已经延长过,如果延长过则不再延长,除非再延长的长度小于2
if (used2{j}(n)==0)
linesInfo2(j).x2(n)=valIntPts(i,j).x;
linesInfo2(j).y2(n)=valIntPts(i,j).y;
used2{j}(n)=1;
elseif (dist2<2)
linesInfo2(j).x2(n)=valIntPts(i,j).x;
linesInfo2(j).y2(n)=valIntPts(i,j).y;
end;
end;
linesInfo2(j).len(n)=sqrt((linesInfo2(j).x2(n)-linesInfo2(j).x1(n))^2+(linesInfo2(j).y2(n)-linesInfo2(j).y1(n))^2);
end;
case 3
%% 在次方向直线上且距离主方向线段端点在阈值内(在线段上)
for m=1:length(linesInfo1(i).x1)
dist1=sqrt((valIntPts(i,j).x-linesInfo1(i).x1(m))^2+(valIntPts(i,j).y-linesInfo1(i).y1(m))^2);
dist2=sqrt((valIntPts(i,j).x-linesInfo1(i).x2(m))^2+(valIntPts(i,j).y-linesInfo1(i).y2(m))^2);
if ((dist1>distThre)&&(dist2>distThre))
continue;
end;
if (dist1<dist2)
linesInfo1(i).x1(m)=valIntPts(i,j).x;
linesInfo1(i).y1(m)=valIntPts(i,j).y;
else
%% 判断右端点是否已经延长过,如果延长过则不再延长,除非再延长的长度小于2
if (used1{i}(m)==0)
linesInfo1(i).x2(m)=valIntPts(i,j).x;
linesInfo1(i).y2(m)=valIntPts(i,j).y;
used1{i}(m)=1;
elseif (dist2<2)
linesInfo1(i).x2(m)=valIntPts(i,j).x;
linesInfo1(i).y2(m)=valIntPts(i,j).y;
end;
end;
linesInfo1(i).len(m)=sqrt((linesInfo1(i).x2(m)-linesInfo1(i).x1(m))^2+(linesInfo1(i).y2(m)-linesInfo1(i).y1(m))^2);
end;
case 4
%% 距离俩线段端点均在阈值内(不在线段上)
for m=1:length(linesInfo1(i).x1)
dist1=sqrt((valIntPts(i,j).x-linesInfo1(i).x1(m))^2+(valIntPts(i,j).y-linesInfo1(i).y1(m))^2);
dist2=sqrt((valIntPts(i,j).x-linesInfo1(i).x2(m))^2+(valIntPts(i,j).y-linesInfo1(i).y2(m))^2);
if ((dist1>distThre)&&(dist2>distThre))
continue;
end;
if (dist1<dist2)
linesInfo1(i).x1(m)=valIntPts(i,j).x;
linesInfo1(i).y1(m)=valIntPts(i,j).y;
else
%% 判断右端点是否已经延长过,如果延长过则不再延长,除非再延长的长度小于2
if (used1{i}(m)==0)
linesInfo1(i).x2(m)=valIntPts(i,j).x;
linesInfo1(i).y2(m)=valIntPts(i,j).y;
used1{i}(m)=1;
elseif (dist2<2)
linesInfo1(i).x2(m)=valIntPts(i,j).x;
linesInfo1(i).y2(m)=valIntPts(i,j).y;
end;
end;
linesInfo1(i).len(m)=sqrt((linesInfo1(i).x2(m)-linesInfo1(i).x1(m))^2+(linesInfo1(i).y2(m)-linesInfo1(i).y1(m))^2);
end;
for n=1:length(linesInfo2(j).x1)
dist3=sqrt((valIntPts(i,j).x-linesInfo2(j).x1(n))^2+(valIntPts(i,j).y-linesInfo2(j).y1(n))^2);
dist4=sqrt((valIntPts(i,j).x-linesInfo2(j).x2(n))^2+(valIntPts(i,j).y-linesInfo2(j).y2(n))^2);
if ((dist3>distThre)&&(dist4>distThre))
continue;
end;
if (dist3<dist4)
linesInfo2(j).x1(n)=valIntPts(i,j).x;
linesInfo2(j).y1(n)=valIntPts(i,j).y;
else
%% 判断右端点是否已经延长过,如果延长过则不再延长,除非再延长的长度小于2
if (used2{j}(n)==0)
linesInfo2(j).x2(n)=valIntPts(i,j).x;
linesInfo2(j).y2(n)=valIntPts(i,j).y;
used2{j}(n)=1;
elseif (dist4<2)
linesInfo2(j).x2(n)=valIntPts(i,j).x;
linesInfo2(j).y2(n)=valIntPts(i,j).y;
end;
end;
linesInfo2(j).len(n)=sqrt((linesInfo2(j).x2(n)-linesInfo2(j).x1(n))^2+(linesInfo2(j).y2(n)-linesInfo2(j).y1(n))^2);
end;
otherwise
end;
end;
end;
end
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
自己实现的LSD直线检测算法,比论文提供的LSD检测算法少了很多复杂操-(LSD own line detection algorithm implemented, LSD detection algorithm than the paper offered a lot less complicated operation)
资源推荐
资源详情
资源评论
收起资源包目录
LSD直线提取算法MATLAB.rar (20个子文件)
LSD直线提取算法MATLAB
LSD直线检测算法
CenterGetter.m 767B
Line_influ.m 665B
LineAmender.m 2KB
LineSegmentDetector.m 5KB
test.m 199B
RectangleConverter.m 2KB
Refiner.m 2KB
RectangleNFACalculator.m 4KB
OrientationGetter.m 1KB
RegionGrower.m 2KB
LinesSorter.m 803B
LogGammaCalculator.m 1KB
test.png 305KB
LineRefiner.m 6KB
GaussianSampler.m 2KB
RectangleImprover.m 3KB
LineOritationAdjuster.m 6KB
LineCoalescer.m 5KB
LineEliminator.m 836B
RegionRadiusReducer.m 2KB
共 20 条
- 1
zwl2022
- 粉丝: 7
- 资源: 225
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
前往页