RGB彩色圖像大家都不陌生,但是什麼是真彩色、什麼是加彩色呢?
[競賽羣裏看到別人說真彩色、假彩色,當時完全不懂,碰巧撞上了,記一下]
R原色對應TM4波段、G原色對應TM3波段、B原色對應TM2波段,合成得到標準假彩色影像。
R原色對應TM3波段、G原色對應TM2波段、B原色對應TM1波段,合成得到真彩色影像。
R原色對應TM7波段、G原色對應TM5波段、B原色對應TM2波段,合成得到其它假彩色影像。
通常遙感圖像有以下兩種編碼方式:
tif
格式圖片與常見的RGB三通道圖像不同,還可能包含如近紅外、中紅外、遠紅外以及熱紅外光譜信息。
在處理tif
格式數據時,用opencv等庫無法解析,需要使用PIL
或者libtiff中的TIFF
.這裏介紹一下如何對tif文件進行數據增強。
對高分辨率的遙感圖像先進行分割,隨機選取初始點,對圖像和標籤
裁剪出固定大小
的區域,對每一個區域進行翻轉、旋轉、高斯模糊
等操作,之後存儲爲.tif
數據格式文件。
#!usr/bin/env python
#-*- coding:utf-8 _*-
#@author:mqray
#@file: aug_data.py
#@time: 2019/6/21 16:19
from PIL import Image,ImageFilter,ImageDraw,ImageEnhance
import random
import os
import numpy as np
from tqdm import tqdm
img_weight = 256
img_height = 256
def file_name(file_path):
img_name_list = []
for root,dirs,files in os.walk(file_path):
for file in files:
img_name = os.path.split(file)[1]
img_name_list.append(img_name)
return img_name_list
img_store_list = file_name(r'C:\Users\Administrator\Desktop\PG1\2019seg\train\src')
# print(img_store_list)
def add_noise(img):
# length, height, dims = img.shape
drawObject = ImageDraw.Draw(img)
for i in range(250):
tmp_x = np.random.randint(0,img.size[0])
tmp_y = np.random.randint(0,img.size[1])
drawObject.point((tmp_x,tmp_y),fill='black')#添加白噪聲,噪點顏色可變
return img
#色調增強
def random_color(img):
img = ImageEnhance.Color(img)
img = img.enhance(2)
return img
def data_augment(row_roi,label_roi):
#圖像標籤同時進行90,180,270旋轉
if np.random.random() < 0.25:
row_roi = row_roi.rotate(90)
label_roi = label_roi.rotate(90)
if np.random.random() < 0.25:
row_roi = row_roi.rotate(180)
label_roi = label_roi.rotate(180)
if np.random.random() < 0.25:
row_roi = row_roi.rotate(270)
label_roi = label_roi.rotate(270)
#圖像、標籤同時豎直旋轉
if np.random.random() < 0.25:
row_roi = row_roi.transpose(Image.FLIP_LEFT_RIGHT)
label_roi = label_roi.transpose(Image.FLIP_LEFT_RIGHT)
#圖像、標籤同時水平旋轉
if np.random.random() < 0.25:
row_roi = row_roi.transpose(Image.FLIP_TOP_BOTTOM)
label_roi = label_roi.transpose(Image.FLIP_TOP_BOTTOM)
#對圖像進行高斯模糊
if np.random.random() < 0.25:
row_roi = row_roi.filter(ImageFilter.GaussianBlur)
#對圖像進行色調增強
if np.random.random() < 0.25:
row_roi = random_color(row_roi)
#對圖像加噪聲
if np.random.random() < 0.25:
row_roi = add_noise(row_roi)
return row_roi,label_roi
def create_dataset(img_nums=100000,mode = 'orginal'):
print('creating dataset...')
src_path = r'C:\Users\Administrator\Desktop\PG1\2019seg\train\src'
label_path = r'C:\Users\Administrator\Desktop\PG1\2019seg\train\label'
single_img_count = img_nums/len(img_store_list)
g_count = 0
le = len(img_store_list)
for i in tqdm(range(le)):
count = 0
row_img_path = src_path + os.sep + img_store_list[i]
label_img_path = label_path + os.sep + img_store_list[i]
row_img = Image.open(row_img_path)
label_img = Image.open(row_img_path)
while(count<single_img_count):
w1 = random.randint(0,row_img.size[0] - img_weight)
h1 = random.randint(0,row_img.size[1] - img_height)
w2 = w1 + img_weight
h2 = h1 + img_height
row_img = row_img.crop((w1,h1,w2,h2))
label_img = label_img.crop((w1,h1,w2,h2))
if mode == 'augment':
row_img,label_img = data_augment(row_img,label_img)
row_img_store = r'E:\PycharmProjects\ImageProcessing\img_store\train_row\%d.tif' % g_count
label_img_store = r'E:\PycharmProjects\ImageProcessing\img_store\train_label\%d.tif' % g_count
print(label_img_store)
row_img.save(row_img_store)
label_img.save(label_img_store)
count += 1
g_count += 1
if __name__ == '__main__':
create_dataset(mode='augment')