Matlab中将一幅图片做成栅格地图

1、选取一张可以作为地图的图片

这个地图可以用来做路径规划等用途。如图任选一张,这里以海岛为例,因为岛屿可以视为障碍物,其余海域则为船舶航行区域,陆地也是一样。
Matlab中将一幅图片做成栅格地图_第1张图片
虽然地图选好了,但这张图是有一点瑕疵的,可以发现他的岛屿是白色的,海水是浅蓝色,两个颜色相近。在读取图片数字矩阵的时候容易造成障碍物遗漏,像下面这种情况
Matlab中将一幅图片做成栅格地图_第2张图片
Matlab中将一幅图片做成栅格地图_第3张图片
从数字矩阵看出,208代表海水区域,其余代表障碍物(海岛)但是由于颜色太接近导致区分不清。最终栅格地图什么也没搞到。
问题来了,原图颜色太接近,那就处理下好了,让他区别大一些。

2、处理地图

这里我是用的ps大法,首先新建一个空白图层,然后在原图层的副本上进行魔法棒操作,用魔法棒点击海水就会将颜色相同的海水选上,如图
Matlab中将一幅图片做成栅格地图_第4张图片之后再用反向选择工具选择海岛
Matlab中将一幅图片做成栅格地图_第5张图片
将所选区域移动到新建的空白图层上。在调整新图片的亮度对比度,这样轻松让海岛变黑,海水变白。~ _ ~
Matlab中将一幅图片做成栅格地图_第6张图片
我们再讲图片里的白点用画笔涂黑,太小的岛屿就直接删去了。留着没意义。最后将处理好的图片保存为JPG格式。

导入Matlab程序

Matlab中将一幅图片做成栅格地图_第7张图片
这里将栅格分为50x50格,分的越细越精确,但是网格太密以后处理智能体路径规划可能导致智能体被卡主,这里网格大小的规定有公式可循,具体请百度相应文献。



I=imread('1234.jpg');   %读入图片
I = rgb2gray(I);     %将图片转为灰度图


a=50; 
b=50; 
l=1;    %网格边长
B = imresize(I,[a/l b/l]);%   将数字矩阵转为规定的大小
J=floor(B/255);     %将障碍物所在矩阵转为0,其余区域为1.也可自己将其改为障碍物为1,可行域为0.


axes('GridLineStyle', '-'); 

set(gca,'ydir','reverse');     %y坐标调换,
set(gca,'xdir','reverse')     %x坐标调换
hold on 
grid on
axis([0,a,0,b]); 
set(gca,'xtick',0:10:a,'ytick',0:10:b); 
set(gca,'xtick',longitude,'ytick',latitude) 

%障碍物填充为黑色
for i=1:a/l-1 
for j=1:b/l-1 
if(J(i,j)==0) 
y=[i,i,i+1,i+1]*l; 
x=[j,j+1,j+1,j]*l; 
h=fill(x,y,'k'); 
hold on 
end 
end 
end

好了啰嗦完了,博文质量堪忧,我会努力的写出精炼的博文!
最后上一张150x150网格数量的图
Matlab中将一幅图片做成栅格地图_第8张图片

你可能感兴趣的:(人工智能,程序源码,学习,入门,栅格地图,matlab,路径规划)