我发现的有关JPEG标准的所有信息都指定数据单位应该是8x8,所以我想知道如果给定图片的尺寸不是8的倍数,应该怎么做。
以512x512灰度图像为例:如果我将其裁剪为508x508(以便从顶部和左侧移除像素),我将有16个系数无法整齐地放入8x8数据单元中。我想我必须引入一些包含来自原始图像的系数的数据单元以及一些填充0,然后信任另一端的解码器依赖于更新的头信息,以便不显示那些0。我是对的,还是我完全以错误的方式看待这个?
如果我想裁剪使用比如4:2:0色度子采样的彩色图片,会发生什么?将它“上采样”到4:4:4是否有意义,进行裁剪,添加那些填充0,然后再将其降低到4:2:0,基本上允许填充0s对其产生影响图像的右边界和底边边界的实际外观?或者在那种情况下,我最好使用某种平均值作为填充物吗?
谢谢!
答案 0 :(得分:2)
JPEG规范很清楚,即使图像尺寸不是MCU尺寸的精确倍数,也必须对完整的MCU(最小编码单位)进行编码。未使用的像素应设置为0或DC值,以最大限度地减少输出中的浪费位。如果您正在裁剪编码数据,则由于颜色子采样,不需要对其进行解码/解采和重新采样/重新编码。这篇文章有关于这个主题的更多细节:
http://www.impulseadventure.com/photo/jpeg-minimum-coded-unit.html
裁剪子采样图像时,适用相同的规则。部分颜色和亮度块的处理方式应与非子采样图像的处理方式相同。