美文网首页
根据武大公开影像数据制作遥感影像语义分割样本库

根据武大公开影像数据制作遥感影像语义分割样本库

作者: 南太湖小蚂蚁 | 来源:发表于2021-03-02 15:27 被阅读0次

    GID数据集(Gaofen Image Dataset)由武汉大学夏桂松团队制作。它包含从中国60多个城市获得的150张高分辨率Gaofen-2(高分二号卫星)图像(7200*6800)。这些图像覆盖了超过50,000平方公里的地理区域。GID中的图像具有高的类内分集以及较低的类间可分离性。分为建成区、农用地、林地、草地、水系与未标记区域,共6类,如下图所示。


    这个数据用来做遥感深度学习影像解译(语义分割)是比较好的素材,特别是对于很多同学无法直接找到清晰可用的语义分割素材。VOC数据集比较适合通用的语义分割,对于遥感影像的分割用这一类高分卫星拍摄的数据比较好。

    武大的GID数据包含150张高分辨率影像以及其标签,但是标签是以RPG三通道的图片存储的,不利于我们直接拿来训练,语义的分割的标签最好是单通道灰度图,每个像素赋予一个标签。所以我们需要对原始的标签进行一些处理。直接上代码:

    """
    make label
    @author: ZhangJian
    """
    
    from skimage.io import imread, imsave
    import skimage
    import numpy as np
    import os
    
    
    def label(img_path, new_path, file_name="label2.tif"):
        img = imread(img_path)
        #print(img)
        print(img.shape)
        width = img.shape[0]
        height = img.shape[1]
        print(type(img[0][0]))
        new_image = np.random.randint(0, 256, size=[width, height], dtype=np.uint8)
        print(np.array([0, 255, 0]))
    
    
        for i in range(img.shape[0]):
            for j in range(img.shape[1]):
                if all(np.array(img[i][j]) == np.array([255, 0, 0])):  # 红色,建成区
                    #new_image[i][j] = 100
                    new_image[i][j] = 1
                elif all(np.array(img[i][j]) == np.array([0, 255, 0])):  # 绿色,农用地
                    #new_image[i][j] = 50
                    new_image[i][j] = 2
                elif all(np.array(img[i][j]) == np.array([0, 255, 255])):  # 天蓝色,林地
                    #new_image[i][j] = 150
                    new_image[i][j] = 3
                elif all(np.array(img[i][j]) == np.array([255, 255, 0])):  # 黄色,草地
                    #new_image[i][j] = 200
                    new_image[i][j] = 4
                elif all(np.array(img[i][j]) == np.array([0, 0, 255])):  # 蓝色,水系
                    #new_image[i][j] = 250
                    new_image[i][j] = 5
                else:
                    new_image[i][j] = 0
                pass
    
        imsave(new_path+file_name, new_image)
    
        #skimage.io.imshow(new_image)
        #skimage.io.show()
    
    
    if __name__ == "__main__":
        # 读取文件夹下的所有图片,并进行处理,存储到相应文件夹下
        files = os.listdir("H:\深度学习二期\武大公开数据\label_5classes")
        for file in files:
            print("--------------%s" % file)
            label("H:\\深度学习二期\\武大公开数据\\label_5classes\\"+file, "H:\\深度学习二期\武大公开数据\\mylabel\\", file)
    

    这里要注意的就是,我读取的是三通道的RGB图像,生成的是单通道的灰度图像,因此我的size里面就定义了两个维度。另外就是,在遍历原图像时,判断某个像素是否属于某种颜色的时候,由于是三通道的数组,不能直接用"=="比较,而是要加上all( ),也就是数组中的每个元素都相同才行。

    生成后的标签直接打开是一片黑的,因为我赋值直接给出了1,2,3,4,5,相对于[0,255]区间的灰度值来说,都是接近黑色的,因此直接看是看不出来的。需要在QGIS一类的软件中展现:

    原图

    原始高分影像

    原始标签

    武大原始标签

    处理过后的标签

    处理后单通道标签

    相关文章

      网友评论

          本文标题:根据武大公开影像数据制作遥感影像语义分割样本库

          本文链接:https://www.haomeiwen.com/subject/kaxxqltx.html