Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 动态无损图像压缩_Image Processing_Embedded_Compression_Image Compression - Fatal编程技术网

Image processing 动态无损图像压缩

Image processing 动态无损图像压缩,image-processing,embedded,compression,image-compression,Image Processing,Embedded,Compression,Image Compression,我有一个嵌入式应用程序,其中一个图像扫描仪发送一个16位像素流,这些像素随后被组装成灰度图像。由于我需要在本地保存此数据并将其转发到网络接口,因此我希望压缩数据流以减少所需的存储空间和网络带宽 有没有一个简单的算法可以用来无损压缩像素数据 我首先想到的是计算两个连续像素之间的差值,然后用哈夫曼码对这个差值进行编码。不幸的是,像素是无符号的16位数量,因此差异可能在-65535.范围内的任何地方+65535,这可能导致巨大的码字长度。如果一行出现几个很长的码字,我将遇到缓冲区溢出问题 更新:我的平

我有一个嵌入式应用程序,其中一个图像扫描仪发送一个16位像素流,这些像素随后被组装成灰度图像。由于我需要在本地保存此数据并将其转发到网络接口,因此我希望压缩数据流以减少所需的存储空间和网络带宽

有没有一个简单的算法可以用来无损压缩像素数据

我首先想到的是计算两个连续像素之间的差值,然后用哈夫曼码对这个差值进行编码。不幸的是,像素是无符号的16位数量,因此差异可能在-65535.范围内的任何地方+65535,这可能导致巨大的码字长度。如果一行出现几个很长的码字,我将遇到缓冲区溢出问题


更新:我的平台是FPGA

嵌入式平台上有多少可用资源


你能移植并进行gzip压缩吗?即使资源有限,您也应该能够移植这样的东西。

使用标准工具以标准格式提供免费、开源、无损图像压缩。PNG使用
zlib
作为压缩的一部分。还有一个
libpng
。除非您的平台非常不寻常,否则将此代码移植到该平台应该不难。

有多种图像压缩库可用。例如,只列出PNG图像的库/工具包。哪种格式/库最适合您将最有可能取决于您所处的特定资源限制(特别是,您的嵌入式系统是否可以执行浮点运算)。

无损压缩的目标是能够根据以前的像素预测下一个像素,然后对预测值和像素实际值之间的差异进行编码。这是您最初想做的,但您只使用了前一个像素,并预测下一个像素将是相同的

请记住,如果您拥有所有之前的像素,则您拥有的相关信息比之前的像素更多。也就是说,如果您试图预测X的值,则应使用O像素:

…噢…
…牛

此外,在以下情况下,您不希望使用流中的前一个像素B来预测X:


OO…B您需要多大程度的“无损”?
如果这是一个真正的扫描仪,那么带宽/分辨率有一个限制,因此即使它可以发送+/-64K值,相邻像素之间的差值超过8位也可能是非物理的

在这种情况下,您可以为每一行计算起始像素值,然后计算每个像素之间的差异


这将抹去峰值,但可能任何超过“N”位的峰值都是噪声。

一个好的LZ77/RLE混合型,带有铃铛和wwhistles,可以得到非常好的压缩,解压速度相当快。由于缺少库开销,它们还将更大、更坏地压缩较小的文件。对于一个好的,但GPLd的实现,检查一下JPG是否更适合灰度扫描?@Matthew,标题是“无损”。JPEG有一种非标准无损模式,但我认为更好的选择是PNG。另外,使用适当的PNG过滤器,因为LZ/Huffman不利用二维预测压缩。此外,允许设备最终用户选择每个样本减少的位数,因为最低有效位不是真正可压缩的,并且会显著增加数据大小。在硬件/协议级别上,只需在源代码中将不需要的位归零即可提高压缩性。谢谢您的建议。基于词典的方法,如您建议的方法,似乎比哈夫曼编码更适合这项任务。关于资源,我想在FPGA上实现这一点。我没有处理器。这是一个有趣的观察结果,但不幸的是,我对图像生成物理(这是电子显微镜)知之甚少,无法对相邻像素之间的差异做出假设。我也有同样的问题,不是在FPGA上,而是使用ARM,我的数据是12位。你最后用了什么?