pytroch 颜色增强ColorJitter,墙裂推荐

2023-09-18 20:33:25

目录

函数参数解释:

随机亮度测试,非常方便,墙裂推荐:

单项测试:

举例:

yolov5颜色增强示例,效果差不多,opencv的:


函数参数解释:

函数名:
torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
函数解析:
随机改变一个图像的亮度、对比度、饱和度和色调。如果图像是 tensor,那么它的 shape 为[…,1或3,H,W],其中…表示 batch。如果图像是PIL图像,那么不支持模式 “1”、“I”、"F "和带有透明度(alpha通道)的模式。

参数:
brightness (类型为 float 或 tuple: float (min, max)) - 亮度的偏移程度。 brightness_factor可以是 [max(0, 1 - brightness), 1 + brightness],也可以直接给出最大、最小值的范围 [min, max],然后从中随机采样。brightness_factor 值应该是非负数。

contrast (类型为 float 或 tuple: float (min, max)) - 对比度的偏移程度。 contrast_factor 可以是 [max(0, 1 - contrast), 1 + contrast],也可以直接给出最大、最小值的范围 [min, max],然后从中随机采样。contrast_factor 值应该是非负数。

saturation (类型为 float 或 tuple: float (min, max)) - 饱和度的偏移程度。 saturation_factor 可以是 [max(0, 1 - saturation), 1 + saturation],也可以直接给出最大、最小值的范围 [min, max],然后从中随机采样。saturation_factor 值应该是非负数。

hue (类型为 float 或 tuple: float (min, max)) - 色调的偏移程度。hue_factor 可以是 [-hue, hue],也可以直接给出最大、最小值的范围 [min, max],然后从中随机采样,它的值应当满足 0<= hue <= 0.5 或者 -0.5<= min <= max <= 0.5。为了使色调偏移,输入图像的像素值必须是非负值,以便转换到 HSV 颜色空间。因此,如果将图像归一化到一个有负值的区间,或者在使用这个函数之前使用会产生负值的插值方法,那么它就不会起作用。

随机亮度测试,非常方便,墙裂推荐:

参数是测试过的经验值

import cv2
import numpy as np
import torch
from PIL import Image

from torchvision.transforms import ColorJitter
import random


class CustomColorJitter(ColorJitter):
    def __init__(self, brightness=0, contrast=0, saturation=0, hue=0):
        super(CustomColorJitter, self).__init__(brightness=brightness, contrast=contrast, saturation=saturation, hue=hue)

    def get_params(self, brightness, contrast, saturation, hue):
        self.last_brightness =None

        self.bright_param=None
        if brightness is not None:
            self.last_brightness = brightness[0] + random.uniform(0, 1) * (brightness[1] - brightness[0])
            self.bright_param=(self.last_brightness,self.last_brightness)
        self.contrast_param = None
        if contrast is not None:
            self.last_contrast = contrast[0] + random.uniform(0, 1) * (contrast[1] - contrast[0])
            self.contrast_param=(self.last_contrast,self.last_contrast)
        self.saturation_param = None
        if saturation is not None:
            self.last_saturation = saturation[0] + random.uniform(0, 1) * (saturation[1] - saturation[0])
            self.saturation_param=(self.last_saturation,self.last_saturation)
        self.hue_param=None
        if hue is not None:
            self.last_hue = hue[0] + random.uniform(0, 1) * (hue[1] - hue[0])
            self.hue_param=(self.last_hue,self.last_hue)

        return super().get_params(brightness=self.bright_param, contrast=self.contrast_param,
                                      saturation=self.saturation_param, hue=self.hue_param)


img_path = "./aaa.png"

debug=True

if debug:
    transform = CustomColorJitter(brightness=[0.6, 1.3], contrast=[0.5, 1.5], saturation=[0.5, 1.5], hue=[-0.02, 0.02])
    # transform = CustomColorJitter(hue=[-0.02, 0.02])
    # transform = CustomColorJitter(saturation=[0.5, 1.5])
    # transform = CustomColorJitter( contrast=[0.5, 1.5])
    # transform = CustomColorJitter( brightness=[0.7, 1.3])
else:
    transform = ColorJitter(brightness=[0.6, 1.3], contrast=[0.5, 1.5], saturation=[0.5, 1.5], hue=[-0.02, 0.02])


while True:
    img = cv2.imread(img_path)
    pil_img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    image = transform(pil_img)
    if debug:
        if transform.bright_param is not None:
            print("Last brightness value:", transform.bright_param)
        if transform.contrast_param is not None:
            print("Last contrast value:", transform.contrast_param)
        if transform.saturation_param is not None:
            print("Last saturation value:", transform.saturation_param)
        if transform.hue_param is not None:
            print("Last hue value:", transform.hue_param)

    img_cv = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)
    cv2.imshow("img_o", img)
    cv2.imshow("img_cv", img_cv)
    cv2.waitKey(0)

单项测试:

import cv2
import numpy as np
import torch
import torchvision.transforms as f
from PIL import Image


from torchvision.transforms import ColorJitter
import random

class CustomColorJitter(ColorJitter):
    def __init__(self, brightness=0, contrast=0, saturation=0, hue=0):
        super(CustomColorJitter, self).__init__(brightness=brightness, contrast=contrast, saturation=saturation, hue=hue)

    def get_params(self, brightness, contrast, saturation, hue):
        self.last_brightness = brightness[0] + random.uniform(0, 1) * (brightness[1] - brightness[0])
        return super().get_params(brightness=(self.last_brightness, self.last_brightness), contrast=contrast, saturation=saturation, hue=hue)

img_path = "./aaa.png"

transform = CustomColorJitter(brightness=[0.5, 1.5])

while True:
    img = cv2.imread(img_path)
    pil_img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    image = transform(pil_img)

    print("Last brightness value:", transform.last_brightness)

    img_cv = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)
    cv2.imshow("img_o", img)
    cv2.imshow("img_cv", img_cv)
    cv2.waitKey(0)

举例:

以下内容转自:https://blog.csdn.net/lxhRichard/article/details/128083192
1. 以随机亮度为例

import torch
import torchvision.transforms as f
from PIL import Image

img_path = "./1.jpg"
img = Image.open(img_path)
trans = f.ColorJitter(brightness=[0.01,0.05])
image = trans(img)
image.show()



输出对比:


2. 以随机对比度为例

import torch
import torchvision.transforms as f
from PIL import Image

img_path = "./1.jpg"
img = Image.open(img_path)
trans = f.ColorJitter(contrast=[0.3,0.6])
image = trans(img)
image.show()



输出对比:


3. 以随机饱和度为例

import torch
import torchvision.transforms as f
from PIL import Image

img_path = "./1.jpg"
img = Image.open(img_path)
trans = f.ColorJitter(saturation=[0.2,0.5])
image = trans(img)
image.show()



输出对比:


4. 以随机色调为例

import torch
import torchvision.transforms as f
from PIL import Image

img_path = "./1.jpg"
img = Image.open(img_path)
trans = f.ColorJitter(hue=[-0.1,0.2])
image = trans(img)
image.show()



输出对比:


5. 综合调整:

import torch
import torchvision.transforms as f
from PIL import Image

img_path = "./1.jpg"
img = Image.open(img_path)
trans = f.ColorJitter(brightness=0.6, contrast=0.7, saturation=0.5, hue=0.1)
image = trans(img)
image.show()


输出对比:


官方文档链接:https://pytorch.org/vision/stable/generated/torchvision.transforms.ColorJitter.html?highlight=transforms+colorjitter#torchvision.transforms.ColorJitter
 

yolov5颜色增强示例,效果差不多,opencv的:



import cv2
import numpy as np

def augment_hsv(img, h_gain=0.015, s_gain=0.7, v_gain=0.4):
    r = np.random.uniform(-1, 1, 3) * [h_gain, s_gain, v_gain] + 1  # random gains
    hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
    print(r[0], r[1], r[2])
    dtype = img.dtype  # uint8

    x = np.arange(0, 256, dtype=np.int16)
    lut_hue = ((x * r[0]) % 180).astype(dtype)
    lut_sat = np.clip(x * r[1], 0, 255).astype(dtype)
    lut_val = np.clip(x * r[2], 0, 255).astype(dtype)

    img_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val))).astype(dtype)
    cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR, dst=img)  # no return needed

if __name__ == '__main__':

    img_path = "./aaa.png"
    while True:
        img_o = cv2.imread(img_path)
        img=img_o.copy()
        augment_hsv(img)
        cv2.imshow("img_o", img_o)
        cv2.imshow('HSV Augmented Image', img)
        cv2.waitKey(0)

更多推荐

Linux图形界面与字符界面切换

1.启动时进入字符界面,后来想切换到图形界面:使用startx或init5(注:startx只是在原有运行级别3上加了图形界面,运行级别没变,而init5则是切换到运行级别5,所以要重新登录。可用runlevel命令查看当前运行级别和上一次运行级别)2.启动时进入图形界面,后来想切换到字符界面:使用Ctrl+Alt+F

Unity中UI组件对Shader调色

文章目录前言一、原理在Shader中直接暴露的Color属性,不会与UI的Image组件中的Color形成属性绑定。因为UI的Image组件中更改的颜色是顶点颜色,如果需要在修改组件中的颜色时,使Shader中的颜色也同时改变。那么就需要在应用程序阶段传入到顶点着色器的数据增加一个变量,用于给顶点着色器使用。二、实现1

【C语言基础】枚举和联合体

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】📢:文章若有幸对你有帮助,可点赞👍收藏⭐不迷路🙉📢:内容若有错误,敬请留言📝指正!原创文,转载请注明出处文章目录前言一、枚举1.1枚举的含义1.

群狼调研(长沙餐厅满意度调查)开展汽车制动厂商客户满意度调查

在当今的汽车市场中,客户满意度已经成为衡量汽车厂商服务水平的重要标准。为了更好地了解客户对汽车制动产品的需求和满意度,一些厂商会委托专业的市场调查公司进行客户满意度调查。群狼调研(长沙汽车经销商满意度调查)多年的客户满意度调查经验,通过本文介绍汽车制动厂商客户满意度调查的特点和优势。汽车制动系统是关乎汽车安全的重要部件

Unity 2021.x及以下全版本Crack

前言最近Unity那档子事不出来了吗,搞得所有人都挺烦的,顺便在公司内网需要我完成一个游戏的项目,就研究了一下如何将Unity给Crack掉。注意所有操作应有连接外网的权限以我选择的版本为例,我使用的是Unity2021.3.5f1与UnityHub3.3.0c-9。特别鸣谢:tylearymf首先到UniHacker

推荐一款可以快速抽取sap数据的ETL工具

使用SAP在数据分析上面临的问题SAPEnterpriseResourcePlanning(ERP)是国内最广泛使用的ERP系统之一。然而,使用SAPERP系统面临着一些数据分析不方便,数据导出困难等问题:数据集成困难:将SAP中的数据整合到其他系统或本地数据仓库通常是一项复杂的任务。SAP系统的复杂性和独特性导致数据

SpringBoot整合Flowable

1.配置(1)引入maven依赖<dependency><groupId>org.flowable</groupId><artifactId>flowable-spring-boot-starter</artifactId><version>6.7.2</version></dependency><!--MySQL连接

一款非常容易上手的报表工具,简单操作实现BI炫酷界面数据展示,驱动支持众多不同类型的数据库,可视化神器,免开源了

一款非常容易上手的报表工具,简单操作实现BI炫酷界面数据展示,驱动支持众多不同类型的数据库,可视化神器,免开源了。在互联网数据大爆炸的这几年,各类数据处理、数据可视化的需求使得GitHub上诞生了一大批高质量的BI工具。借助这些BI工具,我们能够大幅提升数据分析效率、生成更高质量的项目报告,让用户通过直观的数据看到结果

C语言生成随机数、C++11按分布生成随机数学习

C语言生成随机数如果只要产生随机数而不需要设定范围的话,只要用rand()就可以;rand()会返回一随机数值,范围在0至RAND_MAX间;RAND_MAX定义在stdlib.h,其值为2147483647;如果想要获取在一定范围内的数的话,直接做相应的除法取余即可;如何获取小数呢?例如,我们可以先获得10001以内

ELK日志分析系统+ELFK(Filebeat)

本章结构:1、ELK日志分析系统简介2、Elasticsearch介绍(简称ES)3、Logstash介绍4、Kibana介绍5、实验,ELK部署一、ELK日志分析系统简介ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash和Kiabana三个开源工具配合使用。可以提高安全性,集中

Ubuntu 20.04 安装 Franka Control Interface (FCI)

文章目录前言一、安装libfranka和franka_ros二、设置实时内核1.安装依赖2.编译内核3.安装内核4.验证内核三、在实时内核下安装显卡驱动1.切换回之前的内核2.切换至实时内核3.允许用户为其进程设置实时权限前言本文介绍在ubuntu20.04中安装FrankaControlInterface(FCI),

热文推荐