matlab实现地图匹配,谁能看懂是用什么算法进行地图匹配的
image=imread('map.jpg');%读入地图文件
image_2=im2bw(image,0.56);%进行阈值化处理 参数可改
image_d=double(image_2);
obj_col=54;%设定原始列位置 可改 X
obj_row=77;%设定原始行位置 可改 Y
input_angle=atan(obj_row/obj_col);%设定原始速度方向 可改
%-----------------------------------------
A=8;%A为分块大小 分为A*A块大小
[m,n]=size(image_d);
row=fix(m/A);%row为分块后的行数
col=fix(n/A);%col为分块后的列数
image_cell=mat2cell(image_d,ones(row,1)*A,ones(col,1)*A);
image_array=ones(A,A,row*col);
for k=1:row*col
image_array(:,:,k)=image_cell{k}(:,:);
end
%-----------------------------------------
temp_row=ceil((obj_row/A));
temp_col=ceil((obj_col/A));
number=(temp_col-1)*row+temp_row;%number为目标点所在的块的编号
%-----------------------------------------
near(1)=number-1-row;%获得邻近块编号
near(2)=number-1;
near(3)=number-1+row;
near(4)=number-row;
near(5)=number;
near(6)=number+row;
near(7)=number+1-row;
near(8)=number+1;
near(9)=number+1+row;
%-----------------------------------------
small=1000;
final_i=0;
fianl_j=0;
final_k=0;
flag=0;%标志是否找到匹配点
for k=1:9
for i=2:A-1
for j=2:A-1
if image_array(i,j,near(k))==0
temp_col_2=1+floor(near(k)/row);
temp_row_2=near(k)-(temp_col_2-1)*row;
temp_row_3=(temp_row_2-1)*A+i;
temp_col_3=(temp_col_2-1)*A+j;
dis=distance(temp_row_3,temp_col_3,obj_row,obj_col);
temp=image_array(:,:,near(k));
angle=find_near_node(temp,i,j,k,input_angle);
if deside(temp_col_3,temp_row_3,obj_col,obj_row)
all=dis*0.6+angle*0.4;
if all<=small
small=dis;
final_i=i;%最终匹配点
fianl_j=j;%最终匹配点
final_k=near(k);%最终匹配点
flag=1;
end
else
flag=0;
end
end
end
end
end
%-----------------------------------------
switch final_k
case 1
final_k=number-1-row;
case 2
final_k=number-1;
case 3
final_k=number-1+row;
case 4
final_k=number-row;
case 5
final_k=number;
case 6
final_k=number+row;
case 7
final_k=number+1-row;
case 8
final_k=number+1;
case 9
final_k=number+1+row;
end
final_col=floor(final_k/row)+1;
final_row=final_k-(final_col-1)*row;
final_x=(final_row-1)*A+final_i;
final_y=(final_col-1)*A+fianl_j;
%-----------------------------------------
imshow(image_d);
hold on
plot(obj_col,obj_row,'o')
place_x_o=num2str(obj_row);
place_y_o=num2str(obj_col);
clc;
temp=['原始点位置为',place_x_o,'行',place_y_o,'列'];
disp(temp);
if flag==1
plot(final_y,final_x,'*')
place_x=num2str(final_x);
place_y=num2str(final_y);
temp=['找到匹配点位置为',place_x,'行',place_y,'列'];
disp(temp);
else
disp('附近没有可匹配的点,请尝试修改网格大小');
end
axis([0 128 0 128]);
xlabel('.表示原始位置 *表示校准后位置');
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)