Python tf.image.convert\u image\u数据类型有错误?不可缩放的值

Python tf.image.convert\u image\u数据类型有错误?不可缩放的值,python,image,tensorflow,machine-learning,Python,Image,Tensorflow,Machine Learning,我正在使用Tensorflow的image.convert\u image\u dtype 将数据类型为uint16的png转换为float32 使用Tensorflow 1.12.0 根据文件: 使用浮点值表示的图像的值应在[0,1]范围内。存储在整数数据类型中的图像数据的值应在[0,MAX]范围内,其中MAX是数据类型的最大可表示正数。 此操作在数据类型之间进行转换,在强制转换之前适当缩放值 对于浮点转换,这应该将我的值放在[0,1]中,但在计算新的float32张量时,我的白色像素接近65

我正在使用Tensorflow的image.convert\u image\u dtype 将数据类型为uint16的png转换为float32

使用Tensorflow 1.12.0

根据文件: 使用浮点值表示的图像的值应在[0,1]范围内。存储在整数数据类型中的图像数据的值应在[0,MAX]范围内,其中MAX是数据类型的最大可表示正数。 此操作在数据类型之间进行转换,在强制转换之前适当缩放值

对于浮点转换,这应该将我的值放在[0,1]中,但在计算新的float32张量时,我的白色像素接近65535-uint16的最大值。似乎没有发生任何排序的向上或向下缩放

我是否执行了错误的操作?是否应该将元素除以65535以获得格式正确的浮点张量?

我发现了问题所在。 在类型转换之前使用resize会更改张量类型,因此Tensorflow无法正确进行缩放

我使用的是:

#CAUSES SCALING ISSUE
file1 = tf.read_file("my_filename_here.png")
img = tf.image.decode_png(file1, channels=1, dtype=tf.uint16)
sizedImage = tf.image.resize_images(img, shape, shape)
finalimg = tf.convert_image_dtype(sizedImage, tf.float32)
这导致没有缩放。通过在解码后直接进行转换修复

#CORRECT
file1 = tf.read_file("my_filename_here.png")
img = tf.image.decode_png(file1, channels=1, dtype=tf.uint16)
img = tf.convert_image_dtype(img, tf.float32)
finalImage = tf.image.resize_images(img, shape, shape)

我原以为在转换之前缩小尺寸可以提高转换效率,但这就打破了它。总之:解码后直接转换图像\u数据类型。

在解码图像时指定数据类型,否则tensorflow autograph为您指定数据类型,这会导致调整大小功能出现问题

因此,在您的情况下,数据类型规范是

img = tf.image.decode_png(file1, channels=1, dtype=tf.float32)

此外,resize确实会返回数据类型为float32的图像,因此在使用resize后必须将其再次转换到uint,而不是转换(如果之前已转换)。因此,更好的是,正确的顺序是解码、调整大小、转换。

请将代码添加到您的问题中?