如何解决Tensorflow 和 skimage 之间的像素值差异
如果我用 skimage.io.imread(image)
和 tf.image.decode_image(image)
打开图像,为什么像素值之间存在差异?
例如:
import skimage.io
original_img = skimage.io.imread("test.jpg")
print(original_img.shape)
print(np.amax(original_img))
print(original_img)
输出为:
(110,150,3)
255
array([[[ 29,65,117],[ 45,43,90],[ 78,39,68],...,[ 30,46,95],96],[ 31,44,97]],[[ 41,54,89],[ 95,89,123],[ 57,65],[ 32,91],45,[[ 62,49,69],[ 84,76,97],[ 68,70,[ 18,30,70],[ 35,47,[ 34,99]],[[136,124,22],[144,136,53],[134,123,44],[ 16,74,16],[ 39,52],[ 53,108,69]],[[161,125,5],[149,129,42],[129,116,48],[ 67,119,73],80,[ 33,69,41]],[[196,127,6],[160,111,32],[141,55],[ 26,56,[ 8,29,10],[ 12,24,12]]],dtype=uint8)
如果我用 Tensorflow
打开同一张图片:
import tensorflow as tf
original_img = tf.image.decode_image(tf.io.read_file("test.jpg"))
print(np.amax(original_img))
print(original_img)
输出为:
255
<tf.Tensor: shape=(110,3),dtype=uint8,numpy=
array([[[ 44,57,101],[ 40,42,80],[ 65,41,[ 25,88],100],92]],[[ 47,53,[ 96,95,127],[ 60,[ 29,103],[ 19,35,84]],[[ 59,74],[ 72,[ 70,[ 23,77],[ 50,64,111]],[[145,24],[161,131,43],113,30],67,19],[ 49,58],97,64]],[[164,[166,28],[143,27],[ 73,68,37],75,47]],[[182,128,20],112,14],[ 11,21],[ 7,13],[ 0,14,0]]],dtype=uint8)>
我还注意到,如果我用 tensorflow
打开一个图像,对该图像进行一些更改,将图像保存在磁盘上,然后用 tf.image.decode_image(image)
再次打开它,像素值再次不同,但这一次,没有那么多。
解决方法
这是由于用于解压缩的算法。默认情况下,使用系统特定的方法。 tf.image.decode_image()
不提供任何更改方法的可能性。
在 tf.image.decode_jpeg()
中有 dct_method
参数,可用于更改解压缩方法。目前可以设置两个有效值:INTEGER_FAST
和 INTEGER_ACCURATE
。
如果您以下列方式打开图像,您应该获得与 skimage.io.imread(image)
相同的输出:
original_img = tf.image.decode_jpeg(tf.io.read_file("test.jpg"),dct_method="INTEGER_ACCURATE")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。