我对jpeg编码算法有疑问。 我有一个图像的3个输入平面数据:Y,Cb,Cr。我想将其编码为JPEG图像。 我的问题是可以将这些Y,Cb,Cr平面数据的前1/3传递给jpeg编码器,得到JPEG图像的前1/3。然后继续第二个1/3并获得66%的JPEG图像,最后输入1/3的其余部分并获得完整的JPEG图像?
谢谢。
答案 0 :(得分:0)
目前尚不清楚你要做什么?您是否尝试单独编码每个组件?
可以这样做,具体取决于您的软件。 JPEG无视被压缩的内容。它无法告知来自CB的Y,来自B.问题是您的软件是否允许它。
每种颜色都被编码为单独的扫描。如果解析压缩的JPEG文件,则可以轻松地分离每个颜色分量的扫描。
你可以这样做的方法是尝试伪造编码器,将每个组件分别压缩为灰度图像。
如果您一次尝试拍摄1/3的图像,则必须自行打破图像。
您可能还想查看渐进式JPEG。
答案 1 :(得分:0)
您要求做的事情在技术上是可行的,但有一些条件需要满足。典型的JPEG编码器将操作视为" atomic",这意味着您不能要求它生成有效的JPEG文件,而是稍后再次调用它,并将更多数据添加到原始文件中。这就是我们所需要的:
1)您的图像分割在垂直方向上每个都需要是MCU大小的倍数(例如,根据颜色子采样模式可以被8或16整除)。
2)您需要重新启动标记,这些标记会在每个图像边界处重置。这将允许每个部分的输出以字节边界结束。
3)您需要使用您可以控制的JPEG编码器。它每次都需要使用相同的Huffman表(固定表,不是动态生成的)。
主要思想是你需要为第一部分创建一个普通的JPEG文件,然后通过重新使用标题并调整图像高度将其与新部分合并,然后将新的压缩数据部分附加到结束了。
我肯定地说这可以实现,因为我已经从头开始编写自己的JPEG编解码器,我知道我的代码能够实现这一点。
答案 2 :(得分:0)
JPEG不要求您在"标题"中指定图像的高度。实际上,它允许您在"标题中指定高度为零#34;如果您在DNL标记的末尾标记。 DNL代表Define-Number-of-Lines。这是标准中添加的功能,用于支持JPEG压缩手持扫描仪输出等内容。因此,使用此格式,您可以创建由前1/3组成的有效JPEG文件。添加第二个1/3。首先删除旧的DNL标记,添加新的熵数据,然后在DNL标记上标记更新的行数。如果您的软件支持它,则相当简单。
最简单的方法是使用重启标记,以便在1/3的图像之后有这样的标记。否则你将不得不从每1/3到下一个保留一些信息。