二进制图像压缩算法,2005IEEE一篇文章的实现及简单改进算法

这个是我的毕设,某些地方可能还有借鉴价值,拿出来大家看看吧,转载注明出处,谢谢

3 block coding方法的改进

3.1  简单的位表示原理

如果以2进制位对一些数字进行表示的时候,为了达到能够用较少表示位表示较多不同标识,必须采用一定的方式。例如,当需要表示的内容为12-10的时候,如何表示能够使需要的位数最小,例如:可以用1011011101或是0011101100来分别表示12-10。在这样的编码情况下,都不需要其它任何位,就可以进行明确的解码。但是这样是要浪费一些比特位的,如何能够更简单的进行表示,这是这节要说明的问题。

当需要表示012的时候

如果用用3个比特位进行表示的时候,最多表示的可能性为8种,即000001010011100101110111。如果需要表示的是12-10四种,可以用00011011表示,但这种只对于平均分位比较有效的方法,对于一些出现频率有所差别的表示,则不会达到较好的效果,假设其有12-10出现的频率由高到低分别为012-1,那么

 

 

 

 

 

                   

后一种表示方法会更符合出现的频率的规则,然而这种组合是怎么出来的?

其中3个比特为最多能够表示8种情况,如果我们只用10表示1种情况,那么3个比特为最多还能表示100101110111四位,也就是0开头的4位不能在表示了。如果再用11去表示1,那么110111这两种表示也不能再使用了,因而011100101正好在3位比特位的限制之内。简单的说如果要用一位较低的比特位进行表示,就需要去掉比此高位的一半位置。

3.2       图像格式

图像存在着很多种格式,为了图像分析的方便所用的原始图像都采用 BMP位图,BMP4个组成部分:

1.文件头信息块

0000-0001:文件标识,为字母ASCII“BM”
0002-0005
:文件大小。
0006-0009
:保留,每字节以“ 00” 填写。
000A -000D
:记录图像数据区的起始位置。各字节的信息依次含义为:文件头信息块大小,图像描述信息块的大小,图像颜色表的大小,保留(为01)。
2.
图像描述信息块
000E-0011
:图像描述信息块的大小,常为28H
0012-0015
:图像宽度。
0016-0019
:图像高度。
001A -001B
:图像的plane总数(恒为1)。

001C -001D:记录像素的位数,很重要的数值,图像的颜色数由该值决定。
001E-0021
:数据压缩方式(数值位0:不压缩;18位压缩;24位压缩)。
0022-0025
:图像区数据的大小。
0026-0029
:水平每米有多少像素,在设备无关位图(.DIB)中,每字节以00H填写。
002A -002D
:垂直每米有多少像素,在设备无关位图(.DIB)中,每字节以00H填写。
002E-0031
:此图像所用的颜色数,如值为0,表示所有颜色一样重要。

3.颜色表

颜色表的大小根据所使用的颜色模式而定:2色图像为8字节;16色图像位64字节;256色图像为1024字节。其中,每4字节表示一种颜色,并以B(蓝色)、G(绿色)、R(红色)、alpha32位位图的透明度值,一般不需要)。即首先4字节表示颜色号0的颜色,接下来表示颜色号1的颜色,依此类推。

4.图像数据区

颜色表接下来位为位图文件的图像数据区,在此部分记录着每点像素对应的颜色号,其记录方式也随颜色模式而定,既2色图像每点占1位(8位为1字节);16色图像每点占4位(半字节);256色图像每点占8位(1字节);真彩色图像每点占24位(3字节)。所以,整个数据区的大小也会随之变化。究其规律而言,可的出如下计算公式:图像数据信息大小=(图像宽度*图像高度*记录像素的位数)/8

然而,未压缩的图像信息区的大小。除了真彩色模式外,其余的均大于或等于数据信息的大小。这是为什么呢?原因有两个:
  1.BMP文件记录一行图像是以字节为单位的。因此,就不存在一个字节中的数据位信息表示的点在不同的两行中。也就是说,设显示模式位16色,在每个字节分配两个点信息时,如果图像的宽度位奇数,那么最后一个像素点的信息将独占一个字节,这个字节的后4位将没有意义。接下来的一个字节将开始记录下一行的信息。
  2.为了显示的方便,除了真彩色外,其他的每中颜色模式的行字节数要用数据“00”补齐为4的整数倍。如果显示模式为16色,当图像宽为19时,存储时每行则要补充4-(19/2+1)%4=2个字节(加1是因为里面有一个像素点要独占了一字节)。如果显示模式为256色,当图像宽为19时,每行也要补充4-19%4=1个字节

图像主要分为24816位,以及彩色图像,后面处理到的都是按照2位色图像处理。

在进行处理的时候,基础的图像采用bmp图像,首先把bmp图像转化称需要的矩阵模式,例如后面试验用到的128*128的图像,写成map[128*128] 的格式,用来存贮所有的象素点,在此基础上,对此矩阵进行变换,得到需要的格式,最后压缩成2进制编码格式。转化方法参照具体的程序,这里不再累述。

3.3  NPC分块算法

在进行一些压缩时,一般都要先对图像矩阵进行一定的变换。在block coding中,一般都先要将其中的由1组成的矩形型块提取出来,再以一定的方式标注位置,一般是标注左下和右上顶点就足够表示一个矩形。这种方法是将图像中的1点划分为不重叠的矩形块,如下图所示,只需表示矩形的左上和右下顶点的变形,顶点用12的方式进行表示。

   

3-1 分块的表示

具体的步骤用略复杂的样式进行说明,如图类似于3 -2a 所示的图像,它中唯一的区域主要集中在两个部分,进行压缩时

1.      先对图像块逐行进行扫描,只到遇到第一个1位,记录这个位置,并把它作为第一个矩形的左上顶点。

2.      从这个顶点出发,对其左边的点进行检索如果为1,则把这个矩形向右扩展

,这样就变成了2*1的矩阵,如不成功则取消向右的扩展。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                 

             

3.        a)如果步骤2扩展不成功,那么以后只进行向下的扩展,对于m*n的矩形,检查下一行对应的m个像素是否都为1,如果都是1则把矩阵向下扩展,每次扩展都会把m*n的矩阵变为m*n+1)的矩阵,同时执行步骤4的检查。如果不成功则说明不能向下扩展。

b)如果步骤2扩展成功,对于m*n的矩形,检查下一行对应的m个像素是否都为1,如果都是1同时通过4的检查,则把矩阵向下扩展,扩展会把m*n的矩阵变为m*n+1)的矩阵。然后再进行类似步骤2,不过这次是把M*N的矩阵试着扩展成(M+1*N,然后重复进行步骤23,直到向右和向下都不能扩展为止。

4. 为了形成优化的分块,这里有特殊情况,在进行向下扩展时,如果下一行的前一位和其后一位也为1,则取消此次扩展。例如在对左上顶点在M*N的,大小为 m*n的矩阵进行扩展检查第N+n+1行如果从M-1M+mm+2个像素都为1,则取消此次向下的扩展,可以参看下图中的gh的过程。

5. 由于是不重叠的矩形提取方法,每次提一个矩形之后,下一个矩形便不能重复取这个矩形中包含过的点。简单的做法就是记录矩形的位置之后,把该矩形包含所有的点置为0再进行下一个矩形的提取。提取之后可以以一定的结构体记录这些矩形的长和宽,以及位置。同时利用左上顶点标记为1,右下顶点标记为2,孤立点为-1的规则进行记录。

    根据上述方法所得到的结果就是不重叠的NPC的分块提取方法,这是一种近似最优的不重叠分块方法,虽然有一种OPC的最优分块方法,不过要经过比较复杂的步骤,所以本文中的分块方法都采用这种方法。

3.4 相对距离编码

在编码的时候为了尽量缩短编码的总量,用相对距离方法能得到更好的压缩比,相对距离的方法根据前一非0点到其所在段的结尾的长度作为下个非0点编码所需要表示长度的预测值。而解压时一旦解出前一点,它到所在段的结尾也可以计算出了,所以不需要任何其它编码,下一编码所占的位数也可以计算出,因此也是可解得,如此可得到所有的解码,而不需要其它多余的位。

1.      如果某row中只有唯一的非0位,那么它需要的记录长度的位数为 nrow的长度。

2.      如果在某row中存在多个非0点,那个第一个非0点需要记录位置的bit位为 ,其后的非0位需要的 c为其前一非0点在row中的位置。

 

以上图为例进行说明,在上图中,利用11表示1101表示2100表示-1。在第一行中第一个16位置,由于长是8,所以需要的表示位 位,它在6位,3bit位表示的是从000-111的数值

000—1

001—2

010—3

011—4

100—5

101—6

110—7

111—8

从如上对应关系中可以得到第6位的位置编码为101。第2个非0位是在第7位的2,它需要的长度表示位数为 位,所以第2的非02的长度表示为0,总的表示为1010。其余的行也可以由此方法推导出,不在累述,后面的压缩方法在编码时也多用到这种方法。

 

 

 

4 线形编码

4.1 ZA编码

ZA编码也是一种针对二进制图像的压缩编码方式,整体的想法比较简单。ZA编码把图像中点的01值变成一个长序列,通过分析其中的黑点和白点的比例进行分块,根据导数的方法取极值点,得到最优的分块数,再对各块进行压缩。其特点是压缩方式简单,整个的算法过程和相应需要的内存空间都比较小,同时它也有一定的试用范围,只有在黑点和白点相差比较悬殊的时候才是有效的,在文献[7]中指出p为二进制图像中1点所占的比率

时,block coding的方法较好

时,ZA编码的方式比较好

时,坐标点记录的方法比较好

    在一定的比率下ZA压缩的方法比较好,如果把10的比率这个概念进行扩展。令

 

 

 

这样就可以把原有方法的原理用在其它的方法上,这样只要非0点满足p的有效范围,这个方法就可以有效。下节是一个改进方法。

4.2 ZA编码的改进

线形编码比分块编码简单,同时也能取得不错的压缩效果,这里用记录一个1的长串首位的方法加少

 

                  

同时这里也要用到根据导数分组的方法,和相对位置记录长度的方法。线形编码的步骤如下

1.      先把图像中的所有像素按照序列的顺序排成line[width*height]的长串,用作处理的基础。

2.      从第一位开始顺序遍历,每个1111…1的部分开头一位记为1,结尾一位记为2。遇到第一个1将其记为1如果下一位为0,那么遇到下一个1记为1。即对每个长度大于1的串,开头和结尾分别记为12,孤立的点记为1(可以根据下一标记点是0还是1,来分辨是孤立点还是成串的部分)。下面是一段的示例:

 

3. 经过步骤2,这个序列里面的值只可能步骤中先统计图像中总的点的个数,逐行扫描生成一维序列。这个1维序列中假设包含像素的个数 。把生成的bit位序列分成 块,每一块包含 位的像素;从中我们可以得到M=a+b,分块数 由公式

                 

           

得出,其中 p为其中的非0点,12-1 的总和占总点数的百分比。

10->1

   11->2

 

 

这样编码的原因可以根据前面得出,这里不再说明,在每两个相邻的块之间编一个“ 0 作为间隔位。

a)如果在一分块中没有任何1的话,那么其中不需要任何的编码,只需要块的分割标示“0”。

b)如果在某分块中存在多个非0点,那个第一个非0点需要记录位置的bit位为 ,其后的非0位需要的 c为其前一非0点在分块中的位置。产生的编码整合起来就是整体的编码。

   

    在解码的时候可以根据遇到1后下一个遇到的是1还是2来判断是孤立点,还是一个1的长串,所以不需要其它的编码就可以完成解压。

 

 

 

 

 

 

 

 

 

MF

fore-back MF

P-MF

ZA

ZA改进

序列压缩

边缘压缩

Clock

7871

7668

6210

14641

13257

5698

11709

Car

5531

5458

3605

17294

17294

3005

5737

Tower

5064

4995

3499

8916

7820

2647

5433

Horse

5049

4987

3364

14005

12471

2815

4060

English Text

5956

5832

4891

8332

7548

4897

10163

Persian Text

4420

4316

3158

5074

4642

3178

5771

具体参考这几篇

[1] Gengsheng Zeng, and Nasir Ahmed   A block coding technique for encoding sparse binary patterns  IEEE Trans. on ASSP  vol. 37  no. 5  pp. 778-780  May 1989

[2] Sherif A. Mohamed and Moustafa M. Fahmy  Binary image compression using efficient partitioning into rectangular regions  IEEE  Trans. on Comm., vol. 43, No.5, pp.1888-1893, 1995.

[3] Saif Zahir, Mehmood Naqvi A Near Minimum Sparse Pattern Coding Based Scheme for Binary Image Compression   IEEE  2005

[4] Jacob Augustine Wen Feng James Jacob  Logic Minimization Based Approach for Compressing Image Date IEEE 1995

  [5] Ian. H. Witten, Aliaster Moffat, and Timothy C. Bell  Managing Gigabytes  Morgan Kaufmann Publishing   San Francisco  May 1999

 图好像没贴上,明天继续整理,还有要研究下blog怎么贴附件。

你可能感兴趣的:(算法,扩展,compression,image,图像处理,scheme)