【问题标题】:On-the-fly lossless image compression即时无损图像压缩
【发布时间】:2011-02-07 08:06:49
【问题描述】:

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

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

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

更新:我的平台是 FPGA

【问题讨论】:

  • 我也有同样的问题,不是在 FPGA 上,而是在使用 ARM,我的数据是 12 位的。你最终使用了什么?

标签: image-processing embedded compression image-compression


【解决方案1】:

具有花哨功能的优质 LZ77/RLE 混合体可以获得出色的压缩效果,而且解压缩速度相当快。由于缺少库开销,它们也将是更小文件的更大、更坏的压缩器。对于一个好的但 GPLd 实现,请查看 PUCrunch

【讨论】:

    【解决方案2】:

    您需要多“无损”?
    如果这是一台真正的扫描仪,则带宽/分辨率会受到限制,因此即使它可以发送 +/-64K 值,相邻像素的差异超过 8 位也可能是非物理的。

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

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

    【讨论】:

    • 这是一个有趣的观察结果,但不幸的是,我对图像生成物理学(这是用于电子显微镜)知之甚少,无法对相邻像素之间的差异做出假设。
    【解决方案3】:

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

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

    ..OOO...
    ..OX

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

    OO...B X

    相反,您将根据 Os 进行预测。

    【讨论】:

      【解决方案4】:

      有各种各样的图像压缩库可用。例如,this page 只列出了 PNG 图像的库/工具包。哪种格式/库最适合您很可能取决于您正在处理的特定资源限制(特别是,您的嵌入式系统是否可以进行浮点运算)。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • JPG不是更适合灰度扫描吗?
        • @Matthew,标题写着“无损”。 JPEG 有一个非标准的无损模式,但我认为更好的选择是 PNG。
        • 另外,使用适当的 PNG 过滤器,因为 LZ / Huffman 不利用二维预测压缩。 w3.org/TR/PNG-Filters.html 此外,允许设备最终用户选择减少每个样本的位数,因为最低有效位并不是真正可压缩的,并且会显着增加数据大小。在硬件/协议级别,只需将源中不需要的位清零即可提高可压缩性。
        【解决方案6】:

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

        您能移植zlib 并进行gzip 压缩吗?即使资源有限,您也应该能够移植 LZ77 or LZ88 之类的内容。

        【讨论】:

        • 感谢您的建议。您建议的基于字典的方法似乎比霍夫曼编码更适合该任务。关于资源,我想在 FPGA 上实现它。我没有处理器。
        猜你喜欢
        • 1970-01-01
        • 2016-01-09
        • 2012-06-28
        • 2015-02-24
        • 1970-01-01
        • 2021-02-01
        • 2011-07-07
        • 2012-08-31
        • 2016-02-13
        相关资源
        最近更新 更多