4.1.4.2. 图片处理transformer说明

本章节将对您在进行图片缩放裁剪时使用的各个transformer的概念及参数进行说明,并为您提供参考使用示例,方便您进行tranformer操作。

在文档内容开始阅读前,以下内容请您注意:

注意

图片数据为三维数据,但地平线提供的transformer都是以四维数据的方式来进行获取和处理的,transformer只会对输入数据中的第0张图片做该操作。

4.1.4.2.1. AddTransformer

说明

对输入图片中的所有像素值做增加value的操作。该transformer会在输出时, 将数据格式转为float32。

参数

  • value: 对每个像素做增加的数值, 注意value的取值可以为负数, 如 -128。

使用举例

# 对图像数据做减去128的操作
``AddTransformer(-128)``

# 对图像数据做增加127的操作
``AddTransformer(127)``

4.1.4.2.2. MeanTransformer

说明

对输入图片中的所有像素值做减去 mean_value 的操作。

参数

  • means: 对每个像素做增加的数值, 注意value的取值可以为负数, 如 -128。

  • data_format: 输入的layout类型,取值范围为[“CHW”,”HWC”], 默认 “CHW”。

使用举例

# 每个像素减去128.0 输入的类型为CHW
MeanTransformer(np.array([128.0, 128.0, 128.0]))

# 每个像素减去不同的数值,103.94, 116.78, 123.68,输入的类型为 HWC
MeanTransformer(np.array([103.94, 116.78, 123.68]), data_format="HWC")

4.1.4.2.3. ScaleTransformer

说明

对输入图片中的所有像素值做乘以data_scale系数的操作。

参数

  • scale_value: 需要乘以的系数,如0.0078125 或者1/128。

使用举例

# 将取值范围-128~127,所有的像素的调整到-1~1之间
ScaleTransformer(0.0078125)
# 或者
ScaleTransformer(1/128)

4.1.4.2.4. NormalizeTransformer

说明

用于对输入图片进行归一化的操作。该transformer会在输出时, 将数据格式转为float32。

参数

  • std:输入的第一张图片,需要除以的数值。

使用举例

# 将取值范围[-128, 127] 所有的像素的调整到-1~1之间
NormalizeTransformer(128)

4.1.4.2.5. TransposeTransformer

说明

用于做layout转换的操作。

参数

  • order: 对输入图片做layout转换后的顺序(顺序与原有的layout顺序有关)。如:HWC的顺序为0,1,2,需要转为CHW时,order为(2,0,1)。

使用举例

# HWC转到CHW
TransposeTransformer((2, 0, 1))
# CHW转到HWC
TransposeTransformer((1, 2, 0))

4.1.4.2.6. HWC2CHWTransformer

说明

用于将NHWC转换为NCHW的操作。

参数:不涉及。

使用举例

# NHWC转到NCHW
HWC2CHWTransformer()

4.1.4.2.7. CHW2HWCTransformer

说明

用于将NCHW转换为NHWC的操作。

参数:不涉及。

使用举例

# NCHW转到 NHWC
CHW2HWCTransformer()

4.1.4.2.8. CenterCropTransformer

说明

以直接截断取值的方式从图片中心裁剪出一个正方形的图片的操作。该transformer会在输出时, 将数据格式转为float32。当data_type的值为uint8时,输出为uint8。

参数

  • crop_size: 中心裁剪的正方形的边长size。

  • data_type: 输出结果的类型,取值范围为[“float”, “uint8”]。

使用举例

# 以224*224的方式,做中心裁剪,默认输出类型为float32
CenterCropTransformer(crop_size=224)

# 以224*224的方式,做中心裁剪,输出类型为uint8
CenterCropTransformer(crop_size=224, data_type="uint8")

4.1.4.2.9. PILCenterCropTransformer

说明

使用PIL的方式从图片中心裁剪出一个正方形的图片的操作。该transformer会在输出时, 将数据格式转为float32。

参数

  • size: 中心裁剪的正方形的边长size。

使用举例

# 以224*224的方式,使用PIL的方式做中心裁剪
PILCenterCropTransformer(size=224)

4.1.4.2.10. LongSideCropTransformer

说明

用于做长边裁剪的操作。该 transformer 会在输出时, 将数据格式转为float32。

当宽度比高度的数值大时,会裁剪出一个中心以高度大小为准的正方形,如宽100,高70,裁剪之后大小为70*70。

当高度比宽度的数值大时,会裁剪出一个中心以宽度大小不变,高度为差值的一半+宽度 的长方形,如宽70,高100,裁剪之后大小为 70*(100-70)/2+70 ,即70* 85大小的长方形。

参数:不涉及。

使用举例

LongSideCropTransformer()

4.1.4.2.11. PadResizeTransformer

说明

使用填充的方式做图像放大的操作。该 transformer 会在输出时, 将数据格式转为float32。

参数

  • target_size:目标大小,值为元组,如(240,240)。

  • pad_value:填充到数组中的值,默认值为127。

  • pad_position:填充的位置,取值范围为[“boundary”, “bottom_right”],默认值为 “boundary”。

使用举例

# 裁剪一个大小为512*512,填充到右下角,填充值为0
PadResizeTransformer((512, 512), pad_position='bottom_right', pad_value=0)

# 裁剪一个大小为608*608,填充到边框,填充值为 127
PadResizeTransformer(target_size=(608, 608))

4.1.4.2.12. ResizeTransformer

说明

用于调整图像大小的操作。

参数

  • target_size:目标大小,值为元组,如(240,240)。(240,240):前一个240代表高度为240,后一个240代表宽度为240。

  • mode:图片处理模式,取值范围为(“skimage”,”opencv”),默认值为 “skimage”。

  • method:插值的方法,此参数仅在mode为skimage时生效。取值范围为0-5,默认值为1,其中:

    • 0代表Nearest-neighbor;

    • 1代表Bi-linear(default);

    • 2代表Bi-quadratic;

    • 3代表Bi-cubic;

    • 4代表Bi-quartic;

    • 5代表Bi-quintic。

  • data_type:输出的类型,取值范围为(uint8,float),默认为float类型。当被设置为uint8时,输出类型为uint8 ,其他情况为float32。

  • interpolation:插值的方法,此参数仅在mode为opencv时生效。默认为空,取值范围为(opencv的插值方式), 目前interpolation仅支持为空或opencv中的INTER_CUBIC两种插值方法,当interpolation为空时,默认使用INTER_LINEAR方式。

    以下为opencv中支持的插值方式及说明(目前未支持的插值方式将在后续迭代中逐步支持):

    • INTER_NEAREST,最近邻插值;

    • INTER_LINEAR,双线性插值,当interpolation为空时,默认使用这种方法。

    • INTER_CUBIC,双三次插值4x4像素邻域内的双立方插值。

    • INTER_AREA,使用像素面积关系重采样。它可能是图像抽取的首选方法,因为它可以提供无莫尔条纹的结果。但是当图像被缩放时,它类似于INTER_NEAREST方法。

    • INTER_LANCZOS4,8x8邻域的Lanczos插值。

    • INTER_LINEAR_EXACT,位精确双线性插值。

    • INTER_NEAREST_EXACT,位精确最近邻插值。这将产生与PIL、scikit-image或Matlab中的最近邻方法相同的结果。

    • INTER_MAX,插值代码的掩码。

    • WARP_FILL_OUTLIERS,标志,填充所有目标图像像素。如果其中一些对应于源图像中的异常值,则将它们设置为零。

    • WARP_INVERSE_MAP,标志,逆变换。

使用举例

# 将输入图片大小调整为224*224,采用 opencv 的方式处理图片,插值的方式为双线性,输出为float32
ResizeTransformer(target_size=(224, 224), mode='opencv', method=1)

# 将输入图片大小调整为256*256,采用skimage的方式处理图片,插值的方式为双线性,输出为float32
ResizeTransformer(target_size=(256, 256))

# 将输入图片大小调整为256*256,采用skimage的方式处理图片,插值的方式为双线性,输出为uint8
ResizeTransformer(target_size=(256, 256), data_type="uint8")

4.1.4.2.13. PILResizeTransformer

说明

使用PIL库做调整图像大小的操作。

参数

  • size:目标大小,值为元组,如(240,240)。

  • interpolation:指定插值的方式,取值范围:(Image.NEAREST,Image.BILINEAR,Image.BICUBIC,Image.LANCZOS), 默认值为Image.BILINEAR。

    • Image.NEAREST:最近邻采样;

    • Image.BILINEAR:线性插值;

    • Image.BICUBIC:三次样条插值;

    • Image.LANCZOS:高质量下采样滤波器。

使用举例

# 将输入图片大小调整为256*256 插值的方式为线性插值
PILResizeTransformer(size=256)

# 将输入图片大小调整为256*256 插值的方式为高质量下采样滤波器
PILResizeTransformer(size=256, interpolation=Image.LANCZOS)

4.1.4.2.14. ShortLongResizeTransformer

说明

按照原比例对输入图片进行缩放的操作,新图片的大小与设置的参数有关。操作方式如下:

  1. 先以short_size的大小除以原图片的宽和高里最小值,以这个值为缩放比例系数。

  2. 当缩放比例系数乘以原图片的宽和高中的最大值,得到的结果大于long_size的数值时,缩放比例系数将变更为long_size除以原图片的宽和高中的最大值。

  3. 使用opencv中的resize方法,根据上方得到的缩放比例系数重新裁剪图片。

参数

  • short_size:预期裁剪后的短边的长度。

  • long_size:预期裁剪后的长边的长度。

  • include_im:默认值为True,设置为True时, 会在返回时除了返回处理后的图片, 还会返回原图片。

使用举例

# 短边长度为20,长边长度为100,返回处理后的图片及原图片
ShortLongResizeTransformer(short_size=20, long_size=100)

4.1.4.2.15. PadTransformer

说明

通过用目标大小的size值除以输入图片宽或者高里的最大值为系数,然后使用这个系数乘以原有的宽高,resize图片。 然后根据新图片的大小,除以size_divisor后向上取整后,再乘以size_divisor,为新的宽高,生成新的图片的操作。

参数

  • size_divisor:大小除数 ,默认值为128。

  • target_size:目标大小,默认值为512。

使用举例

# pad大小为1024*1024
PadTransformer(size_divisor=1024, target_size=1024)

4.1.4.2.16. ShortSideResizeTransformer

说明

根据期望的短边的长度,使用现在的长短边的比例,中心裁剪出新的图片大小的操作。

参数

  • short_size:预期的短边的长度。

  • data_type:输出结果的类型,取值范围为(“float”,”uint8”),默认取值”float32”, 以 float32 类型输出,设置为uint8时,输出类型将为uint8。

  • interpolation:指定插值的方式,取值范围为 opencv 中采用的插值方式,默认为空。

    目前interpolation仅支持为空或opencv中的INTER_CUBIC两种插值方法,当interpolation为空时,默认使用INTER_LINEAR方式。

    以下为opencv中支持的插值方式及说明(目前未支持的插值方式将在后续迭代中逐步支持):

    • INTER_NEAREST,最近邻插值;

    • INTER_LINEAR,双线性插值,当interpolation为空时,默认使用这种方法。

    • INTER_CUBIC,双三次插值4x4像素邻域内的双立方插值。

    • INTER_AREA,使用像素面积关系重采样。它可能是图像抽取的首选方法,因为它可以提供无莫尔条纹的结果。但是当图像被缩放时,它类似于INTER_NEAREST方法。

    • INTER_LANCZOS4,8x8邻域的Lanczos插值。

    • INTER_LINEAR_EXACT,位精确双线性插值。

    • INTER_NEAREST_EXACT,位精确最近邻插值。这将产生与PIL、scikit-image或Matlab中的最近邻方法相同的结果。

    • INTER_MAX,插值代码的掩码。

    • WARP_FILL_OUTLIERS,标志,填充所有目标图像像素。如果其中一些对应于源图像中的异常值,则将它们设置为零。

    • WARP_INVERSE_MAP,标志,逆变换。

使用举例

# 将短边大小调整为256,插值方式为双线性插值
ShortSideResizeTransformer(short_size=256)

# 将短边大小调整为256,插值方式为 8x8像素邻域内的Lanczos插值
ShortSideResizeTransformer(short_size=256, interpolation=Image.LANCZOS4)

4.1.4.2.17. PaddedCenterCropTransformer

说明

使用填充的方式对图片中心进行裁剪的操作。

注意

仅适用于EfficientNet-lite相关实例模型。

计算方式为:

  1. 计算系数,int((float( image_size ) / ( image_size + crop_pad ))。

  2. 计算中心size的大小, 系数 * np.minimum( 原始图片的高度, 原始图片的宽度 ))。

  3. 根据计算出来的size大小,做中心裁剪。

参数

  • image_size:图片的大小,默认值为224。

  • crop_pad:中心填充的大小,默认值为32。

使用举例

# 裁剪大小为240*240,填充值为32
PaddedCenterCropTransformer(image_size=240, crop_pad=32)

# 裁剪大小为224*224,填充值为32
PaddedCenterCropTransformer()

4.1.4.2.18. BGR2RGBTransformer

说明

将输入格式由BGR转成RGB的操作。

参数

  • data_format:数据格式,取值范围为(CHW,HWC),默认值为CHW。

使用举例

# layout为NCHW时,做BGR转为RGB
BGR2RGBTransformer()

# layout为NHWC时,做BGR转为RGB
BGR2RGBTransformer(data_format="HWC")

4.1.4.2.19. RGB2BGRTransformer

说明

将输入格式由RGB转成BGR的操作。

参数

  • data_format:数据格式,取值范围为(CHW,HWC),默认值为CHW。

使用举例

# layout为NCHW时,做RGB转成BGR
RGB2BGRTransformer()

# layout为NHWC时,做RGB转成BGR
RGB2BGRTransformer(data_format="HWC")

4.1.4.2.20. RGB2GRAYTransformer

说明

将输入格式由RGB转成GRAY的操作。

参数

  • data_format:输入的layout类型,取值范围(“CHW”,”HWC”),默认为”CHW”。

使用举例

# layout为NCHW时,做RGB转成GRAY
RGB2GRAYTransformer(data_format='CHW')

# layout为NHWC时,做RGB转成GRAY
RGB2GRAYTransformer(data_format='HWC')

4.1.4.2.21. BGR2GRAYTransformer

说明

将输入格式由 BGR 转成 GRAY 的操作。

参数

  • data_format:输入的layout类型,取值范围 [“CHW”,”HWC”],默认值为”CHW”。

使用举例

# layout为NCHW时,做BGR转成GRAY
BGR2GRAYTransformer(data_format='CHW')

# layout为NHWC时,做BGR转成GRAY
BGR2GRAYTransformer(data_format='HWC')

4.1.4.2.22. RGB2GRAY_128Transformer

说明

输入格式由RGB转成GRAY_128的操作。GRAY_128取值范围为(-128,127)。

参数

  • data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为”CHW”,此项为必填项。

使用举例

# layout为NCHW时,做RGB转成GRAY_128
RGB2GRAY_128Transformer(data_format='CHW')

# layout为NHWC时,做RGB转成GRAY_128
RGB2GRAY_128Transformer(data_format='HWC')

4.1.4.2.23. RGB2YUV444Transformer

说明

将输入格式由RGB转成YUV444的操作。

参数

  • data_format:输入的layout类型,取值范围为[“CHW”, “HWC”],默认值为”CHW”,此项为必填项。

使用举例

# layout 为 NCHW 时,做 RGB 转成 YUV444
RGB2YUV444Transformer(data_format='CHW')

# layout 为 NHWC 时,做 RGB 转成 YUV444
RGB2YUV444Transformer(data_format='HWC')

4.1.4.2.24. BGR2YUV444Transformer

说明

将输入格式由BGR转成YUV444的操作。

参数

  • data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为 “CHW”,此项为必填项。

使用举例

# layout为NCHW时,做BGR转成YUV444
BGR2YUV444Transformer(data_format='CHW')

# layout为NHWC时,做BGR转成YUV444
BGR2YUV444Transformer(data_format='HWC')

4.1.4.2.25. BGR2YUV444_128Transformer

说明

将输入格式由BGR转成YUV444_128的操作。YUV444_128取值范围为(-128,127)。

参数

  • data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为 “CHW”,此项为必填项。

使用举例

# layout为NCHW时,做BGR转成YUV444_128
BGR2YUV444_128Transformer(data_format='CHW')

# layout为NHWC时,做BGR转成YUV444_128
BGR2YUV444_128Transformer(data_format='HWC')

4.1.4.2.26. RGB2YUV444_128Transformer

说明

将输入格式由RGB转成YUV444_128的操作。YUV444_128取值范围为(-128,127)。

参数

  • data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为”CHW”,此项为必填项。

使用举例

# layout为NCHW 时,做RGB转成YUV444_128
RGB2YUV444_128Transformer(data_format='CHW')

# layout为NHWC时,做RGB转成 YUV444_128
RGB2YUV444_128Transformer(data_format='HWC')

4.1.4.2.27. BGR2YUVBT601VIDEOTransformer

说明

将输入格式由BGR转成YUV_BT601_Video_Range的操作。

YUV_BT601_Video_Range,某些摄像头输入数据都是YUV BT601(Video Range)格式的,取值范围为16~235,该transformer就是适配这种格式的数据产生的。

参数

  • data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为”CHW”,此项为必填项。

使用举例

# layout为 NCHW时,做BGR转成YUV_BT601_Video_Range
BGR2YUVBT601VIDEOTransformer(data_format='CHW')

# layout为NHWC时,做BGR转成YUV_BT601_Video_Range
BGR2YUVBT601VIDEOTransformer(data_format='HWC')

4.1.4.2.28. RGB2YUVBT601VIDEOTransformer

说明

将输入格式由RGB转成YUV_BT601_Video_Range的操作。

YUV_BT601_Video_Range,某些摄像头输入数据都是YUV BT601(Video Range)格式的,取值范围为16~235,该transformer就是适配这种格式的数据产生的。

参数

  • data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为”CHW”,此项为必填项。

使用举例

# layout为NCHW时,做RGB转成YUV_BT601_Video_Range
RGB2YUVBT601VIDEOTransformer(data_format='CHW')

# layout为NHWC时,做RGB转成YUV_BT601_Video_Range
RGB2YUVBT601VIDEOTransformer(data_format='HWC')

4.1.4.2.29. YUVTransformer

说明

将输入格式转成YUV444的操作。

参数

  • color_sequence:颜色序列,此项为必填项。

使用举例

# 将BGR读入的图片转为YUV444
YUVTransformer(color_sequence="BGR")

# 将RGB读入的图片转为YUV444
YUVTransformer(color_sequence="RGB")

4.1.4.2.30. ReduceChannelTransformer

说明

将C通道缩减为单通道的操作。该transformer主要是针对于C通道,如shape为1*3*224*224 改为1*1*224*224。 使用时layout一定要和data_format值对齐,避免造成删错通道。

参数

  • data_format:输入的layout类型,取值范围为[“CHW”, “HWC”],默认值为”CHW”。

使用举例

# 删除layout为NCHW的C通道
ReduceChannelTransformer()
# 或者
ReduceChannelTransformer(data_format="CHW")

# 删除layout为NHWC的C通道
ReduceChannelTransformer(data_format="HWC")

4.1.4.2.31. BGR2NV12Transformer

说明

将输入格式由BGR转成NV12的操作。

参数

  • data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为”CHW”。

  • cvt_mode:cvt模式,取值范围为(rgb_calc,opencv),默认值为rgb_calc。

    • rgb_calc,采用mergeUV的方式处理图片;

    • opencv,采用opencv的方式处理图片。

使用举例

# layout为NCHW时,由BGR转为NV12,采用rgb_calc模式处理图片
BGR2NV12Transformer()
# 或者
BGR2NV12Transformer(data_format="CHW")

# layout为NHWC时,由BGR转为NV12,采用opencv模式处理图片
BGR2NV12Transformer(data_format="HWC", cvt_mode="opencv")

4.1.4.2.32. RGB2NV12Transformer

说明

将输入格式由RGB转成NV12的操作。

参数

  • data_format:输入的 layout 类型,取值范围 [“CHW”, “HWC”], 默认值为”CHW”。

  • cvt_mode:cvt模式,取值范围为(rgb_calc,opencv),默认值为rgb_calc。

    • rgb_calc,采用mergeUV的方式处理图片;

    • opencv,采用opencv的方式处理图片。

使用举例

# layout为NCHW时,有RGB转为NV12,采用rgb_calc模式处理图片
RGB2NV12Transformer()
# 或者
RGB2NV12Transformer(data_format="CHW")

# layout为NHWC时,有RGB转为NV12,采用opencv模式处理图片
RGB2NV12Transformer(data_format="HWC", cvt_mode="opencv")

4.1.4.2.33. NV12ToYUV444Transformer

说明

将输入格式由NV12转成YUV444的操作。

参数

  • target_size:目标大小,值为元组,如(240,240)。

  • yuv444_output_layout:yuv444输出的layout,取值范围为(HWC,CHW),默认值为”HWC”。

使用举例

# layout为NCHW ,大小为768*768, nv12转yuv444
NV12ToYUV444Transformer(target_size=(768, 768))

# layout为NHWC ,大小为224*224, nv12转yuv444
NV12ToYUV444Transformer((224, 224), yuv444_output_layout="HWC")

4.1.4.2.34. WarpAffineTransformer

说明

用于做图像仿射变换的操作。

参数

  • input_shape:输入的shape值。

  • scale:乘以的系数。

使用举例

# 大小为512*512,长边长度为1.0
WarpAffineTransformer((512, 512), 1.0)

4.1.4.2.35. F32ToS8Transformer

说明

用于做输入格式从float32转换为int8的操作。

参数:不涉及。

使用举例

# 输入格式从 float32转为 int8
F32ToS8Transformer()

4.1.4.2.36. F32ToU8Transformer

说明

用于做输入格式从float32转换为uint8的操作。

参数:不涉及。

使用举例

# 输入格式从 float32 转为 uint8
F32ToU8Transformer()