图片处理transformer说明
本章节将对您在进行图片缩放裁剪时使用的各个transformer的概念及参数进行说明,并为您提供参考使用示例,方便您进行tranformer操作。
在文档内容开始阅读前,以下内容请您注意:
图像数据为三维数据,但地平线提供的transformer默认第一维为N维,会对数据以第一维拆分循环处理,所以如果您需要对图像做处理,请提供四维数据。
AddTransformer
说明:
对输入图片中的所有像素值做增加value的操作。该transformer会在输出时,将数据格式转为float32。
参数:
- value: 对每个像素做增加的数值, 注意value的取值可以为负数, 如 -128。
使用举例:
MeanTransformer
说明:
对输入图片中的所有像素值做减去mean_value的操作。
参数:
- means:对每个像素减去的数值, 注意value的取值可以为负数, 如 -128。
- data_format:输入的layout类型,取值范围为["CHW","HWC"], 默认 "CHW"。
使用举例:
ScaleTransformer
说明:
对输入图片中的所有像素值做乘以data_scale系数的操作。
参数:
- scale_value: 需要乘以的系数,如0.0078125 或者1/128。
使用举例:
NormalizeTransformer
说明:
用于对输入图片进行归一化的操作。该transformer会在输出时,将数据格式转为float32。
参数:
- std:输入的第一张图片,需要除以的数值。
使用举例:
TransposeTransformer
说明:
用于做layout转换的操作。
参数:
- order:对输入图片做layout转换后的顺序(顺序与原有的layout顺序有关)。如:HWC的顺序为0,1,2,需要转为CHW时,order为(2,0,1)。
使用举例:
HWC2CHWTransformer
说明:
用于将NHWC转换为NCHW的操作。
参数:不涉及。
使用举例:
CHW2HWCTransformer
说明:
用于将NCHW转换为NHWC的操作。
参数:不涉及。
使用举例:
CenterCropTransformer
说明:
以直接截断取值的方式从图片中心裁剪出一个正方形的图片的操作。该transformer会在输出时,将数据格式转为float32。当data_type的值为uint8时,输出为uint8。
参数:
- crop_size:中心裁剪的正方形的边长size。
- data_type:输出结果的类型,取值范围为["float", "uint8"]。
使用举例:
PILCenterCropTransformer
说明:
使用PIL的方式从图片中心裁剪出一个正方形的图片的操作。该transformer会在输出时,将数据格式转为float32。
参数:
- size:中心裁剪的正方形的边长size。
使用举例:
LongSideCropTransformer
说明:
用于做长边裁剪的操作。该 transformer 会在输出时, 将数据格式转为float32。
当宽度比高度的数值大时,会裁剪出一个中心以高度大小为准的正方形,如宽100,高70,裁剪之后大小为70*70。
当高度比宽度的数值大时,会裁剪出一个中心以宽度大小不变,高度为差值的一半+宽度的长方形,如宽70,高100,裁剪之后大小为 70 *(100-70)/2+70 ,即70* 85大小的长方形。
参数:不涉及。
使用举例:
PadResizeTransformer
说明:
使用填充的方式做图像放大的操作。该 transformer 会在输出时,将数据格式转为float32。
参数:
- target_size:目标大小,值为元组,如(240,240)。
- pad_value:填充到数组中的值,默认值为127。
- pad_position:填充的位置,取值范围为["boundary","bottom_right"],默认值为 "boundary"。
使用举例:
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,标志,逆变换。
使用举例:
PILResizeTransformer
说明:
使用PIL库做调整图像大小的操作。
参数:
- size:目标大小,值为元组,如(240,240)。
- interpolation:指定插值的方式,取值范围:(Image.NEAREST,Image.BILINEAR,Image.BICUBIC,Image.LANCZOS),默认值为Image.BILINEAR。
- Image.NEAREST:最近邻采样;
- Image.BILINEAR:线性插值;
- Image.BICUBIC:三次样条插值;
- Image.LANCZOS:高质量下采样滤波器。
使用举例:
ShortLongResizeTransformer
说明:
按照原比例对输入图片进行缩放的操作,新图片的大小与设置的参数有关。操作方式如下:
- 先以short_size的大小除以原图片的宽和高里最小值,以这个值为缩放比例系数。
- 当缩放比例系数乘以原图片的宽和高中的最大值,得到的结果大于long_size的数值时,缩放比例系数将变更为long_size除以原图片的宽和高中的最大值。
- 使用opencv中的resize方法,根据上方得到的缩放比例系数重新裁剪图片。
参数:
- short_size:预期裁剪后的短边的长度。
- long_size:预期裁剪后的长边的长度。
- include_im:默认值为True,设置为True时,会在返回时除了返回处理后的图片, 还会返回原图片。
使用举例:
PadTransformer
说明:
通过用目标大小的size值除以输入图片宽或者高里的最大值为系数,然后使用这个系数乘以原有的宽高,resize图片。然后根据新图片的大小,除以size_divisor后向上取整后,再乘以size_divisor,为新的宽高,生成新的图片的操作。
参数:
- size_divisor:大小除数 ,默认值为128。
- target_size:目标大小,默认值为512。
使用举例:
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,标志,逆变换。
使用举例:
PaddedCenterCropTransformer
说明:
使用填充的方式对图片中心进行裁剪的操作。
仅适用于EfficientNet-lite相关实例模型。
计算方式为:
- 计算系数,int((float( image_size ) / ( image_size + crop_pad ))。
- 计算中心size的大小, 系数 * np.minimum( 原始图片的高度,原始图片的宽度 )。
- 根据计算出来的size大小,做中心裁剪。
参数:
- image_size:图片的大小,默认值为224。
- crop_pad:中心填充的大小,默认值为32。
使用举例:
BGR2RGBTransformer
说明:
将输入格式由BGR转成RGB的操作。
参数:
- data_format:数据格式,取值范围为(CHW,HWC),默认值为CHW。
使用举例:
RGB2BGRTransformer
说明:
将输入格式由RGB转成BGR的操作。
参数:
- data_format:数据格式,取值范围为(CHW,HWC),默认值为CHW。
使用举例:
RGB2GRAYTransformer
说明:
将输入格式由RGB转成GRAY的操作。
参数:
- data_format:输入的layout类型,取值范围("CHW","HWC"),默认为"CHW"。
使用举例:
BGR2GRAYTransformer
说明:
将输入格式由 BGR 转成 GRAY 的操作。
参数:
- data_format:输入的layout类型,取值范围 ["CHW","HWC"],默认值为"CHW"。
使用举例:
RGB2GRAY_128Transformer
说明:
输入格式由RGB转成GRAY_128的操作。GRAY_128取值范围为(-128,127)。
参数:
- data_format:输入的layout类型,取值范围为["CHW","HWC"],默认值为"CHW",此项为必填项。
使用举例:
RGB2YUV444Transformer
说明:
将输入格式由RGB转成YUV444的操作。
参数:
- data_format:输入的layout类型,取值范围为["CHW", "HWC"],默认值为"CHW",此项为必填项。
使用举例:
BGR2YUV444Transformer
说明:
将输入格式由BGR转成YUV444的操作。
参数:
- data_format:输入的layout类型,取值范围为["CHW","HWC"],默认值为 "CHW",此项为必填项。
使用举例:
BGR2YUV444_128Transformer
说明:
将输入格式由BGR转成YUV444_128的操作。YUV444_128取值范围为(-128,127)。
参数:
- data_format:输入的layout类型,取值范围为["CHW","HWC"],默认值为 "CHW",此项为必填项。
使用举例:
RGB2YUV444_128Transformer
说明:
将输入格式由RGB转成YUV444_128的操作。YUV444_128取值范围为(-128,127)。
参数:
- data_format:输入的layout类型,取值范围为["CHW","HWC"],默认值为"CHW",此项为必填项。
使用举例:
BGR2YUVBT601VIDEOTransformer
说明:
将输入格式由BGR转成YUV_BT601_Video_Range的操作。
YUV_BT601_Video_Range,某些摄像头输入数据都是YUV BT601(Video Range)格式的,取值范围为16~235,该transformer就是适配这种格式的数据产生的。
参数:
- data_format:输入的layout类型,取值范围为["CHW","HWC"],默认值为"CHW",此项为必填项。
使用举例:
RGB2YUVBT601VIDEOTransformer
说明:
将输入格式由RGB转成YUV_BT601_Video_Range的操作。
YUV_BT601_Video_Range,某些摄像头输入数据都是YUV BT601(Video Range)格式的,取值范围为16~235,该transformer就是适配这种格式的数据产生的。
参数:
- data_format:输入的layout类型,取值范围为["CHW","HWC"],默认值为"CHW",此项为必填项。
使用举例:
YUVTransformer
说明:
将输入格式转成YUV444的操作。
参数:
- color_sequence:颜色序列,此项为必填项。
使用举例:
ReduceChannelTransformer
说明:
将C通道缩减为单通道的操作。该transformer主要是针对于C通道,如shape为1*3*224*224 改为1*1*224*224。使用时layout一定要和data_format值对齐,避免造成删错通道。
参数:
- data_format:输入的layout类型,取值范围为["CHW", "HWC"],默认值为"CHW"。
使用举例:
BGR2NV12Transformer
说明:
将输入格式由BGR转成NV12的操作。
参数:
- data_format:输入的layout类型,取值范围为["CHW","HWC"],默认值为"CHW"。
- cvt_mode:cvt模式,取值范围为(rgb_calc,opencv),默认值为rgb_calc。
- rgb_calc,采用mergeUV的方式处理图片;
- opencv,采用opencv的方式处理图片。
使用举例:
RGB2NV12Transformer
说明:
将输入格式由RGB转成NV12的操作。
参数:
- data_format:输入的 layout 类型,取值范围 ["CHW", "HWC"],默认值为"CHW"。
- cvt_mode:cvt模式,取值范围为(rgb_calc,opencv),默认值为rgb_calc。
- rgb_calc,采用mergeUV的方式处理图片;
- opencv,采用opencv的方式处理图片。
使用举例:
NV12ToYUV444Transformer
说明:
将输入格式由NV12转成YUV444的操作。
参数:
- target_size:目标大小,值为元组,如(240,240)。
- yuv444_output_layout:yuv444输出的layout,取值范围为(HWC,CHW),默认值为"HWC"。
使用举例:
WarpAffineTransformer
说明:
用于做图像仿射变换的操作。
参数:
- input_shape:输入的shape值。
- scale:乘以的系数。
使用举例:
F32ToS8Transformer
说明:
用于做输入格式从float32转换为int8的操作。
参数:不涉及。
使用举例:
F32ToU8Transformer
说明:
用于做输入格式从float32转换为uint8的操作。
参数:不涉及。
使用举例:
