我在训练模型时使用了Tensorflow的DecodeJpeg
来读取图像。为了在Android设备上使用相同的方法,我使用bazel编译Tensorflow for android DecodeJpeg
。
我尝试在桌面上阅读相同的图片,这是一台运行Windows的x86_64
计算机。我在图片上运行DecodeJpeg
方法,其默认值为dct_method
,设置为''
,INTEGER_FAST
,INTEGER_ACCURATE
。
我在arm64
设备上为同一张图片做了同样的事情。但是,在相同设置下,相同图像的像素值明显不同。
例如,在(100,100,1),桌面上的值为213
,而204
上的值为arm64
。
更新
在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)
也是{。}}。
答案 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库更改为没有该版本的版本 具体选项