Tensorflow:DecodeJpeg方法为桌面和移动设备提供相同图像的不同像素值

dpk*_*dpk 11 android arm libjpeg tensorflow

DecodeJpeg在训练模型时使用了Tensorflow 来读取图像.为了在Android设备上使用相同的方法,我使用bazel for android编译了Tensorflow DecodeJpeg.

我尝试在桌面上读取相同的图像,这是一x86_64台运行Windows 的机器.我跑了DecodeJpeg与默认值的图像的方法dct_method设置为'',INTEGER_FAST,INTEGER_ACCURATE.

arm64对于相同的图像,我在设备上做了同样的事情.但是,在相同设置下,相同图像的像素值明显不同.

例如,在(100,100,1)桌面上的值是213,而它是204打开的arm64.

如何确保这两个设备的像素值相同?这是我用过的图像

更新: 在Gimp上(100,100)的像素值是(179,203,190)

对于dct_method设置为INTEGER_FAST,(100,100)x86_64 (171, 213, 165)上的值是,它是在臂上(180, 204, 191)

对于dct_method设置为INTEGER_ACCURATE,(100,100)x86_64 (170, 212, 164)上的值是,它是在臂上(179, 203, 190)

它是(170, 212, 164)PIL,这是我用得cv2.imread也.

A S*_*ANI 0

根据tensorflow图像decode_jpeg文档, 我希望在解码jpeg时它可能与某些属性相关。最有可能的是channels属性和/或ratio属性和/或fancy_upscalingattr。

它们都可以改变像素的值......

关于channels

attr 通道指示解码图像所需的颜色通道数。

接受的值为:

0: Use the number of channels in the JPEG-encoded image.
1: output a grayscale image.
3: output an RGB image.
Run Code Online (Sandbox Code Playgroud)

关于ratio

attr 比率允许在解码期间将图像缩小整数倍。允许的值为 1、2、4 和 8。这比稍后缩小图像要快得多。

关于fancy_upscaling

fancy_upscaling:可选布尔值。默认为 True。如果为 true,则使用较慢但更好的色度平面升级(仅限 yuv420/422)。


请注意,您可能还必须显式指定 的值,dct_method因为根据文档,如果您不指定值,它将使用系统特定的默认值

在我看来,它(dct_method empty arg)是最可能的原因,它解释了为什么在 x86_64 和 ARM 上没有相同的结果。

内部 jpeg 库更改为没有该特定选项的版本