ITPub博客

首页 > 应用开发 > IT综合 > 传真机huffman压缩编码 (转)

传真机huffman压缩编码 (转)

原创 IT综合 作者:worldblog 时间:2007-12-10 10:49:15 0 删除 编辑
传真机huffman压缩编码 (转)[@more@]

CCITT Group 3 modified Huffman run length encodeing

这种压缩方法,原来是CCITT这个组织所制定的一种传真机压缩编码方式,也就是Facsimile compatible CCITT Group3。不过,本压缩方法中减少了一些传真机上的特殊码。本压缩方法只能够压缩处理黑白图像数据。这套压缩方法是利用一个Bits数不固定的编码,来代替在黑白图像数据中连续出现的一串白点或黑点。

所有编码的Bits值都是来自于下列三份表格:

TeRminating codes

Make-up codes

Additional make-up codes

(1)  Terminating codes代表0-63连续白点或黑点的编码。在此范围内,没一点白点或黑点都有一个对应的编码。

(2)  Make-up codes代表64-1728连续白点或黑点的编码。在此范围内,每隔64点的白点或黑点就有一个对应的编码。

(3)  Additional make-up codes代表1792-2560连续白点或黑点的编码。在此范围内,每隔64点的白点或黑点共用一个对应的编码。

  Table 1a. Terminating White Codes

  Code  Lng  Run

  ---------------------------

  00110101  8  0

  000111  6  1

  0111  4  2

  1000  4  3

  1011  4  4

  1100  4  5

  1110  4  6

  1111  4  7

  10011  5  8

  10100  5  9

  00111  5  10

  01000  5  11

  001000  6  12

  000011  6  13

  110100  6  14

  110101  6  15

  101010  6  16

  101011  6  17

  0100111  7  18

   0001100  7  19

  0001000  7  20

  0010111  7  21

  0000011  7  22

  0000100  7  23

  0101000  7  24

  0101011  7  25

   0010011  7  26

  0100100  7  27

  0011000  7  28

  00000010  8  29

  00000011  8  30

  00011010  8  31

  00011011  8  32

  00010010  8  33

  00010011  8  34

  00010100  8  35

  00010101  8  36

  00010110  8  37

  00010111  8  38

  00101000  8  39

  00101001  8  40

  00101010  8  41

  00101011  8  42

  00101100  8  43

  00101101  8  44

  00000100  8  45

  00000101  8  46

  00001010   8  47

  00001011  8  48

  01010010  8  49

  01010011  8  50

  01010100  8  51

  01010101  8  52

  00100100  8  53

  00100101   8  54

  01011000  8  55

  01011001  8  56

  01011010  8  57

  01011011  8  58

  01001010  8  59

  01001011  8  60

  00110010  8  61

  00110011  8  62

  00110100  8  63

 

 XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

 

 

 

 

  Table 1b. Make Up White Codes

  Code  Lng  Run

  ---------------------------

  11011  5  64

  10010   5  128

  010111  6  192

  0110111  7  256

  00110110  8  320

  00110111  8  384

  01100100  8  448

  01100101  8  512

  01101000  8  576

  01100111  8  640

  011001100  9  704

  011001101  9  768

  011010010  9  832

  011010011  9  896

  011010100  9  960

  011010101  9  1024

  011010110  9  1088

  011010111  9  1152

  011011000  9  1216

  011011001  9  1280

  011011010  9  1344

  011011011  9  1408

   010011000  9  1472

  010011001  9  1536

  010011010  9  1600

  011000  6  1664

  010011011  9  1728

 

 

  Table 2a. Terminating Black Codes

  Code   Lng  Run

  ---------------------------

  0000110111  10  0

  010  3  1

  11  2  2

  10  2  3

  011  3  4

  0011  4   5

  0010  4  6

  00011  5  7

  000101  6  8

  000100  6  9

  0000100  7  10

  0000101  7  11

  0000111  7  12

   00000100  8  13

  00000111  8  14

  000011000  9  15

  0000010111  10  16

  0000011000  10  17

  0000001000  10  18

  00001100111  11  19

   00001101000  11  20

  00001101100  11  21

  00000110111  11  22

  00000101000  11  23

  00000010111  11  24

  00000011000  11  25

  000011001010  12  26

  000011001011  12  27

  000011001100  12  28

  000011001101  12  29

  000001101000  12  30

  000001101001  12  31

  000001101010  12  32

  000001101011  12  33

  000011010010  12  34

  000011010011  12  35

  000011010100  12  36

  000011010101  12  37

  000011010110  12  38

  000011010111  12  39

  000001101100  12  40

  000001101101  12  41

  000011011010  12  42

  000011011011  12  43

  000001010100  12  44

  000001010101  12  45

  000001010110  12  46

  000001010111  12  47

  000001100100  12  48

  000001100101  12  49

  000001010010  12  50

  000001010011  12  51

  000000100100  12  52

  000000110111  12  53

  000000111000  12  54

  000000100111  12  55

  000000101000  12  56

  000001011000  12  57

  000001011001  12  58

  000000101011  12  59

  000000101100  12  60

  000001011010  12  61

  000001100110  12   62

  000001100111  12  63

 

 

  Table 2b. Make Up Black Codes

  Code  Lng  Run

  ---------------------------

  0000001111  10  64

  000011001000  12  128

  000011001001  12  192

  000001011011  12  256

  000000110011  12  320

  000000110100  12  384

  000000110101  12  448

  0000001101100  13  512

  0000001101101  13  576

  0000001001010  13  640

  0000001001011  13  704

  0000001001100  13  768

  0000001001101  13  832

  0000001110010  13  896

  0000001110011  13  960

  0000001110100  13  1024

  0000001110101  13  1088

  0000001110110  13  1152

  0000001110111  13  1216

  0000001010010  13  1280

  0000001010011  13  1344

  0000001010100  13  1408

  0000001010101  13  1472

   0000001011010  13  1536

  0000001011011  13  1600

  0000001100100  13  1664

  0000001100101  13  1728

 

  Table 3. Extended Make Up Codes (Black and White)

  Code  Lng  Run

  ---------------------------

  00000001000  11  1792

  00000001100  11  1856

  00000001101  11  1920

  000000010010  12  1984

  000000010011  12  2048

  000000010100  12  2112

   000000010101  12  2176

  000000010110  12  2240

  000000010111  12  2304

  000000011100  12  2368

  000000011101  12  2432

  000000011110  12  2496

  000000011111  12  2560

凡是想采用这套压缩方法处理黑白图像数据者,都必须现在程序内存出这三份表格,这样程序才能够参照这些表格,找出正确的编码,编制成压缩数据。

在编制压缩数据的过程中,第一步是先存入一个白点的编码。如果图像数据的第一个Bit值是黑点,就存入点数为0的连续白点编码(00110101),然后才开始存储黑点的编码。这是本压缩方法的一项特殊规定:每行的第一个编码值,必须是连续白点的编码。接下来的问题,则是如何以上述表格内的编码取代图像数据?下面举例说明,假设有某一图像数据的前两行内容如下:

第一列15各黑点,625个白点,3360个黑点

编码:00110101  000011000  01101000  01010010  000000011111

0个白点  15个黑点  576个白点 49个白点  2560个黑点

011001101  000001101010  000000

768个黑点 32个黑点  6个Bits

第二列18个白点,1486个黑点,2496个白点

编码:

0100111  0000001010101  00000111  000000011110  00110101

18个白点  1472个黑点  14个黑点   2496个白点  0个白点

从以上所列举的编码数据中,可以归纳出下列四项编码的原则:

(1)  每行压缩数据的第一个编码,必定是连续白点的编码。即使每行的第一点是黑点,还是得先用00110101(0个白点)作为压缩数据的第一个编码,接着才开始存储数据的第一个编码,接着才开始存储真正代表图形黑点的编码;

(2)  每行压缩数据的Bits总数,必须是8的倍数。如果Bits总数不是8的倍数,就须在每行压缩数据的末端,加上一些值为0的Bits,是Bits总数程为8的倍数。例如,上述实例的第一行压缩数据的Bits总数为66,还缺少六个Bits,才能成为8的倍数,第一列压缩数据的末端,加入了六个值为0的Bits,使Bits总数达到72,足够为8的倍数。至于第二行压缩数据的Bits总数为48,正好是8的倍数,所以就不需要加入一些多余的Bits。

(3)  编码有三种类型。

(A)  点数不超过63,可参照Terminating codes表格,找到对应的编码。这种编码都是只用一个,便代替一串相同的点数。

(B)  点数若在64-1728之间,则根据Terminating codes和Make-up codes表格,寻找编码。如果点数不是与Make-up codes表格数值相等,就需要用两个编码,方能取代一串相同的点数。

(C)  点数多达1792以上,就必须同时参考三份表格,才能找到所要的编码。这时,一串同值点数的编码,可能需要三个。如是点数比2560大很多,则需要的编码,就不止三个了。

(4)  Additional mak-up codes表格内的编码,可以同时代表连续白点或黑点,,所以这个表格的编码后面,就要带有另外两个表格的编码,才能让解压缩程序知道究竟所读取的编码是代表白点或黑点。例如,上述范例的第二行有一串连续变点的点数为2496,恰好与Additional mak-up codes表格内第12项点数值相同。所以即在000000011110(2496个连续白点或黑点)编码之后,加上00110101(0个白点),表示000000011110是代表2496个连续白点。

 

以上摘自《探索图像文件的奥秘》 李振辉及rfc804

我的经验

当一个连续白点或黑点只用到Make-up codes或

Additional make-up codes这两个表格时,后面必须加上00110101(0个白点)或  0000110111(0个黑点)

例如:

列  1792个白点

编码:00000001000  00110101  00000

1792个白点  0个白点  5个Bits

列  128个黑点

编码:00110101  000011001000  0000110111  00

0个白点  128个黑点  0个黑点  2个Bits

列  2624个白点

编码  000000011111  11011  00110101  0000000

2560个白点  64个白点  0个白点  7个Bits

列  2625个白点

编码  000000011111  11011  000111  0

2560个白点  64个白点  1个白点  1个Bits

 

 

 

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-990892/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    6241
  • 访问量
    2446186