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¶
说明:
按照原比例对输入图片进行缩放的操作,新图片的大小与设置的参数有关。操作方式如下:
先以short_size的大小除以原图片的宽和高里最小值,以这个值为缩放比例系数。
当缩放比例系数乘以原图片的宽和高中的最大值,得到的结果大于long_size的数值时,缩放比例系数将变更为long_size除以原图片的宽和高中的最大值。
使用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相关实例模型。
计算方式为:
计算系数,int((float( image_size ) / ( image_size + crop_pad ))。
计算中心size的大小, 系数 * np.minimum( 原始图片的高度, 原始图片的宽度 ))。
根据计算出来的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()