高精图片(-1024-1024范围)数据增强-三维入参

from torchvision.transforms import Compose
from PIL import ImageEnhance,Image
import numpy as np
class ColorProcess(object):
    # 自定义标准化
    def __init__(self, Brightness=1, Contrast=1.5, Color=1):
        self.Brightness = Brightness
        self.Contrast = Contrast
        self.Color = Color

    def Nomerlize(self, data, min_val=-1024, max_val=1024, a=0, b=1):  # 标准化后不能转化为整形
        return (data - min_val) / (max_val - min_val) * (b - a) + a

    # 反标准化
    def DENomerlize(self, data, min_val=-1024, max_val=1024, a=0, b=1):  # 反标准化到-1024-1024,能转化为整形
        return (data - a) / (b - a) * (max_val - min_val) + min_val

    # 数据增强
    def img_pro(self, mapped_data, Brightness=1, Contrast=1.5, Color=1):
        img = Image.fromarray(mapped_data, mode="RGB")
        enhancer = ImageEnhance.Contrast(img)
        img = enhancer.enhance(Contrast)  # 增加对比度
        enhancer = ImageEnhance.Brightness(img)
        img = enhancer.enhance(Brightness)  # 增加亮度
        enhancer = ImageEnhance.Color(img)
        img = enhancer.enhance(Color)  # 增加饱和度
        return np.array(img)

    # 数据分离
    def extract_matrices(self, matrix):
        positive_matrix = np.abs(matrix)
        zero_one_minus_one_matrix = np.sign(matrix)
        return positive_matrix, zero_one_minus_one_matrix

    def to1024_255(self, yuanshi, Brightness=1, Contrast=1.5, Color=1):
        normalized_data = self.Nomerlize(yuanshi)  # 标准化后不能转化为整形
        # 反标准化到0-255
        reversed_data_float = self.DENomerlize(normalized_data, min_val=0, max_val=255)
        reversed_data_int = np.round(reversed_data_float, 0).astype(np.uint8)
        # 数据增强
        new_reversed_data_int = self.img_pro(reversed_data_int, Brightness=1, Contrast=1.5, Color=1)
        # #因astype(np.uint8)造成的转化误差
        reversed_data_error = reversed_data_float - reversed_data_int
        # #抽离正负值
        reversed_data_error, zero_one_result = self.extract_matrices(reversed_data_error)
        return new_reversed_data_int, reversed_data_error, zero_one_result

    def to255_1024(self, new_reversed_data_int, reversed_data_error, zero_one_result):
        # 去除转化误差,实现高精转换
        normalized_data2 = self.Nomerlize(new_reversed_data_int, min_val=0, max_val=255)
        reversed_data_error = self.Nomerlize(reversed_data_error, min_val=0, max_val=255)
        normalized_data2 += (reversed_data_error * zero_one_result)
        # # 反标准化到-1024-1024
        reversed_data2 = self.DENomerlize(normalized_data2, min_val=-1024, max_val=1024).astype(np.int16)
        return reversed_data2

    def __call__(self, data):  # 1024数据经数据增强再次转化为1024的数据,data为三维数组
        # 1024的数据转化为255数据,并完美分离转化误差,同时进行数据增强
        new_reversed_data_int, reversed_data_error, zero_one_result = self.to1024_255(data, Brightness=self.Brightness,
                                                                                      Contrast=self.Contrast,
                                                                                      Color=self.Color)
        # 255的数据无损转化为1024的数据
        reversed_data2 = self.to255_1024(new_reversed_data_int, reversed_data_error, zero_one_result)
        return reversed_data2

#应用
Transform_isTrain = Compose([
            ColorProcess(Brightness=1.5,Contrast=1.5,Color=1.5),#Brightness增加亮度Contrast增加对比度Color增加饱和度
        ])
yuanshi = np.array([
     [
         [-1024, 28, -1024],
         [-1024, -56, -1024],
         [-1024, 98, -1024]
     ],
     [
         [-39, 1024, -1024],
         [-1024, 1024, -1024],
         [-1024, 35, -1024]
     ],
     [
         [-65, 1024, -1024],
         [-1024, 69, -1024],
         [-1024, 1024, -1024]
     ],
 ])

img = Transform_isTrain(yuanshi)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值