小菊的语义分割2🌼——数据集的制作(一): ISPRS_Potsdam遥感图像数据集

"遥感图像数据集, 语义分割数据集制作"

Posted by fuhao7i on December 21, 2020

1. 为什么要对遥感图像进行切分?

一般的遥感图像尺寸都是非常大的,就像这里我们用的ISPRS遥感图像数据集,每张遥感图像.ttf的尺寸都是6000 x 6000,这根本就不能用于我们的模型训练😣(内存瞬干爆炸💥),因此需要我们自己将大的遥感图像切分成自己需要的尺寸,像是常用的224 x 224,512 x 512等。

大家可以利用如下代码将遥感图像切分成224 x 224的大小,如需改成其他尺寸可以稍作修改。

2. 切分图像,制作数据集

Labels图像的大小和遥感图像的大小是一样的,所以我们在切分图像的时候,也需要一块把Labels图像切分了,以便RGB图像和Labels图像对应。

gen_datasets.py

因为我的电脑承受不了太大的数据集😅,所以在制作数据集的时候我只切分了一张遥感图像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import cv2
import numpy


img1 = cv2.imread('/Users/fuhao7i/Desktop/北漠/ISPRS遥感图像分割/2_Ortho_RGB/top_potsdam_2_10_RGB.tif') #读取RGB原图像

img2 = cv2.imread('/Users/fuhao7i/Desktop/北漠/ISPRS遥感图像分割/5_Labels_all/top_potsdam_2_10_label.tif') #读取Labels图像

#因为6000/224 = 26,所以6000x6000的图像可以划分为26x26个224x224大小的图像
for i in range(26):
    for j in range(26):
        img1_ = img1[224*i : 224*(i+1), 224*j : 224*(j+1), : ]
        img2_ = img2[224*i : 224*(i+1), 224*j : 224*(j+1), : ]

        name = i*26 + j
        #让RGB图像和标签图像的文件名对应
        name = str(name)
        cv2.imwrite('./jpg/'+ name + '.jpg', img1_) #所有的RGB图像都放到jpg文件夹下
        cv2.imwrite('./png/'+ name + '.png', img2_) #所有的标签图像都放到png文件夹下

e.g.

gen_testdata.py

同理可以得到测试集图像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import cv2
import numpy

testdata_path = '/Users/fuhao7i/Desktop/北漠/ISPRS遥感图像分割/2_Ortho_RGB/top_potsdam_2_13_RGB.tif'

img = cv2.imread(testdata_path)


for i in range(18,26):
    for j in range(18,26):
        img_ = img[224*i : 224*(i+1), 224*j : 224*(j+1), : ]

        name = i*26 + j
        name = str(name)
        cv2.imwrite('./test/'+ name + '.jpg', img_)

get_train_txt.py

1
2
3
4
5
6
7
8
9
import os

filename = os.listdir('./jpg')

with open('./train.txt', 'w') as f:
    for name in filename:
        name = name.split('.')[0]
        f.write(name + '.jpg;' + name + '.png\n')

e.g.

现在我们的遥感图像数据集就准备好了🎉,让我们一起开始小菊的语义分割吧~~~