使用Albumentations 对16位图像做增强

简介: 使用Albumentations 对16位图像做增强

目录


1、导入需要的库


2、定义可视化函数


3、从磁盘读取16位TIFF映像


4、定义适用于16位TIFF图像的增强管道


本示例说明了如何增强16位TIFF图像。 在卫星图像中使用16位图像。 以下技术也可以应用于所有非8位图像(即24位图像,32位图像等)。


1、导入需要的库

import random

import cv2

from matplotlib import pyplot as plt

import albumentations as A

2、定义可视化函数

def visualize(image):

   # Divide all values by 65535 so we can display the image using matplotlib

   image = image / 65535

   plt.figure(figsize=(10, 10))

   plt.axis('off')

   plt.imshow(image)

3、从磁盘读取16位TIFF映像

# The image is taken from http://www.brucelindbloom.com/index.html?ReferenceImages.html

# © Bruce Justin Lindbloom

image = cv2.imread('images/DeltaE_16bit_gamma2.2.tif', cv2.IMREAD_UNCHANGED)

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

visualize(image)

tt.png



注意:OpenCV可能会错误地读取某些TIFF文件。 考虑使用tifffile地址:https://github.com/blink1073/tifffile

4、定义适用于16位TIFF图像的增强管道

Albumentations 支持两种描述像素强度的数据类型:-np.uint8,一个无符号的8位整数,可以定义0到255之间的值。-np.float32,一个单精度浮点数。对于np.float32输入,Albumentations期望该值在0.0到1.0之间。


Albumentations 有一个名为ToFloat的专用转换函数,该转换接受一个NumPy数组,其数据类型为np.uint16,np.uint32等(因此,任何使用大于255的值表示像素强度的数据类型)并将其转换为具有以下内容的NumPy数组np.float32数据类型。此外,此转换将所有输入值划分为[0.0,1.0]。默认情况下,如果输入数据类型为np.uint16,则将所有值除以65536,如果输入数据类型为np.uint32,则将所有值均除以4294967295.您可以在max_value参数中指定分频器。


非8位图像的增强流水线包括以下阶段:


首先,您使用ToFloat转换将输入图像转换为float32。转换后的图像中的所有值都将在[0.0,1.0]范围内。

然后,您使用所有必要的图像变换。

你可以选择在扩充管道的末尾使用FromFloat转换将图像转换回其原始数据类型。

transform = A.Compose([

   A.ToFloat(max_value=65535.0),

   A.RandomRotate90(),

   A.Flip(),

   A.OneOf([

       A.MotionBlur(p=0.2),

       A.MedianBlur(blur_limit=3, p=0.1),

       A.Blur(blur_limit=3, p=0.1),

   ], p=0.2),

   A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.2, rotate_limit=45, p=0.2),

   A.OneOf([

       A.OpticalDistortion(p=0.3),

       A.GridDistortion(p=0.1),

   ], p=0.2),        

   A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=0.1, val_shift_limit=0.1, p=0.3),

   A.FromFloat(max_value=65535.0),

])

我们固定随机种子是为了可视化目的,因此增强将始终产生相同的结果。 在真实的计算机视觉管道中,您不应该在对图像应用转换之前固定随机种子,因为在这种情况下,管道将始终输出相同的图像。 图像增强的目的是每次使用不同的变换。


random.seed(7)

augmented = transform(image=image)

visualize(augmented['image'])


tt.png

目录
相关文章
|
数据挖掘 计算机视觉 Python
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
95 1
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
|
JSON 数据格式 Python
对Labelme标注图像,进行90、180、270的旋转,实现标注数据的扩充。
对Labelme标注图像,进行90、180、270的旋转,实现标注数据的扩充。
1105 0
对Labelme标注图像,进行90、180、270的旋转,实现标注数据的扩充。
|
算法 数据可视化
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
2194 0
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
|
1月前
|
PHP
29 JpGraph图像绘制库
路老师在知乎上分享了PHP语言的知识,帮助大家入门并深入了解PHP。本文介绍了JpGraph库的下载、使用及中文乱码设置,通过实例展示了如何使用JpGraph绘制折线图。
26 2
|
6月前
|
存储 编解码 API
【图像文本化】Base64编解码OpenCV4中 Mat 对象
【图像文本化】Base64编解码OpenCV4中 Mat 对象
109 0
|
7月前
|
计算机视觉
OpenCV图像混合
OpenCV图像混合
32 0
|
物联网 PyTorch 算法框架/工具
数据增强之图像变换与自定义transforms
数据增强之图像变换与自定义transforms
140 0
|
计算机视觉
OpenCV-扩充图像边界cv::copyMakeBorder
OpenCV-扩充图像边界cv::copyMakeBorder
180 0
|
计算机视觉 C++
【OpenCV • c++】基础图像的绘制
【OpenCV • c++】基础图像的绘制
184 1
|
数据可视化 计算机视觉 Python
使用Albumentations 对关键点 做增强
使用Albumentations 对关键点 做增强
524 0
使用Albumentations 对关键点 做增强