CCITT G3/G4 1D/2D编码

发布时间 2023-04-13 15:06:46作者: HotSky

CCITT G3/G4 1D/2D指:

  CCITT Group3(T.4) 1D(纯1维);

  CCITT Group3(T.4) 2D(至少一行1维(第一行开始连续行),剩余行2维);

  CCITT Group4(T.6) 2D(纯2维);

针对纯黑色(0)和白色(1)的位图编码方案;

 

 

 

CCITT Group3(T.4) 1D:

  1维编码;

  每行以12位EOL(0000 0000 0001)码字开头;最后行编码结束后RTC(6个EOL)结尾;

  每行根据游程长度值参考对应的终止码表或者补给码表编码,必须有终止码例如128长度编码为(补给码128+终止码0),如果行第一位是黑色则在当前行开头加0长的白色;

EOL 编码数据 EOL 编码数据 ··· 编码数据 RTC

例如:

  111100110000

游程长度为:3白,2黑,2白,4黑

对应编码:1000,11,0111,011

结果为:1000110111011

 

例如:

  00000111111001011111

 

游程长度为:0白,5黑,6白,2黑,1白,1黑,5白

对应编码:00110101,0011,1110,11,000111,010,1100

结果为:0011010100111110110001110101100

 

  如果游程长度不在表中,则取小于并最接近长度的值,取差值匹配表中数字,如果任然没有匹配,则继续用差值与小于并最接近差值的值取差值,再匹配,反复直到匹配终止码。

 

例如:长度5294白色

  5294 - 2560 =  2726                      (小于并最接近5294的是2560)

  2726 - 2560 = 166       (小于并最接近2726的是2560)

  166 - 128 = 38          (小于并最接近166的是2560,结果38在数据表中)

对应编码:2560,2560,128,38

对应编码:000000011111,000000011111,10010,00010111
结果为:0000000111110000000111111001000010111

 

CCITT Group3(T.4) 2D:

  1维2维混合编码,第1行开始连续最少1行进行1维编码,后续以2维编码;

        2维编码:以前一行原数据作为参考行对当前编码行编码;

  每行以12位EOL(0000 0000 0001)码字开头加1个标记位,标识下一行是使用1维(1)还是2维(0)编码;最后一行RTC(6个(EOL + 1))结尾;

  

EOL+0或+1 编码数据 EOL+0或+1 编码数据 ··· 编码数据 RTC

 

编码参考位:

        a0:编码线上的参考或起始变化元素。在编码行的开始处,a0被设置在位于该行上的第一个元素之前的假想的白色变化元素上。在编码行的编码期间,a0的位置由先前的编码模式定义;

        a1:编码行上a0右边的下一个变化元素;

        a2:编码线上a1右边的下一个变化元素;

        b1:a0右侧参考线上的第一个变化元素,其颜色与a0相反;

        b2:参考线上b1右边的下一个变化元素;

  当没有对应颜色时对应当前行末尾+1位置;例如a0后面都是白色则a1,a2都是末尾+1位置;

 

编码模式:

  1.通过模式:当b2在a1左侧时;b2对应编码位位置作为下一次编码的a0位置;编码写入码字0001

 

例如:

  参考线:  0  0  1  1  0  1  0  0  0  0  0

                  b1   b2

  编码线:  1  1  1  1  1  1  1  0  0  0  1

        a0              t  a1         a2

  t位置作为a0进行下一此编码。

 

  2.垂直模式:当a1和b1相对距离<=3时;当a1在b1下方V(0),当a1在b1左,相对距离(VL(1),VL(2),VL(3)),在右(VR(1),VR(2),VR(3));a1位置作为下一次编码的a0位置;

例如:

  参考线:  1  0  0  0  1  1  1  0  0  0  0  0

           b1         b2

  编码线:  1  0  0  1  1  1  1  1  1  0  0  0  1

        a0  a1    a2  

  编码线黑色0开头,前面加入一列白色1作为a0,码字V(0);a1位置作为下一次编码的a0位置。

 

  3.水平模式:当既不是通过模式也不是垂直模式时,a2作为下一次编码的a0位置;码字为001+M(a0a1)+M(a1a2);M(a0a1)表示a0a1长度的一维编码,M(a1a2)表示a1a2长度的一维编码;

例如:

  参考线:  0  0  0  0  0  1  1  0  0  0  1

                          b1        b2

  编码线:  1  1  1  0  0  0  0  1  1  1  1

        a0       a1          a2

  M(a0a1) = 3 => 1000;

  M(a1a2) = 4 => 011;

  编码结果:0011000011;

例如:

          -1     第1列

  参考线:  1  1  1  1  1  1  1  0  0  0  1  1

                           b1         b2

  编码线:  1  0  0  1  1  1  1  1  1  0  0  0  1

        a0  a1    a2  

  编码线黑色0开头,前面加入一列白色1作为a0;此种情况M(a0a1)=1;

  M(a0a1) = 0 => 00110101;

       M(a1a2) = 2 => 11;

  编码结果:0010011010111;

通过模式   001
水平模式   001+M(a0a1)+M(a1a2)
垂直模式 V(0) 1
VR(1) 011
VR(2) 000011
VR(3) 0000011
VL(1) 010
VL(2) 000010
VL(3) 0000010