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

时间:2018-04-10 08:29:34

标签: android tensorflow arm libjpeg

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

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

我在arm64设备上为同一张图片做了同样的事情。但是,在相同设置下,相同图像的像素值明显不同。

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

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

更新 在Gimp (100,100)处,像素值为(179,203,190)

对于设置为dct_method的{​​{1}},x86_64上INTEGER_FAST的值为(100,100),其为(171, 213, 165)

对于设置为(180, 204, 191)的{​​{1}},x86_64上dct_method的值为INTEGER_ACCURATE,其为(100,100)

(170, 212, 164) (179, 203, 190)(170, 212, 164)也是{。}}。

1 个答案:

答案 0 :(得分: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。如果为true,则使用较慢但更好的色度平面升级(仅限yuv420 / 422)。

请注意,您可能还有明确指定dct_method 的值,因为根据documentation,如果您未指定值,则会使用< strong>系统特定的defaut 。

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

  

内部jpeg库更改为没有该版本的版本   具体选项