【问题标题】:Algorithm issue with TIFF CCITT Group 4 decompression (T.6)TIFF CCITT Group 4 减压算法问题 (T.6)
【发布时间】:2014-07-19 18:00:16
【问题描述】:

我在一家工程设计公司工作,我们以 TIFF 格式存储黑白设计图纸,并使用 CCITT Group 4 压缩。

我正在开展一个项目,以改进我们处理这些绘图的软件。我显然需要能够将原始数据加载到我的程序中,所以我必须解压缩它。

我尝试使用 LibTiff,但很快就放弃了。它不会构建,产生超过 2000 个错误。我在库中发现了许多明显的语法错误,并得出结论它是垃圾。我花了大约 3 个小时试图找到实现 CCITT Group 4 编解码器的库部分,但没有运气,该代码是一个难以理解的混乱。

所以我正在为程序编写自己的编解码器。我的大部分工作都很好,但我遇到了一个问题。我找不到关于这种格式的好的文档。有很多很好的概述描述了 2D Modified Huffman 压缩是如何工作的,但我找不到任何具有特定实现级别细节的概述。所以我试图通过使用一些绘图文件作为示例来解决它。

我的垂直和传递模式运行良好,我的算法在图像转到向导并产生垃圾之前正确解压缩了大约三分之一的图像。

我将问题追溯到水平模式。我的水平模式算法期望看到水平模式代码 001 后跟一组化妆代码(可选)和当前笔颜色的终止代码,然后是另一组化妆代码(可选)和终止代码相反的颜色。

该算法在图像的三分之一处运行良好,但突然我遇到了水平模式运行,其中相反的颜色出现在当前笔颜色之前。

图像的一部分是 12 个黑色像素,然后是 22 个白色像素。
该部分的代码位是 00100000110000111 ,它解码为水平 (001) 22 白色 (0000011) 12 黑色 (0000111 ),如您所见,这与像素在图像中出现的顺序相反。

由于我的算法需要图像订单列表,因此它会崩溃。但是同一个图像文件中之前的 307 个水平模式实例都是按图像顺序排列的。这是我发现的唯一一个反转的(到目前为止)。

其他成像程序可以正常显示此文件。我尝试手动编辑图像文件中的位,只是为了测试图像顺序,这会导致其他成像程序在解码图像时崩溃。这让我相信他们有某种方式知道在那种情况下它是相反的。

任何人都知道有关此 TIFF CCITT G4 编码的具体实现级别的详细信息,这可以帮助我了解运行代码有时如何以及为什么会被反转?

谢谢 乔什

【问题讨论】:

    标签: tiff codec compression


    【解决方案1】:

    CCITT G4 水平代码始终编码为一对(黑/白)或(白/黑)。这取决于当前的笔颜色。垂直代码将翻转颜色,但水平代码将保持颜色不变。如果当前笔的颜色是黑色,那么你解码一个白色的水平代码,然后是一个黑色。如果当前笔的颜色是白色,那么你会做相反的事情。

    【讨论】:

    • 是的,这正是我所期望的。图像中的所有其他水平代码都与您描述的完全一样。但一个是相反的。当前的笔是白色的,所以我希望先是黑色,然后是白色,但它是先是白色,然后是黑色。有没有办法以常规方式检测异常?
    • 请提供该文件,我来看看。告诉我您认为存在异常行为的行和列。
    【解决方案2】:

    代码:00100000110000111

    001 : 水平模式

    0000011000:黑色游程 17

    0111 : 白色游程 2

    首先是黑色。

    运行代码不反转。

    【讨论】:

      猜你喜欢
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      相关资源
      最近更新 更多