当前位置: 首页 > news >正文

常用的图像增强操作

我们将介绍如何用PIL库实现一些简单的图像增强方法。

[!NOTE] 初始化配置

import numpy as np  
from PIL import Image, ImageOps, ImageEnhance  
import warningswarnings.filterwarnings('ignore')
IMAGE_SIZE = 640

[!important] 辅助函数
主要用于控制增强幅度

def int_parameter(level, maxval):  return int(level * maxval / 10)  def float_parameter(level, maxval):  return float(level) * maxval / 10.def sample_level(n):  return np.random.uniform(low=0.1, high=n)

level用于控制增强方法的数值强度,maxval一般取值为4,level是一个从均匀分布中采样的数值,这样让每次增强都具有随机性。

[!example] 增强方法

色彩反转

def invert(pil_img, _):  return ImageOps.invert(pil_img)

镜像

def mirror(pil_img, _):  return ImageOps.mirror(pil_img)

均衡化

def equalize(pil_img, _):  return ImageOps.equalize(pil_img)

色彩分离

def posterize(pil_img, level):  level = int_parameter(sample_level(level), 4)  return ImageOps.posterize(pil_img, 4 - level)

旋转

def rotate(pil_img, level):  degrees = int_parameter(sample_level(level), 30)  if np.random.uniform() > 0.5:  degrees = -degrees  return pil_img.rotate(degrees, resample=Image.BILINEAR)

Solarize

def solarize(pil_img, level):  level = int_parameter(sample_level(level), 256)  return ImageOps.solarize(pil_img, 256 - level)

Shear_x

def shear_x(pil_img, level):  level = float_parameter(sample_level(level), 0.3)  if np.random.uniform() > 0.5:  level = -level  return pil_img.transform((IMAGE_SIZE, IMAGE_SIZE),  Image.AFFINE, (1, level, 0, 0, 1, 0),  resample=Image.BILINEAR)

Shear_y

def shear_y(pil_img, level):  level = float_parameter(sample_level(level), 0.3)  if np.random.uniform() > 0.5:  level = -level  return pil_img.transform((IMAGE_SIZE, IMAGE_SIZE),  Image.AFFINE, (1, 0, 0, level, 1, 0),  resample=Image.BILINEAR)

Translate_x

def translate_x(pil_img, level):  level = int_parameter(sample_level(level), IMAGE_SIZE / 3)  if np.random.random() > 0.5:  level = -level  return pil_img.transform((IMAGE_SIZE, IMAGE_SIZE),  Image.AFFINE, (1, 0, level, 0, 1, 0),  resample=Image.BILINEAR)  

Translate_y

def translate_y(pil_img, level):  level = int_parameter(sample_level(level), IMAGE_SIZE / 3)  if np.random.random() > 0.5:  level = -level  return pil_img.transform((IMAGE_SIZE, IMAGE_SIZE),  Image.AFFINE, (1, 0, 0, 0, 1, level),  resample=Image.BILINEAR)  

Color

def color(pil_img, level):  level = float_parameter(sample_level(level), 1.8) + 0.1  return ImageEnhance.Color(pil_img).enhance(level)  

Contrast

def contrast(pil_img, level):  level = float_parameter(sample_level(level), 1.8) + 0.1  return ImageEnhance.Contrast(pil_img).enhance(level)  

AutoContrast

def autocontrast(pil_img, level):  level = float_parameter(sample_level(level), 10)  return ImageOps.autocontrast(pil_img, 10 - level)  

Brightness

def brightness(pil_img, level):  level = float_parameter(sample_level(level), 1.8) + 0.1  return ImageEnhance.Brightness(pil_img).enhance(level)  

Sharpness

def sharpness(pil_img, level):  level = float_parameter(sample_level(level), 1.8) + 0.1  return ImageEnhance.Sharpness(pil_img).enhance(level)

[!success] 使用案例

对于这样一张原图:

在这里插入图片描述

augmentations_all = {  "autocontrast":autocontrast,  "equalize":equalize,  "posterize":posterize,  "rotate":rotate,  "solarize":solarize,  "shear_x":shear_x,  "shear_y":shear_y,  "translate_x":translate_x,  "translate_y":translate_y,  "color":color,  "contrast":contrast,  "brightness":brightness,  "sharpness":sharpness,  "mirror":mirror,  "invert":invert  }  import matplotlib.pyplot as plt  img=Image.open(r"C:\Users\Administrator\Downloads\result1.5\result\original_resized\class0\0.jpg")  def draw(plt,idx,img,title):  plt.subplot(int("24"+str(idx)))  plt.imshow(img)  plt.xticks([])  plt.yticks([])  plt.title(title)  plt.figure(figsize=(20,16))  
for idx,(k,v) in enumerate(augmentations_all.items()):  draw(plt,(idx)%8+1,v(img.copy(),1),k)  if idx!=0 and idx % 7 == 0:  plt.show()  plt.figure(figsize=(20,16))

在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/415448.html

相关文章:

  • 探索TinyDB的轻量级魅力:Python中的微型数据库
  • 模型优化学习笔记—Adam算法
  • 车辆出险报告(h5)-车辆出险记录接口-车辆相关接口
  • C基础项目(学生成绩管理系统)
  • C# 设计模式之原型模式
  • 美林数据Tempo Talents | 两大资源中心,打造开放、成长型数智人才能力平台
  • IDC权威认可!工业领域最佳实践案例!
  • 未授权访问漏洞系列详解①!
  • 第1天:Python基础语法(五)
  • 【c++】用C++制作一个简易windows系统
  • 常见锁策略
  • 【机器学习】人工神经网络优化方法及正则化技术
  • Django异步请求和后台管理实战
  • 大奖放送 | AI编程达人秀视频文章征集大赛来啦!
  • 最新小猫咪PHP加密系统源码V1.4_本地API接口_带后台
  • a bag of bones
  • XLT高速线缆自动化测试系统
  • 微软AI业务最新营收数据情况(2024年7月)
  • canvas绘制表格
  • 避免溃坝的关键:渗压计在防洪管理中的作用
  • 品牌建设如何助力中小企业突破生存瓶颈?
  • 探索Python FastAPI的Annotated参数设计:提升代码的灵活性与可读性
  • ClickHouse 进阶【建表、查询优化】
  • Qt拖拽事件详解及代码实现
  • 云原生的候选应用
  • 什么是单例模式?
  • F4Pan百度网盘不限速直链解析工具最新可用
  • 设计模式实战:智能家居系统的设计与实现
  • Unity Rigidbody 踩坑记录
  • Guitar Pro简谱怎么输入 ?如何把简谱设置到六线谱的下面?