2

我将嵌入式设备与相机模块连接起来,每次触发它时都会返回一个 jpeg 压缩帧。

我想连续拍摄三张照片(大约每 1/4 秒 1 帧),然后将图像进一步压缩成一个文件。这里的假设是有很多时间冗余,因此有很多空间可以在三个帧之间进行更多压缩(与发送三个单独的 jpeg 图像相比)。

我将在没有任何库和操作系统的 C 嵌入式设备上实现该解决方案。

相机将在一个几乎没有移动的区域拍照(背景中没有访客或屏幕,可能是一棵摇曳的树枝),所以我认为我关于冗余的假设非常可靠。

当最终在 pc/mac 上查看文件时,我不介意写一些东西来提取三个帧(所以它可能是一个非标准的线索)

所以我想实际的问题是:考虑到它们已经是JPEG格式,将这三个图像压缩在一起的最佳方法是什么(有可能转换回原始图像,但如果我也没有.. .)

4

4 回答 4

1

JPEG 图像上的任何解码/修改/重新编码都可能会降低图像质量,但由于您的相机只能捕获 JPEG,我猜最终的图像质量不太可能成为关键要求......

我想不出一种简单的方法可以在 JPEG 频域中执行此操作,但是您可以解压缩然后从图像 1 中减去图像 2 和 3 以获得 delta images。这些应该压缩得更好,并且会被接收器添加回图像#1。

事实证明,您可以在压缩域中执行一些可能会有所帮助的操作。您需要解压缩 jpeg 的 Huffman/RLE 阶段,然后直接处理 DCT 系数。您可以通过这种方式进行图像减法,并且它不应该引入更多的人工制品。

于 2010-04-27T20:37:17.893 回答
1

我将其添加为第二个答案,因为它与我的第一个答案非常不同,因为我更好地理解了您的问题。

我发现您不太可能直接使用 jpeg 文件。在压缩文件中,小的变化往往会传播到文件的大部分,导致两个文件在许多地方无法进行比较。

我有两个建议。

1:压缩图片。看起来太简单了,你可能已经想到了,但是 zip 协议是众所周知的并且可以免费获得,并且会自动利用它可以使用的任何相似之处。再次只需用相机拍三张照片;把它们拉上拉链,看看情况如何。

2:稍微复杂一点,但您可以将三个 jpeg 解压缩为 bmp,连接 bmp(一个接一个地排列)然后重新压缩为 jpeg。jpeg 协议应该充分利用三个图像的相似性,并且从您的角度来看,工作量非常小。

于 2010-04-27T23:33:05.143 回答
0

如果我是你,我现在会使用你的系统手动拍摄三张照片,这样你就可以在更进一步之前检查你的假设。

我的猜测是,即使您不打算进行任何移动,您也需要进行轻微的翻译。设备的振动、风甚至热膨胀可能足以让您偏离一两个像素,这会破坏直接的像素到像素压缩。

其他因素可能是由于穿过太阳的云或从地面飘出的热放大甚至 jpeg 压缩伪影导致的光变化。

我并不是说它不起作用,只是我会先手动运行一个。

存储是如此便宜,通过在相机中添加更大的 SIM 卡(或其他),您将获得更多的收益。

于 2010-04-27T20:31:25.573 回答
0

虽然自大学以来我没有研究过信号,但我认为您正在寻找无损视频编解码器。

Huffyuv已经存在,并且有可用的源代码。基本概念是预测每帧之间的像素变化,并对预测和实际变化之间的差异进行编码(和压缩)。

Lagarith是另一个开源编解码器。

您需要将解码后的 JPEG 帧输入到每个编解码器中。

于 2010-04-27T20:12:00.067 回答