gpt4 book ai didi

android - JPEG 图像在多个设备上具有不同的像素值

转载 作者:IT王子 更新时间:2023-10-28 23:31:14 26 4
gpt4 key购买 nike

我注意到,在跨设备读取 JPEG 格式的相同照片时,像素值不匹配。它们很接近,但又不同。转换为 PNG 文件时,像素值似乎匹配。

这似乎是由于跨设备的(非)压缩算法造成的。无论如何,这就是我想到的。有没有办法读取 JPEG 文件,以便跨设备从照片中检索相同的像素?我在 BitmapFactory 选项组件中看不到选项。

当前在跨设备处理图像的像素值时应用以下内容来保持大小:

Options options = new Options();
options.inScaled = false;
options.inPreferQualityOverSpeed = true;

目前将像素与以下像素进行比较只是为了查看一些(接近匹配,但不相等):

int[] pixels = new int[bitmapF.getWidth() * bitmapF.getHeight()];
bitmapF.getPixels(pixels, 0, bitmapF.getWidth(), 0, 0, bitmapF.getWidth(), bitmapF.getHeight());
Log.d("pixel entries", "pixels = " + pixels[233] + " - " + pixels[4002] + " - " + pixels[11391]);

注意:如果读取同一个未压缩文件的 PNG 版本,则值与预期相同。

例如,三星 Galaxy S4 和三星 Galaxy S5 甚至在 assets 文件夹中存储了来自相同 jpeg(运行相同测试 Activity )的不同像素。

pixel[233] 例如在 s5 上为 -5205635,但在 s4 上为 -5336451。像素[4002] 也有点偏离。但是在这张 jpeg 图片上,两个设备的像素 [11391] 是相等的。

最佳答案

JPEG 标准不要求解码器实现产生逐位相同的输出图像。不幸的是,指定解码器要求的标准文档 ISO 10918-2 , 显然不是在线免费提供的,而是 Wikipedia says :

...the JPEG standard (and the similar MPEG standards) includes some precision requirements for the decoding, including all parts of the decoding process (variable length decoding, inverse DCT, dequantization, renormalization of outputs); the output from the reference algorithm must not exceed:

  • a maximum 1 bit of difference for each pixel component
  • low mean square error over each 8×8-pixel block
  • [etc.]

使用相同输入的不同解码器输出之间的差异通常是由于内部精度水平不同,尤其是在执行 IDCT 时。另一个可能的差异来源是平滑,它试图减少“ block 状”伪影。

和你一样,我希望设置 inPreferQualityOverSpeed 会产生相同的输出,但实际上并不能保证这一点。我至少可以想到几种方法可以让您在两部不同的手机上获得细微的变化:

  1. 手机可能运行不同版本的 Android,其中 BitmapFactory 的实现发生了变化(例如,可能 inPreferQualityOverSpeed 被破坏然后修复,反之亦然),或者
  2. 手机可能会提供 BitmapFactory 所利用的不同硬件功能(例如矢量指令集、DSP 协处理器等)。即使是标量浮点单元的差异也可能导致差异,尤其是在生成实际机器指令的 JIT 编译时。

鉴于标准中的回旋余地以及您的实验观察,看来保证位对位一致的唯一方法是在您自己的应用程序中执行解码。也许您可以找到一些替代的 Android 兼容库。

关于android - JPEG 图像在多个设备上具有不同的像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23565889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com