我正在将嵌入式设备与相机模块连接,每次触发它时都会返回一个jpeg压缩帧。
我想连续三次拍摄(每1/4秒约1帧)并进一步将图像压缩成单个文件。这里的假设是存在大量的时间冗余,因此在三个帧中有更多的压缩空间(与发送三个单独的jpeg图像相比)。
我将在C语言的嵌入式设备上实现该解决方案,没有任何库,也没有操作系统。
相机将在一个移动很少的区域拍摄照片(背景中没有访客或屏幕,也许是树枝摇曳的树枝),所以我认为我对冗余的假设非常可靠。
当文件最终在PC / mac上查看时,我不介意写一些东西来提取三个框架(所以它可能是一个非标准的cluge)
所以我猜实际的问题是:将这三个图像压缩在一起的最佳方法是什么,因为它们已经是JPEG格式(可能会转换回原始图像)图像,但如果我没有...)
答案 0 :(得分:1)
JPEG图像上的任何解码/修改/重新编码都可能降低图像质量,但由于您的相机只能捕获JPEG,我猜测最终图像质量不太可能成为关键要求......
我想不出一种在JPEG频域中可以做到这一点的简单方法,但是你可以解压缩SUBTRACT images 2 and 3 from image 1 to get delta images。这些应该压缩得更好,并且会被接收器添加回图像#1。
事实证明some operations you can do in the compressed domain可能有所帮助。您需要解压缩jpeg的Huffman / RLE阶段,然后直接处理DCT系数。你可以用这种方式进行图像减法,它不应该引入更多的文物。
答案 1 :(得分:1)
我将此作为第二个答案添加,因为它与我的第一个答案非常不同,因为我更了解您的问题。
我发现你很可能不能直接使用jpeg文件。在压缩文件中,一小段更改往往会传播到文件的大部分区域,导致两个文件在许多地方无法进行比较。
我有两个建议。
1:将图像压缩起来。看起来太简单了,你可能已经想到了它,但是zip协议是众所周知的并且是免费提供的,它将自动利用它可以的任何相似性。再拿一个相机拍三张照片;拉上它们,看看它是怎么回事。
2:稍微复杂但是你可以将三个jpegs解压缩成bmps,连接bmps(将它们一个接一个地排列)然后重新压缩到一个jpeg。 jpeg协议应该充分利用三个图像中的相似性,从您的角度来看,工作非常少。
答案 2 :(得分:0)
虽然我从大学开始就没有学过信号,但我认为你正在寻找一种无损视频编解码器。
Huffyuv已经存在,并且可以使用源代码。基本概念是预测每个帧之间的像素变化,并编码(和压缩)预测变化和实际变化之间的差异。
Lagarith是另一个开源编解码器。
您需要将解码后的JPEG帧提供给每个编解码器。
答案 3 :(得分:0)
如果我是你,我现在就用你的系统手工制作三张照片,这样你就可以在进一步研究之前检查一下你的假设。
我的猜测是,即使你不打算任何动作,你也需要轻微翻译。设备的振动,风,甚至是热膨胀都可能足以让你失去一两个像素,这会破坏像素到像素的直接压缩。
其他因素可能是由于云穿过太阳或从地面飘散的热量放大或甚至是jpeg压缩伪影而导致的光线变化。
我不是说它不会起作用,只是我先用手动一个。
存储非常便宜,您可以通过在相机中添加更大的SIM卡(或其他任何东西)来获得更大的收益。