将 image
转换为 dtype
,如果需要,缩放其值。
用法
tf.image.convert_image_dtype(
image, dtype, saturate=False, name=None
)
参数
-
image
一个图像。 -
dtype
一个DType
将image
转换为。 -
saturate
如果True
,请在投射之前剪辑输入(如有必要)。 -
name
此操作的名称(可选)。
返回
-
image
,转换为dtype
。
抛出
-
AttributeError
当 dtype 既不是浮点数也不是整数时引发属性错误
该操作支持 uint8
, uint16
, uint32
, uint64
, int8
, int16
, int32
, int64
, float16
, float32
, float64
, bfloat16
的数据类型(对于 image
和 dtype
)。
使用浮点值表示的图像应具有 [0,1) 范围内的值。存储在整数数据类型中的图像数据的值应在 [0,MAX]
范围内,其中 MAX
是数据类型的最大正数。
此操作在数据类型之间转换,在转换之前适当地缩放值。
使用示例:
x = [[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [10, 11, 12]]]
x_int8 = tf.convert_to_tensor(x, dtype=tf.int8)
tf.image.convert_image_dtype(x_int8, dtype=tf.float16, saturate=False)
<tf.Tensor:shape=(2, 2, 3), dtype=float16, numpy=
array([[[0.00787, 0.01575, 0.02362],
[0.0315 , 0.03937, 0.04724]],
[[0.0551 , 0.063 , 0.07086],
[0.07874, 0.0866 , 0.0945 ]]], dtype=float16)>
将整数类型转换为浮点类型会返回 [0, 1) 范围内的归一化浮点值;这些值由输入 dtype 的 MAX
值标准化。考虑以下两个示例:
a = [[[1], [2]], [[3], [4]]]
a_int8 = tf.convert_to_tensor(a, dtype=tf.int8)
tf.image.convert_image_dtype(a_int8, dtype=tf.float32)
<tf.Tensor:shape=(2, 2, 1), dtype=float32, numpy=
array([[[0.00787402],
[0.01574803]],
[[0.02362205],
[0.03149606]]], dtype=float32)>
a_int32 = tf.convert_to_tensor(a, dtype=tf.int32)
tf.image.convert_image_dtype(a_int32, dtype=tf.float32)
<tf.Tensor:shape=(2, 2, 1), dtype=float32, numpy=
array([[[4.6566129e-10],
[9.3132257e-10]],
[[1.3969839e-09],
[1.8626451e-09]]], dtype=float32)>
尽管具有相同的 a
值和 float32
的输出 dtype ,但由于输入 dtype 不同( int8
与 int32
),输出有所不同。这又是因为这些值是由输入 dtype 的 MAX
值规范化的。
请注意,将浮点值转换为整数类型可能会丢失精度。在下面的示例中,dtype float32
的图像张量 b
被转换为 int8
并返回到 float32
。然而,由于精度损失,最终输出与原始输入b
不同。
b = [[[0.12], [0.34]], [[0.56], [0.78]]]
b_float32 = tf.convert_to_tensor(b, dtype=tf.float32)
b_int8 = tf.image.convert_image_dtype(b_float32, dtype=tf.int8)
tf.image.convert_image_dtype(b_int8, dtype=tf.float32)
<tf.Tensor:shape=(2, 2, 1), dtype=float32, numpy=
array([[[0.11811024],
[0.33858266]],
[[0.5590551 ],
[0.77952754]]], dtype=float32)>
从整数类型(输入 dtype)放大到另一个整数类型(输出 dtype)不会将输入 dtype 的 MAX
映射到输出 dtype 的 MAX
但来回转换应该不会导致任何变化。例如,如下所示,int8 (=127) 的 MAX
值未映射到 int16 (=32,767) 的 MAX
值,但是当按比例缩小时,我们得到相同的原始值 c
.
c = [[[1], [2]], [[127], [127]]]
c_int8 = tf.convert_to_tensor(c, dtype=tf.int8)
c_int16 = tf.image.convert_image_dtype(c_int8, dtype=tf.int16)
print(c_int16)
tf.Tensor(
[[[ 256]
[ 512]]
[[32512]
[32512]]], shape=(2, 2, 1), dtype=int16)
c_int8_back = tf.image.convert_image_dtype(c_int16, dtype=tf.int8)
print(c_int8_back)
tf.Tensor(
[[[ 1]
[ 2]]
[[127]
[127]]], shape=(2, 2, 1), dtype=int8)
从整数类型缩小到另一种整数类型可能是有损转换。请注意,在下面的示例中,将 int16
转换为 uint8
并返回到 int16
会丢失精度。
d = [[[1000], [2000]], [[3000], [4000]]]
d_int16 = tf.convert_to_tensor(d, dtype=tf.int16)
d_uint8 = tf.image.convert_image_dtype(d_int16, dtype=tf.uint8)
d_int16_back = tf.image.convert_image_dtype(d_uint8, dtype=tf.int16)
print(d_int16_back)
tf.Tensor(
[[[ 896]
[1920]]
[[2944]
[3968]]], shape=(2, 2, 1), dtype=int16)
请注意,从浮点输入转换为整数类型可能会导致上溢/下溢问题。将 saturate 设置为 True
以避免在有问题的转换中出现此类问题。如果启用,饱和将在执行潜在危险转换之前将输出剪辑到允许的范围内(并且仅在执行此类转换之前,即从浮点类型转换为整数类型时,以及从有符号类型转换为无符号类型时; saturate
对浮点数之间的强制转换或增加类型范围的强制转换没有影响)。
相关用法
- Python tf.image.crop_to_bounding_box用法及代码示例
- Python tf.image.crop_and_resize用法及代码示例
- Python tf.image.central_crop用法及代码示例
- Python tf.image.random_brightness用法及代码示例
- Python tf.image.pad_to_bounding_box用法及代码示例
- Python tf.image.adjust_hue用法及代码示例
- Python tf.image.random_contrast用法及代码示例
- Python tf.image.rot90用法及代码示例
- Python tf.image.random_hue用法及代码示例
- Python tf.image.flip_left_right用法及代码示例
- Python tf.image.stateless_random_flip_up_down用法及代码示例
- Python tf.image.random_saturation用法及代码示例
- Python tf.image.extract_glimpse用法及代码示例
- Python tf.image.flip_up_down用法及代码示例
- Python tf.image.stateless_random_jpeg_quality用法及代码示例
- Python tf.image.psnr用法及代码示例
- Python tf.image.stateless_random_hue用法及代码示例
- Python tf.image.rgb_to_yiq用法及代码示例
- Python tf.image.stateless_random_crop用法及代码示例
- Python tf.image.resize_with_crop_or_pad用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.image.convert_image_dtype。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。