首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JPEG编码存储编码数据

JPEG编码存储编码数据
EN

Stack Overflow用户
提问于 2017-03-29 11:51:54
回答 1查看 931关注 0票数 0

我正在实现JPEG编码,并将其写入JFIF容器中。

原始图像(位图):

我的编码JPEG:

使用Gimp编码的JPEG (质量50和基本设置):

我试图找出这个问题,我猜是在编码数据本身,而不是在JFIF头中。

我在编码中完成的步骤(基本概述):

  1. RGB到YCbCr
  2. 在单片机(8x8块)中分割Y、Cb和Cr信息。我没有对Cb和Cr零件做任何次采样,因为我还没有研究这到底是如何工作的。(块=MCU的)
  3. 将DCT应用于Y、Cb和Cr的所有块
  4. Y,Cb和Cr所有块的量子化
  5. 矢量化(1x64阵列) Y,Cb和Cr (Zag)的所有块
  6. 将DPCM (DC)和RLE (AC)应用于所有Y、Cb和Cr块。
  7. 做霍夫曼魔术,保存数据。

在最后一步(7)中,我将Y、Cb和Cr块处理如下:

  1. 工艺8x8 Y块1
  2. Cb工艺8x8块1
  3. 工艺8x8铬块1
  4. 工艺8x8 Y区块2
  5. 工艺8x8 Cb第2块
  6. 工艺8x8铬块2
  7. 工艺8x8 Y块3
  8. ..。

所以我的数据目前存储为Y Cb Cr Y Cb .是对的吗?

或Y、Cb和Cr的数据应按以下方式处理:

代码语言:javascript
运行
复制
Y Y Y Y ... Yn  Cb Cb Cb .... Cbn  Cr Cr Cr Cr .... Crn

我的问题(我猜错误在于数据的编码):

如何存储编码数据本身?

试图找出为什么我的JPEG编码输出更大,而且显示不正确。欢迎任何帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-13 10:41:04

当我从零开始用C编写JPEG编码器时,我也遇到了类似的问题,所以我使用bmptoppm将BMP转换成JPG,并使用这个JPG图像作为参考。打开引用图像和不正确的结果图像(将reference.jpg.hexmyImage.jpg.hex)附加到文件名中,例如文本编辑器中的.hex和.hex)。首先,确保两个JPG文件的头是相同的。然后导航到编码的数据。找出差异在哪里,从哪个8×8像素块中派生出差异。现在查看块,找出哪个编码步骤是不正确的。

我的问题是赫夫曼的桌子上有一个错误的值。所以,当我第一次尝试对左边的图像进行编码时,我得到了右边的那个。我的编码器只用于灰度,所以我不确定Y,Cb和Cr的顺序。

希望您能够通过遵循以下步骤来修复错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43092725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档