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
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