Rspress

# #图片处理transformer说明

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

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

注意

图像数据为三维数据，但地平线提供的transformer默认第一维为N维，会对数据以第一维拆分循环处理，所以如果您需要对图像做处理，请提供四维数据。

## #AddTransformer

说明：

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

参数：

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

使用举例：

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

## #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")`

## #ScaleTransformer

说明：

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

参数：

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

使用举例：

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

## #NormalizeTransformer

说明：

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

参数：

- std：输入的第一张图片，需要除以的数值。

使用举例：

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

## #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))`

## #HWC2CHWTransformer

说明：

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

参数：不涉及。

使用举例：

`# NHWC转到NCHW HWC2CHWTransformer()`

## #CHW2HWCTransformer

说明：

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

参数：不涉及。

使用举例：

`# NCHW转到 NHWC CHW2HWCTransformer()`

## #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")`

## #PILCenterCropTransformer

说明：

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

参数：

- size：中心裁剪的正方形的边长size。

使用举例：

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

## #LongSideCropTransformer

说明：

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

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

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

参数：不涉及。

使用举例：

`LongSideCropTransformer()`

## #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))`

## #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")`

## #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)`

## #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)`

## #PadTransformer

说明：

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

参数：

- size_divisor：大小除数 ，默认值为128。
- target_size：目标大小，默认值为512。

使用举例：

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

## #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)`

## #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()`

## #BGR2RGBTransformer

说明：

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

参数：

- data_format：数据格式，取值范围为(CHW,HWC)，默认值为CHW。

使用举例：

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

## #RGB2BGRTransformer

说明：

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

参数：

- data_format：数据格式，取值范围为(CHW,HWC)，默认值为CHW。

使用举例：

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

## #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')`

## #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')`

## #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')`

## #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')`

## #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')`

## #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')`

## #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')`

## #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')`

## #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')`

## #YUVTransformer

说明：

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

参数：

- color_sequence：颜色序列，此项为必填项。

使用举例：

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

## #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")`

## #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")`

## #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")`

## #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")`

## #WarpAffineTransformer

说明：

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

参数：

- input_shape：输入的shape值。
- scale：乘以的系数。

使用举例：

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

## #F32ToS8Transformer

说明：

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

参数：不涉及。

使用举例：

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

## #F32ToU8Transformer

说明：

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

参数：不涉及。

使用举例：

`# 输入格式从 float32 转为 uint8 F32ToU8Transformer()`
页面目录