%%读取文件[fname,dirpath]=uigetfile('*.txt','文件打开对话框');ffname=[dirpathfname];Point=importdata(ffname);SizeXY=size(Point(:,1:2),1);%获取列数figure(1)plot3(Point(:,1...
%% 读取文件
[fname,dirpath]=uigetfile('*.txt','文件打开对话框');
ffname=[dirpath fname];
Point = importdata(ffname);
SizeXY=size(Point(:,1:2),1);%获取列数
figure(1)
plot3(Point(:,1),Point(:,2),Point(:,3));
%% 初始化
%X坐标取值范围
Xmax=max(Point(:,1));
Xmin=min(Point(:,1));
%Y坐标取值范围
Ymax=max(Point(:,2));
Ymin=min(Point(:,2));
%请输入阈值
Winnum1 = inputdlg('循环最小窗口1','最小窗口');
Wnum1 = str2num(Winnum1{1});
Winnum2 = inputdlg('循环最大窗口2','最大窗口');
Wnum2 = str2num(Winnum2{1});
Thre1 = inputdlg('高差阈值min','高差阈值');
Thred1 = str2num(Thre1{1});
Thre2 = inputdlg('高差阈值max','高差阈值');
Thred2 = str2num(Thre2{1});
%选取每个窗口的最小值
ratemax=0;
Point(:,5)=1;%初始化为非地面点
fid = fopen('Result.txt', 'w+');
%% 数据处理
for w=Wnum1:Wnum2 %窗口选择
for t=Thred2:-1:Thred1
da=(Xmax-Xmin)/w;
db=(Ymax-Ymin)/w;
for i=Xmin:da:(Xmax-da) %窗口遍历
for j=Ymin:db:(Ymax-db)
%选择一定窗口内的最小值
P=find(Point(:,1)>i & Point(:,1)j & Point(:,2)
hmin=min(Point(P,3));
m = find((Point(P,3)-hmin)
Point(m,5)=0;%地面点赋值为零
end
end
%找到判断正确的点
correct=Point(:,5)-Point(:,4);
Cornum=size((find(correct==0)),1);
rate=Cornum/SizeXY;
fprintf(fid,'当窗口大小:%d ',w);
fprintf(fid,'阈值大小:%d ',t);
fprintf(fid,'正确率是:%f \n', rate);
%取出最大值
if ratemax
ratemax = rate;
tmax = t;
wmax = w;
end
end
end
%% 保存结果
fclose(fid);
msgbox({'最后的正确率最高的为:',num2str(ratemax),'窗口大小为',num2str(wmax),'阈值大小为',num2str(tmax)});
展开