Potsdam 数据集预处理(切割)

Potsdam 数据集预处理(切割)


Potsdam 数据集是一个优秀的城市语义分割数据集主要包含’background’,‘car’,‘tree’,‘low vegetation’,‘building’,'impervious surfaces’共六个类别。


下载完数据集之后解压文件如下,主要使用图片中标注的文件。分别是原始RGB图像,全部标注,部分标注。 采用将部分标注作为训练集,其余图像作为测试集。(PS:2_Ortho_RGB文件夹下的文本文件不清楚是什么,直接删除了)

在这里插入图片描述
对程序中的文件路径需要切换,已使用多进程加速!

import cv2
import matplotlib.pyplot as plt
import os
import numpy as np
import multiprocessing
from PIL import Image
# CLASS = ['background','car','tree','low vegetation','building','impervious surfaces']

def crop(img,target,size,overlap,train):
    img_name = img.split('//')[-1].split('.')[0]
    image = cv2.imread(img)
    target = cv2.imread(target)
    target = cv2.cvtColor(target,cv2.COLOR_BGR2RGB)
    assert image.shape[:2]==target.shape[:2]
    number = 0
    for i in range((image.shape[0]-size)//overlap+1):
        for j in range((image.shape[1]-size)//overlap+1):
            image_ = image[i*overlap:i*overlap+size,j*overlap:j*overlap+size,:]
            target_ = target[i*overlap:i*overlap+size,j*overlap:j*overlap+size,:].reshape(-1,3)
            target_[(target_==[255,0,0]).all(axis=1)] = np.array([0])
            target_[(target_ == [255, 255, 0]).all(axis=1)] = np.array([1])
            target_[(target_ == [0, 255, 0]).all(axis=1)] = np.array([2])
            target_[(target_ == [0, 255, 255]).all(axis=1)] = np.array([3])
            target_[(target_ == [0, 0, 255]).all(axis=1)] = np.array([4])
            target_[(target_ == [255, 255, 255]).all(axis=1)] = np.array([5])
            target_ = target_[:,0]
            target_ = target_.reshape(image_.shape[0],image_.shape[1])
            if train:
                cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\jpg' + '//' + img_name + str(number) + '.jpg', image_)
                cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\target' + '//' + img_name + str(number) + '.png', target_)
            else:
                cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\jpg_test' + '//' + img_name + str(number) + '.jpg', image_)
                cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\target_test' + '//' + img_name + str(number) + '.png', target_)
            # print(r'F:\work\2022_9\Potsdam\dataset\jpg'+'//'+img_name+str(number)+'.jpg')
            number += 1

        image_ = image[i*overlap:i*overlap+size,-size:,:]
        target_ = target[i*overlap:i*overlap+size,-size:,:].reshape(-1, 3)
        target_[(target_ == [255, 0, 0]).all(axis=1)] = np.array([0])
        target_[(target_ == [255, 255, 0]).all(axis=1)] = np.array([1])
        target_[(target_ == [0, 255, 0]).all(axis=1)] = np.array([2])
        target_[(target_ == [0, 255, 255]).all(axis=1)] = np.array([3])
        target_[(target_ == [0, 0, 255]).all(axis=1)] = np.array([4])
        target_[(target_ == [255, 255, 255]).all(axis=1)] = np.array([5])
        target_ = target_[:, 0]
        target_ = target_.reshape(image_.shape[0], image_.shape[1])
        if train:
            cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\jpg' + '//' + img_name + str(number) + '.jpg', image_)
            cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\target' + '//' + img_name + str(number) + '.png', target_)
        else:
            cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\jpg_test' + '//' + img_name + str(number) + '.jpg', image_)
            cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\target_test' + '//' + img_name + str(number) + '.png', target_)
        number += 1
    for i in range((image.shape[1]-size)//overlap+1):
        image_ = image[-size:,i*overlap:i*overlap+size,:]
        target_ = target[-size:,i*overlap:i*overlap+size,:].reshape(-1, 3)
        target_[(target_ == [255, 0, 0]).all(axis=1)] = np.array([0])
        target_[(target_ == [255, 255, 0]).all(axis=1)] = np.array([1])
        target_[(target_ == [0, 255, 0]).all(axis=1)] = np.array([2])
        target_[(target_ == [0, 255, 255]).all(axis=1)] = np.array([3])
        target_[(target_ == [0, 0, 255]).all(axis=1)] = np.array([4])
        target_[(target_ == [255, 255, 255]).all(axis=1)] = np.array([5])
        target_ = target_[:, 0]
        target_ = target_.reshape(image_.shape[0], image_.shape[1])
        if train:
            cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\jpg' + '//' + img_name + str(number) + '.jpg', image_)
            cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\target' + '//' + img_name + str(number) + '.png', target_)
        else:
            cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\jpg_test' + '//' + img_name + str(number) + '.jpg', image_)
            cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\target_test' + '//' + img_name + str(number) + '.png', target_)
        number += 1

    image_ = image[-size:,-size:,:]
    target_ = target[-size:,-size:,:].reshape(-1, 3)
    target_[(target_ == [255, 0, 0]).all(axis=1)] = np.array([0])
    target_[(target_ == [255, 255, 0]).all(axis=1)] = np.array([1])
    target_[(target_ == [0, 255, 0]).all(axis=1)] = np.array([2])
    target_[(target_ == [0, 255, 255]).all(axis=1)] = np.array([3])
    target_[(target_ == [0, 0, 255]).all(axis=1)] = np.array([4])
    target_[(target_ == [255, 255, 255]).all(axis=1)] = np.array([5])
    target_ = target_[:, 0]
    target_ = target_.reshape(image_.shape[0], image_.shape[1])
    if train:
        cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\jpg' + '//' + img_name + str(number) + '.jpg', image_)
        cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\target' + '//' + img_name + str(number) + '.png', target_)
    else:
        cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\jpg_test' + '//' + img_name + str(number) + '.jpg', image_)
        cv2.imwrite(r'F:\work\2022_9\Potsdam\dataset\target_test' + '//' + img_name + str(number) + '.png', target_)
    number += 1

# img = img_file+'//'+'top_potsdam_2_10_RGB.tif'
# target = target_file+'//'+'top_potsdam_2_10_label.tif'
# crop(img,target,640,320)


if __name__ == '__main__':
    print('开始运行主线程')
    img_file = r'F:\work\2022_9\Potsdam\2_Ortho_RGB'
    train_target_file = r'F:\work\2022_9\Potsdam\5_Labels_for_participants'
    target_file = r'F:\work\2022_9\Potsdam\5_Labels_all'

    train_list = os.listdir(train_target_file)
    all_list = os.listdir(target_file)
    test_list = [i for i in all_list if i not in train_list]


    multiprocessing.freeze_support()
    multiprocessing.Process()
    pool = multiprocessing.Pool(multiprocessing.cpu_count())
    SIZE = 640
    OVERLAP = 320

    for file in all_list:
        if file in train_list:
            TRAIN = True
        else:
            TRAIN = False
        IMG = img_file+'//'+file.replace('label','RGB')
        TARGET = target_file + '//' + file
        pool.apply_async(func=crop, args=[IMG,TARGET,SIZE,OVERLAP,TRAIN ])
    pool.close()
    pool.join()
    print('主线程运行结束')



可视化结果展示

在这里插入图片描述

在这里插入图片描述

总结

可以设置SIZE控制切割后图像的大小,以及OVERLAP控制重叠区域的长度。

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
Potsdam数据集是一个在计算机视觉领域中常用的数据集,由德国Potsdam市区空中采集的遥感图像组成。这个数据集是为了推动高分辨率地面物体分类和分割任务的研究而创建的。它包含了许多高分辨率的彩色遥感图像,每张图像都经过了像元级别的标注。 Potsdam数据集的每张图像都具有很高的空间分辨率,通常为5厘米/像素。这使得研究人员可以对城市区域进行精细的物体分类和分割研究。这些图像包含了许多不同的地面物体,如建筑物、道路、树木、汽车等等。通过对这些图像进行标注,人们可以获得每个像素所属的地物类别信息,从而为基于图像的地物分类和分割算法提供训练和评估数据。 Potsdam数据集的使用非常广泛,特别是在深度学习和卷积神经网络的研究中。研究人员可以将这个数据集用于训练模型,提取图像特征,进行物体分类和分割等任务。该数据集的特点是图像数量较多,覆盖了大面积的城市区域,提供了丰富的地物类别和空间分辨率,有助于研究人员更好地理解和解决相关的计算机视觉问题。 总之,Potsdam数据集是一个重要的计算机视觉数据集,被广泛应用于城市遥感图像分析和物体识别研究中。通过对这个数据集的研究,人们可以不断改进相关算法,在实际应用中提高城市地物分类和分割的准确性和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值