【图像分类数据集增强】简单粗暴,参数可调

在代码中使用的增强

  • 对数变换
  • 降低饱和度
  • 高斯模糊
  • 调整图像亮度

参数调整(在 Transformation.py中):

  • 22行(对数变换):如果 c 的值大于1,对比度会增加;如果 c 的值小于1,对比度会减少。
  • 37行(调整饱和度):系数值越小,饱和度降低的效果越明显;系数值越接近1,饱和度降低的效果越不明显。
  • 44行(高斯噪声):通常情况下,这个值设置为0,因为高斯噪声通常是无偏的,但你可以根据需要将其设置为其他值。
  • 45行(高斯噪声):较小的 sigma 值会产生较弱的噪声,而较大的 sigma 值会产生较强的噪声。
  • 50行(高斯模糊):它代表了高斯模糊的核大小。核大小决定了模糊的程度,核越大,图像越模糊。

包含文件夹:

1.将main.py、Transformation_mix.py放在同一个目录下

2.数据存放格式

main.py

import os
import cv2
import numpy as np


import Transformation
import Transformation


#读取文件中所有文件
def get_file_names(folder):
    file_names = []
    for file_name in os.listdir(folder):
        file_names.append(file_name)
    return file_names

path = r'datasets'改成自己的路径


#将读取到的文件名称存储到all_file_name里
all_file_name = get_file_names(path)

#遍历每个类别
for files in all_file_name:

    #加一个限制条件,如果文件名称为after就跳过
    if files != 'after':

        #遍历第一个类下面的图像
        #总的文件夹名称+类别文件夹名称=类别文件夹路径
        save_path = os.path.join(path, 'after')
        save_path = os.path.join(save_path,files)

        # 检查文件夹是否存在
        if not os.path.exists(save_path):
            # 如果文件夹不存在,创建一个新文件夹
            os.makedirs(save_path)
            print(f"Directory {save_path} created.")
        else:
            print(f"Directory {save_path} already exists.")

        #每个类别文件夹的路径
        type_path = os.path.join(path, files)

        #遍历类别文件夹下的所有图片
        images = []
        for file in os.listdir(type_path):
            if file.lower().endswith(('.jpg', '.png')):

                images.append(file)

                #type_path + file =图片总路径
                image_path = os.path.join(type_path, file)


                # 读取图像
                img = cv2.imread(image_path)

                #去除图像名称后缀,方便后续命名
                img_name = file[:-4]

                #对图像进行增强
                img_after = Transformation.augment_data(img, save_path, img_name)



        #如果文件名称是after就跳过
        else:
            continue

    # print(files,'类别的数量为',len(images)) #打印类别数量




 Transformation.py

import cv2
import os
import numpy as np
from PIL import Image
from skimage.util import random_noise #添加噪声模块
import PIL
from torchvision import transforms

def augment_data(img, save_path, file_name):
    # img是图像本身
    # save_path是除了图像以外的路径
    # file_name是图像名字

    # 首先保存原始图像
    file_name_jpg = file_name + '.jpg'
    org_path = os.path.join(save_path, file_name_jpg)
    cv2.imwrite(org_path, img)
    print("Saved augmented image:", org_path)

    # 进行对数变换
    # 进行对数变换
    c = 1  # 对数变换的参数,可根据需要调整
    img_blurred_float = img.astype(np.float32)  # 转换为浮点数以进行对数变换
    # 添加一个小的常数以避免对0取对数
    enhanced_image = c * np.log(1 + img_blurred_float + 1e-10)
    # 归一化到0-255
    min_val = np.min(enhanced_image)
    max_val = np.max(enhanced_image)
    enhanced_image = (enhanced_image - min_val) / (max_val - min_val) * 255
    enhanced_image = np.clip(enhanced_image, 0, 255).astype(np.uint8)

    # 将图像从BGR转换到HSV颜色空间
    img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    # 降低饱和度
    s = img_hsv[:, :, 1]
    s = cv2.multiply(s, 0.35)  # 0.5为饱和度降低的系数,越接近0,效果越明显
    img_hsv[:, :, 1] = s

    # 将图像从HSV转换回BGR颜色空间
    img_desaturated = cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR)

    # 添加高斯噪声
    mean = 0
    sigma = 0.6  # 高斯噪声的标准差
    gaussian_noise = np.random.normal(mean, sigma, img_desaturated.shape).astype('uint8')
    img_noisy = cv2.add(img_desaturated, gaussian_noise)

    # 添加高斯模糊
    kernel_size = (13, 13)  # 高斯模糊的核大小
    img_blurred = cv2.GaussianBlur(img_noisy, kernel_size, 0)


    # 转换回HSV颜色空间以提高亮度
    img_enhanced_hsv = cv2.cvtColor(img_blurred, cv2.COLOR_BGR2HSV)

    # 提高亮度
    v_channel = img_enhanced_hsv[:, :, 2]
    v_channel = cv2.add(v_channel, 0)  # 增加亮度,数值可以根据需要调整
    v_channel = np.clip(v_channel, 0, 255)  # 限制亮度值在0到255之间
    img_enhanced_hsv[:, :, 2] = v_channel

    # 转换回BGR颜色空间
    final_image = cv2.cvtColor(img_enhanced_hsv, cv2.COLOR_HSV2BGR)

    # 保存图像
    file_name_enhanced = file_name + '_after.jpg'  # 替换为所需的文件名
    img_name_enhanced = os.path.join(save_path, file_name_enhanced)
    cv2.imwrite(img_name_enhanced, final_image)
    print("Saved enhanced image:", img_name_enhanced)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值