【问题标题】:What is the impact of different JPEG's type on different JPEG decoding sub-process.?不同的JPEG类型对不同的JPEG解码子过程有什么影响?
【发布时间】:2015-06-22 16:19:55
【问题描述】:

众所周知,JPEG解码过程如下图所示:

  • VLD - 可变长度解码,
  • ZZ - 锯齿形扫描,
  • DQ - 去量化,
  • IDCT - 逆离散余弦变换,
  • 颜色转换(YUV 到 RGB)和重新排序。

我的问题是:对于不同JPEG图像的不同字符,上述哪个解码过程会花费更多时间?

例如:

对于这种带噪声的图像的解码,上述五个过程中哪个会花费相对较多的时间?

另一个例子:

对于两个质量不同的相同图像,在解码更高质量的图像时,上述五个过程中的哪个过程会花费更多时间?

【问题讨论】:

  • 对于一个完全 SIMD 优化的 JPEG 编码器或解码器,熵解码/编码是最耗时的部分。表查找和可变长度代码访问无法向量化(使用 SIMD 进行优化),最终花费的时间最多。
  • 再想一想 - 渐进式 JPEG 图像需要更长的时间来编码和解码,因为在生成最终输出之前,必须将整个图像的 MCU 保存在内存中。与基线编码图像相比,它会导致更多的缓存未命中。
  • 目前我只考虑基线 jpeg。我只是想知道在哪个过程中,图像中的噪声会产生最大的影响。
  • 而且,对于不同质量(100%、90%、50% 等)的 jpeg,哪些流程受影响最大?
  • 噪声会产生更多的高频 A/C 系数,这会使文件变大并导致变长码解码阶段花费更长的时间。其他阶段应该不受图像内容的影响。

标签: image jpeg decode decoding noise


【解决方案1】:

JPEG 倾向于随大小线性压缩(按时间)。影响解码时间的主要因素是您使用的是顺序扫描还是逐行扫描。按顺序,每个组件都被处理一次。在渐进式中,每个组件至少有 2 个,可能多达 500 个(但这很荒谬)。

对于您的具体问题:

VLD - 可变长度解码,

这取决于您是执行一次(连续)还是多次(渐进)

ZZ - 锯齿形扫描

很容易做到。数组索引。

DQ - 去量化

取决于你做了多少次。一次为顺序。对于渐进式,可以多次执行(但除非您想在屏幕上连续更新,否则不需要这样做)。

IDCT - 逆离散余弦变换,

这在很大程度上取决于所使用的算法,无论是使用缩放整数还是浮点数,以及是否多次下降(可能(或不可能)使用渐进式 JPEG 完成)

颜色转换(YUV 到 RGB)和重新排序。

您只需执行一次。但是,如果有采样,就会变得更加复杂。

换句话说,无论图像是什么,解码时间都是相同的。但是,解码时间取决于该图像的编码方式。

我可以说较小的文件往往比较大的文件解码得更快,这仅仅是因为读取磁盘的时间。数据越随机,文件往往越大。由于文件大小的原因,读取和显示大的 BMP 文件通常比读取和显示相同图像的 JPEG 文件需要更多时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    相关资源
    最近更新 更多