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

问题描述 投票:11回答:1

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

我尝试在桌面上阅读相同的图像,这是一台运行Windows的x86_64机器。我在一个图像上运行DecodeJpeg方法,默认值为dct_method设置为''INTEGER_FASTINTEGER_ACCURATE

我在arm64设备上做同样的图像。但是,在相同设置下,相同图像的像素值明显不同。

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

如何确保这两个设备的像素值相同?This is the image I have used

更新:在(100,100)的Gimp上,像素值为(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得到的。

android tensorflow arm libjpeg
1个回答
0
投票

tensorflow image decode_jpeg documentation说,我希望你解码jpeg时它可能与某些属性有关。最有可能是channels属性和/或ratio属性和/或fancy_upscaling attr。

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

关于channels

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

可接受的值是:

0: Use the number of channels in the JPEG-encoded image.
1: output a grayscale image.
3: output an RGB image.

关于ratio

attr比允许在解码期间通过整数因子缩小图像。允许的值为:1,2,4和8.这比稍后缩小图像要快得多。

关于fancy_upscaling

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


请注意,您可能还必须明确指定dct_method的值,因为根据documentation,如果您没有指定值,它将使用系统特定的defaut。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.