Encoding 使用不完全MCU填充方法的JPEG

Encoding 使用不完全MCU填充方法的JPEG,encoding,jpeg,Encoding,Jpeg,根据这个话题的评论,我提出了一个问题,因为它还不清楚 我有一个9px(宽)x17px(高)RGB的位图。 目标是在垂直方向上使用减半色度子采样将其编码为jpeg,质量默认值(50)使用3个组件 对于垂直方向的减半色度子采样,我应该使用8x16(宽x高)的MCU 我要做的步骤: 将RGB转换为YCbCr图像(3个分量:Y、Cb、Cr) 做2分钟。Y、Cb和Cr组件的阵列更大,所以我可以创建完整的8x16 MCU块 在8x16的MCU块中拆分-->获取Y0Y1CbCr 8x8块 使用Y0Y1CbCr

根据这个话题的评论,我提出了一个问题,因为它还不清楚

我有一个9px(宽)x17px(高)RGB的位图。 目标是在垂直方向上使用减半色度子采样将其编码为jpeg,质量默认值(50)使用3个组件

对于垂直方向的减半色度子采样,我应该使用8x16(宽x高)的MCU

我要做的步骤:

  • 将RGB转换为YCbCr图像(3个分量:Y、Cb、Cr)
  • 做2分钟。Y、Cb和Cr组件的阵列更大,所以我可以创建完整的8x16 MCU块
  • 在8x16的MCU块中拆分-->获取Y0Y1CbCr 8x8块
  • 使用Y0Y1CbCr 8x8块进行DCT
  • 在第2步中,我将为Y,Cb和Cr设置一个2dim。数组大小为[17,9]。 我计算了我应该添加多少行和列以获得8x16的完整MCU块,因此我使用较小数组的原始值创建了一个大小为[32,16]的新数组

    现在的问题是:我如何填充额外的值,因为新数组更大

  • 用零填充(0)
  • 填充一个(1个)
  • 用最后一行和最后一列填充?(第一排焊盘还是第一列?)
  • 用另一个值填充
  • 原始位图:

    结果填充为零:

    结果填充为1:

    如您所见,使用0或1填充时,结果在底部显示绿色


    欢迎提供任何建议。

    您在原始列表的第2步有点偏离了轨道。DCT处理不应有大于8x8的阵列。您需要将原始图像分为Y0、Y1、Cb、Cr的8x8块(四个唯一的8x8块)。从源图像中提取像素数据以填充这些块时,将填充缺失的像素(如果需要)。然后分别进行DCT变换,锯齿和哈夫曼编码。我没有使DCT大于8x8。如果我的映像是9x17 px,那么我的Y、Cb、Cr是一个9x17的数组。因此,我将这个数组变大(用一个值填充),并取8x8值(或其他值,具体取决于采样率)。那应该会得到同样的结果不?我发现不那样做比较容易。在我的编码器中,我同时进行颜色转换和二次采样,并将结果写入准备就绪的8x8 DCT块中。你的想法会更慢(写入/读取额外的临时数据),更难扩展到所有情况。填充MCU的常用方法是复制最后一行和最后一列。