扩增数据集

一、图像预处理

1.将.raw文件处理为强度图

def divid_img(path):
    #用型号PHX050S-PC偏振相机采集天空图像并保存为“.raw”文件,每通道位深度为16位
    #即取值为0-65535,所以数据类型用“np.uint16”
    #np.fromfile()读取,输出为array格式的向量
    rawImg = np.fromfile(path,dtype=np.uint16) 
    #将向量或矩阵改变形状(reshape)
    rawImg = rawImg.reshape((2048,2448))
    #初始化四个矩阵
    data1 = np.zeros((1024,1224), dtype=float)
    data2 = np.zeros((1024,1224), dtype=float)
    data3 = np.zeros((1024,1224), dtype=float)
    data4 = np.zeros((1024,1224), dtype=float)
    #依据偏振相机中金属光栅上四个角度特性,从矩阵(2048,2448)中提取像素点,
    #并保存为四个矩阵(1024,1224)
    for i in range(1024):
        for j in range(1224):
            data1[i][j] = rawImg[i*2][j*2]
    for i in range(1024):
        for j in range(1224):
            data2[i][j] = rawImg[i*2][j*2+1]
    for i in range(1024):
        for j in range(1224):
            data3[i][j]  = rawImg[i*2+1][j*2]
    for i in range(1024):
        for j in range(1224):
            data4[i][j]  = rawImg[i*2+1][j*2+1]
    #保存四个角度的光强
    I135 = data3
    I0 = data1
    I45 = data2
    I90 = data4
    #天空偏振光的总光强
    s0 = I0+I90
    return s0

import matplotlib.pyplot as plt
import numpy as np

path = 'Image6.raw'
img = divid_img(path)
plt.imshow(img, cmap='gray')

2.裁剪图片并通过mask只保留中间有效区域

from skimage.draw import circle
import cv2

img_1 = img[int(img.shape[0]/2-300):int(img.shape[0]/2+300),
int(img.shape[1]/2-300):int(img.shape[1]/2+300)]
#构建600*600mask掩膜,数据类型为“np.float”,要与图像的数据类型一样
mask=np.zeros([600,600],dtype=np.float)
#提取半径为300的圆形区域的像素点坐标,并设置这些区域为1
rr, cc = circle(img_1.shape[0]/2,img_1.shape[1]/2,300)
mask[rr,cc] = 1
#通过乘法将mask与图像结合
img1= cv2.multiply(img_1, mask)
#显示灰度图
plt.imshow(img1, cmap='gray')

3.扩增图像:

#改变图像的亮度
from skimage import  exposure
import matplotlib.pyplot as plt

#I=I^g,将每个像素缩放到0~1后,对像素进行幂运算,得到新的像素值。公式中的g就是gamma值。
gam1 = exposure.adjust_gamma(img1,1.8)  #调暗
gam2 = exposure.adjust_gamma(img1,0.8)  #调亮

plt.subplot(121),plt.imshow(gam1, cmap='gray')
plt.subplot(122),plt.imshow(gam2, cmap='gray')

#直方图均衡化Histogram Equalization
img_eq = exposure.equalize_hist(img1)

plt.subplot(121),plt.imshow(img1, cmap='gray')
plt.subplot(122),plt.imshow(img_eq, cmap='gray')

# 对比度拉伸Contrast stretching
p2, p98 = np.percentile(img1, (2, 98))
img_rescale = exposure.rescale_intensity(img1, in_range=(p2, p98))

plt.figure(figsize=(16, 12))
plt.subplot(121),plt.imshow(img1, cmap='gray')
plt.subplot(122),plt.imshow(img_rescale, cmap='gray')

def trainGenerator(batch_size,train_path,image_folder,mask_folder,aug_dict,
image_color_mode = "grayscale",mask_color_mode = "grayscale",
image_save_prefix  = "images",mask_save_prefix  = "masks",num_class = 2,
save_to_dir = None,target_size = (600,600),seed = 1):

    image_datagen = ImageDataGenerator(**aug_dict)
    mask_datagen = ImageDataGenerator(**aug_dict)
    image_generator = image_datagen.flow_from_directory(
        train_path,
        classes = [image_folder],
        class_mode = None,
        color_mode = image_color_mode,
        target_size = target_size,
        batch_size = batch_size,
        save_to_dir = save_to_dir,
        save_prefix  = image_save_prefix,
        seed = seed)
    mask_generator = mask_datagen.flow_from_directory(
        train_path,
        classes = [mask_folder],
        class_mode = None,
        color_mode = mask_color_mode,
        target_size = target_size,
        batch_size = batch_size,
        save_to_dir = save_to_dir,
        save_prefix  = mask_save_prefix,
        seed = seed)
    train_generator = zip(image_generator, mask_generator)
    for (img,mask) in train_generator:
        yield (img,mask)

from keras.preprocessing.image import ImageDataGenerator
import numpy as np 

#图片旋转或平移
data_gen_args = dict(
    rotation_range=40,
#     width_shift_range=40, 
#     height_shift_range=40,
    fill_mode='reflect') #比nearest生成的图像要更清晰

myGenerator = trainGenerator(1,'F:/cai/sky727/图像扩充
/旋转/','img','mask',data_gen_args,save_to_dir = 
"F:/cai/sky727/图像扩充/旋转/new")
num_batch = 1
for i,batch in enumerate(myGenerator):
    if(i >= num_batch):
        break

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值