使用Albumentations 对16位图像做增强

举报
AI浩 发表于 2021/12/23 00:50:17 2021/12/23
【摘要】 目录 1、导入需要的库 2、定义可视化函数 3、从磁盘读取16位TIFF映像 4、定义适用于16位TIFF图像的增强管道 本示例说明了如何增强16位TIFF图像。 在卫星图像中使用16位图像。 以下技术也可以应用于所有非8位图像(即24位图像,32位图像等)。 1、导入需要的库 import random import ...

目录

1、导入需要的库

2、定义可视化函数

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

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


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

1、导入需要的库


  
  1. import random
  2. import cv2
  3. from matplotlib import pyplot as plt
  4. import albumentations as A

2、定义可视化函数


  
  1. def visualize(image):
  2. # Divide all values by 65535 so we can display the image using matplotlib
  3. image = image / 65535
  4. plt.figure(figsize=(10, 10))
  5. plt.axis('off')
  6. plt.imshow(image)

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


  
  1. # The image is taken from http://www.brucelindbloom.com/index.html?ReferenceImages.html
  2. # © Bruce Justin Lindbloom
  3. image = cv2.imread('images/DeltaE_16bit_gamma2.2.tif', cv2.IMREAD_UNCHANGED)
  4. image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
  5. visualize(image)

注意: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转换将图像转换回其原始数据类型。

  
  1. transform = A.Compose([
  2. A.ToFloat(max_value=65535.0),
  3. A.RandomRotate90(),
  4. A.Flip(),
  5. A.OneOf([
  6. A.MotionBlur(p=0.2),
  7. A.MedianBlur(blur_limit=3, p=0.1),
  8. A.Blur(blur_limit=3, p=0.1),
  9. ], p=0.2),
  10. A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.2, rotate_limit=45, p=0.2),
  11. A.OneOf([
  12. A.OpticalDistortion(p=0.3),
  13. A.GridDistortion(p=0.1),
  14. ], p=0.2),
  15. A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=0.1, val_shift_limit=0.1, p=0.3),
  16. A.FromFloat(max_value=65535.0),
  17. ])

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


  
  1. random.seed(7)
  2. augmented = transform(image=image)
  3. visualize(augmented['image'])

文章来源: wanghao.blog.csdn.net,作者:AI浩,版权归原作者所有,如需转载,请联系作者。

原文链接:wanghao.blog.csdn.net/article/details/117076703

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。