將 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。