利用Arcgis制作图像分割数据集,以制作农村道路标签数据进行二分类为例
一,进行矢量化获取矢量数据
如果已经获取到了矢量数据,可直接跳过此步骤。由于本文是以制作用于进行遥感影像中农村道路提取的数据集无法从网络上获得矢量数据,所以自行获取矢量数据。直接在arcmap中进行矢量化,生成shp文件,由于本文矢量化后的shp文件是线文件,道路是面,直接进行缓冲区分析构建道路的面文件。
二,制作掩膜
这一步主要是提取原始遥感影像中是道路的像素点,并将这些像素点的像素值置为1。经过掩膜提取后的图像大小和原始图像大小一样,只是将目标区域的rgb值保留为原始图像的的rgb值,而将其他区域的rgb值设置为0,操作方法及掩膜提取结果如下图所示。
从上图中可以看到提取的掩膜的rgb值还是原始遥感影像中的rgb值,我要进行深度学习的标签数据像素值应该是只有0和1(我进行的是二分类,非道路和道路),所以我再进行重分类,将所有为道路像素点的值设置为1,操作如下图。
三,mask图像导出
结果重分类后的标签数据还是arcgis的地理数据库中的栅格数据,不是我们要的png,jpg,tif等格式的数据,这里我们将其导出为png格式的图片,具体操作如下图所示。
四,原始遥感影像裁剪
如果按掩膜提取的mask图片和原始遥感影像图片的大小一样可以跳过次步骤。这里需要注意的是经过掩膜提取后的mask图片如果和原始遥感影像的大小不一致的话,可以以提取的mask图片建立一个渔网,对原始遥感影像进行裁剪,使提取的mask图片大小和原始遥感影像的大小一致,治理我只对原始遥感影像矢量化了一部分,掩膜提取的也是原始遥感影像中一部分的道路,所以需要建立渔网提取mask图片与原始遥感影像对应的部分。
如下图所示提取的mask图片和原始遥感影像的图片大小不同。
五,mask图片和遥感图像裁剪及训练集、测试集数据划分
1)导出的mask图片深度是24位的在Windows上是无法显示的,只会看到一篇漆黑,可进行深度转换,代码如下
# 将图片进行深度转换,24位转8位
# 24位转8位灰度
from PIL import Image
im_r = Image.open(r'E:/image_to_label/orig_image/reclass_road1.png')
im_rr = Image.fromarray(np.uint8(im_r))
print(im_rr.mode)
t = im_rr.convert("L")
print(t.mode)
im_rrr = Image.fromarray(np.uint8(t)*255)
print(im_rrr.mode)
im_rrr.save(