使用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

目录
相关文章
|
6月前
|
数据挖掘 计算机视觉 Python
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
53 1
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
|
1月前
|
编解码 定位技术
Google Earth Engine(GEE)——导出后的影像像素不同于原始Landsat影像的分辨率(投影差异)
Google Earth Engine(GEE)——导出后的影像像素不同于原始Landsat影像的分辨率(投影差异)
44 0
|
算法 计算机视觉 异构计算
目标检测的Tricks | 【Trick7】数据增强——Mosaic(马赛克)
目标检测的Tricks | 【Trick7】数据增强——Mosaic(马赛克)
1639 0
目标检测的Tricks | 【Trick7】数据增强——Mosaic(马赛克)
|
9天前
|
算法 Java API
在VC++中使用CxImage库读写图像实现像素操作
在VC++中使用CxImage库读写图像实现像素操作
11 0
|
1月前
|
计算机视觉
OpenCV图像混合
OpenCV图像混合
16 0
|
11月前
|
物联网 PyTorch 算法框架/工具
数据增强之图像变换与自定义transforms
数据增强之图像变换与自定义transforms
80 0
|
8月前
|
计算机视觉
OpenCV-扩充图像边界cv::copyMakeBorder
OpenCV-扩充图像边界cv::copyMakeBorder
|
10月前
|
传感器 编解码 监控
Baumer工业相机堡盟相机如何使用Binning像素合并功能( Binning像素合并功能的优点和行业应用)(C++)(C#)
Baumer工业相机堡盟相机如何使用Binning像素合并功能( Binning像素合并功能的优点和行业应用)(C++)(C#)
150 0
|
10月前
|
存储 编解码 供应链
Baumer工业相机堡盟相机如何使用CameraExplorer软件查看相机图像相关参数如Binning像素合并、ROI图像剪切、PixelFormat像素格式功能等
Baumer工业相机堡盟相机如何使用CameraExplorer软件查看相机图像相关参数如Binning像素合并、ROI图像剪切、PixelFormat像素格式功能等
167 0
|
计算机视觉
三、OpenCV之图像的混合
f0(x)、f1(x)相当于图片,通过上面的线性函数分别给两个图片的矩阵中的每个元素乘以对应的系数然后相加,即为混合后的图片。
119 0
三、OpenCV之图像的混合

热门文章

最新文章