0001 function clstrs=getedgelineclstrs(angleVector,rangeMatrix,distth)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 fprintf('Progress: ');
0025
0026 if ~exist('distth','var')
0027 distth=0.02;
0028 end
0029
0030
0031
0032
0033
0034 jumpth=0.1;
0035
0036 noscans=size(rangeMatrix,1);
0037 nopts=length(angleVector);
0038
0039 mainlncombvec=combnk(1:nopts,2);
0040
0041
0042
0043 [x,y]=pol2cart(repmat(angleVector,[noscans,1]),rangeMatrix);
0044
0045
0046
0047
0048
0049 splitpoints=cell(noscans,1);
0050 spointdone=cell(noscans,1);
0051
0052 for cntr1=1:noscans
0053 range=rangeMatrix(cntr1,:);
0054
0055 rangeedge=laseredge(range);
0056
0057 jumppts=find(abs(rangeedge)>jumpth);
0058
0059 splitpoints{cntr1}=[1,jumppts,nopts+1];
0060 spointdone{cntr1}=[0,zeros(size(jumppts)),1];
0061 end
0062
0063
0064
0065
0066 progmsg=[];
0067
0068 for cntr1=1:noscans
0069 fprintf(repmat('\b', 1, length(progmsg)));
0070 progmsg=sprintf('%%%i',round(cntr1/noscans*100));
0071 fprintf('%s',progmsg);
0072 while ~isempty(find(spointdone{cntr1}==0,1))
0073
0074 for cntr2=1:length(splitpoints{cntr1})-1
0075 if ~spointdone{cntr1}(cntr2)
0076 indcs=splitpoints{cntr1}(cntr2):splitpoints{cntr1}(cntr2+1)-1;
0077
0078 if length(indcs)>2
0079
0080
0081 mxlen=0;
0082 lncombvec=getcombs(indcs(1),indcs(end),mainlncombvec);
0083 for cntr3=1:size(lncombvec,1)
0084 ind1=lncombvec(cntr3,1);
0085 ind2=lncombvec(cntr3,2);
0086
0087
0088
0089 dist = abs((x(cntr1,ind2)-x(cntr1,ind1))*(y(cntr1,ind1)-y(cntr1,ind1:ind2))-(x(cntr1,ind1)-x(cntr1,ind1:ind2))*(y(cntr1,ind2)-y(cntr1,ind1)))...
0090 /norm([x(cntr1,ind2)-x(cntr1,ind1),y(cntr1,ind2)-y(cntr1,ind1)]);
0091
0092 if isempty(find(dist>distth,1))
0093 if length(dist)>mxlen
0094 mxlen=length(dist);
0095 mxind1=ind1;
0096 mxind2=ind2;
0097 end
0098 end
0099 end
0100
0101
0102 if mxind1==indcs(1) && mxind2==indcs(end)
0103 spointdone{cntr1}(cntr2)=1;
0104 elseif mxind1==indcs(1)
0105 spointdone{cntr1}(cntr2)=1;
0106 spointdone{cntr1}=[spointdone{cntr1}(1:cntr2),0,spointdone{cntr1}(cntr2+1:end)];
0107 splitpoints{cntr1}=[splitpoints{cntr1}(1:cntr2),mxind2+1,splitpoints{cntr1}(cntr2+1:end)];
0108 elseif mxind2==indcs(end)
0109 spointdone{cntr1}=[spointdone{cntr1}(1:cntr2),0,spointdone{cntr1}(cntr2+1:end)];
0110 splitpoints{cntr1}=[splitpoints{cntr1}(1:cntr2),mxind1,splitpoints{cntr1}(cntr2+1:end)];
0111 else
0112 spointdone{cntr1}=[spointdone{cntr1}(1:cntr2),0,0,spointdone{cntr1}(cntr2+1:end)];
0113 splitpoints{cntr1}=[splitpoints{cntr1}(1:cntr2),mxind1,mxind2+1,splitpoints{cntr1}(cntr2+1:end)];
0114 end
0115 break;
0116 else
0117 spointdone{cntr1}(cntr2)=1;
0118 end
0119 end
0120 end
0121 end
0122 for cntr2=1:length(splitpoints{cntr1})-1
0123 clstrs(cntr1,splitpoints{cntr1}(cntr2):splitpoints{cntr1}(cntr2+1)-1)=cntr2;
0124 end
0125 end
0126
0127 fprintf('\n');