基于vc的图像压缩编码技术的研究及算法实现内容摘要:

,不常出现的分配长码,使平均码长达到最短。 块编码最先就是用在二值图像上,如传真图像,后来推广到灰度图像。 由于设备简单,可用于实时处理或传输系统中,因此引起人们越来越广泛的重视。 但当方块尺寸大于 3x3 时,符合集合将迅速增大,致使霍夫曼编码的码表过于庞大而难以实际应用,因此就提出了降低复杂度的次最佳编码方法。 全白的方块最常出现,因此分配最短的码字“ 0”,而其它含有黑色像素的排列均用直接编码,如图 所示( 空白方格表示白像素 )。 7 图 方块编码 在实际中,大多数二值图像都是白色背景占大部分,黑色像素只是占图像像素总数的很少一部分,因 此分解的子快中像素为全白的概率远大于其他情况,如果跳过这些白色区域,只传输黑色像素信息,就可使得每个像素的平均比特下降。 跳白块 (WBS)编码正式基于这一思想提出来的。 跳白块 (White Block Skipping)编码是利用二值图像以白色像素为主、黑色像素相对较少这一特点而提出的编码方法。 编码方法非常简单,首先将二值图像的各扫描行分成若干块仍 lock),每块包括 N 个像素,其中像素全为白色像素的块,称为全白块 (White Block),编码时用 1 比特码字“ 0”表示,这是因为这种全白块在所有的块中出现的概 率最大,因而分配最短的一个码字。 对于至少含有一个黑像素的非全白块,用 N+1 比特码字表示 : 第一个比特为 “ l”,称为前缀码 ; 其余 N 比特采用直接编码,白像素为“ 0”,黑像素为 “ l” (反过来亦可 )。 注意,全白块对应的 1 比特“ 0”也可看作是前缀码,只不过此时全白块的编码看成只包括前缀码。 前缀码的作用是使解码器在收到一系列的比特流时能够正确的判别每个码字。 使用这种编码后,原图像平均每个像素的比特数,即比特率纵 nb 为 其中, np 是某块 为全白的概率,通过对码字的统计得到。 nb 越小,压缩性能越好。 解码时,每收到一个“ 1”,则判断其后的 N 比特为直接编码,而在该 N 比特以外的“ 0”则可判断为全白块,恢复为 N 个“ 0”,进而唯一地恢复原像素序列,从而完成图像的重建。 一维 WBS 可以推广到二维,整个图像分成若干大小为 MxN 像素的块,某块为全白像素时用 1 比特“ 0”表示 ; 非全白块用 1+MN 个比特码字表示 : 一个前缀比特“ 1”,其余 MN 比特采用直接编码。 行程编码 行程长度编码,又叫做游程编码 (RunLength Coding, RLC),它的基本思想是,当二值图像按照从左到右的扫描顺序去记录每一行时,总会交替出现出现一定数量的连续白点和连续黑点,如图 所示。 通常把具有相同灰度值的相邻像素组成的序列成为一个游程,游程中像素的个数成为游程长度,简称游长。 游程编码就是将这些不同的游程长度构成的字符串用其数值和游长数值来表示。    111 1 1 1N N N Nb p p N pNN         8 对图像进行编码时,首先对图像进行扫描,如果有连续的 L 个像素具有相同的灰度值 G,则对其作行程编码后,只需传送一个数 组 (G, L)就可代替传送这一串像素的灰度值。 图中可写成白 黑 白 黑 白 3( 其含义是 4 个白、 3 个黑、 5 个白、2 个黑、 3 个白 )。 然后,再对游程进行变长编码,根据出现概率的不同分配不同长度的码字。 很明显,游程长度越长,游程编码效率越高,因而特别适用于灰度等级少,灰度值变化小的二值图像。 图 连续白点和连续黑点 游程编码主要应用在 ITU(CCITT)为传真制定的文件传真三类机 G3维标准中,在该标准中游长的霍夫曼编码分为行程码和终止码两种,对不同长度的黑游程和白游程采用不同的编码方式,如图 所示。 图 游程编码 变换编码 将原来在空间域上描述的图像信号,通过数字变换变换到变换域中。 我们常常会发现,各变换系数之问的相关性明显下降,能量较为集中,这样可以根据压缩比的要求,在满足一定失真度要求的情况下进行有损压缩编码。 变换编码的过程是先对每个子像块进行正交变换,生成变换域中的系数知阵,然后进行变换、量化、编码,再存储或者传输。 典型的正交变换有离散傅里叶变换 ( 简称 DFT) 、离散余弦变换 ( 简称 DCT) , KL 变换和沃尔什变换等。 变换编码之所以在图像信号处理中得到广泛应用,主要是它具有 如下特性: ( 1) 能量集中性与保持特性。 变换编码方法最重要的特点是使能量主要集中于低频区域,使大多数变换系数为 0 或者很小的数。 在编码时,可以舍弃能量较小的系数,或者分配很少的比特,从而实现数据的压缩。 ( 2) 去相关性。 通过变换可以使相关的空间样值变为不相关或者弱相关的变换 9 系数,即变换编码能够消除存在相关性中的冗余度。 位平面编码 对 1 幅用多个比特表示其灰度值的图像来说,其中的每个比特可看作表示了个二值的平面,也称位面,如图 所示。 图 位平面 位平面编码是一种将多灰度值图象分解成一 系列二值图,然后对每幅二值图再用二元压缩方法进行压缩的技术。 这类方法主要有两个步骤 : 位平面分解和位平面编码。 将图像所有像素的不同比特位进行分解,就构成了图像八个不同的位平面,如图 所示。 对于八位灰度图像 I,其位平面分解可表示为 : 由图 中可以看出,随着位平面从高位到低位 ( 即从位平面 7 到位平面 0) ,位平面图像特征逐渐变得复杂,位平面图像的随机纹理逐渐增加,图像轮廓逐渐变得模糊直至消失。 到位平面 0,基本上就已无法看到原图信息,这恰恰表明,不同位平面的信息对数字图像的贡献是不同的,较高位平而 ( 简称“重要位 平面” ) 反应原始图像的主要内容,而较低位平面所携带的原始信号能量极少,即忽略较低位平面对原始图像质量没有太大的影响。 也就是说我们只需要提取图像的最高 5 个位平面 ( 即重要位平面 ) 就足以表达图像内容。 Visual C++ 介绍 采用的是 Visual C++ 平台编程实现,建立的项目名称为 RWJpegExp。 在此应用程序中,我们可以打开和存储任意的 BMP 文件或 JPEG 文件,并能实现两者的格式转换。 即可以将 BMP 文件压缩编码为 JPEG 文件 ,也可以将 JPEG 文件解码为 BMP   70, , 2 jtI x y B x y 10 文件。 Visual C++软件平台 Visual C++首先是一种程序设计语言,同时也是一个集成开发工具,它提供了自动生成软件代码和可视化资源编辑的功能。 Visual C++是 Windows 环境下最主要的面向对象应用开发系统之一,不仅是 C++语言的集成开发环境,而且与 Win32 紧密相连。 所以,使用 Visual C++可以灵活地开发从底层软件到上层直接面向用户的软件。 进入 20 世纪 90 年代以来,随着多媒体技 术和图形图像技术的不断发展,可视化技术得到广泛的重视,越来越多的计算机专业人员和非专业人员都开始研究并应用可视化技术。 所谓可视化技术,一般是指软件开发阶段的可视化和对计算机图像技术和方法的应用。 Visual C++是一个很好的可视化编程工具,使用 Visual C++环境来开发基于 Windows 的应用程序大大缩短了开发时间,而且它的界面更为友好,便于程序员操作。 在没有可视化开发工具之前,程序员要花好几个月的时间来完成 Windows 程序的界面开发,而现在只需 较 少的时间就可以完成。 VC++技术特性 面向 对象程序设计 (ObjectOriented Programming 简称 OOP)方法已出现近三十年, 90 年代已成为程序设计的主流方向,面向对象程序设计语言是现代程序开发的主要工具,如 C++、 Java 是现代程序员必须掌握的编程语言。 面向对象程序设计方法主要以数据为中心,代码是围绕着需要处理的数据而设计的,面向对象程序设计语言具有如下的主要特征: ( 1)对象的类描述 ( 2)封装性 (Encapsulation) ( 3)多态性 (Polymorphism) ( 4)继承性 (Inheritance) C++是运用最广泛的面向对象程序设计语言, Visual C++是一个具有集成、交互和可视化编程的 C++实现,具备上述的所有 OOP 特征。 编写 Visual C++程序实际上就是一个构造类和把类实例化的过程。 由于 Windows 95/98/NT 是 PC 平台中应用最广泛的操作系统( Microsoft 力图用一个叫做 Win32 的标准的 32 位应用程序接口来作为对这几个操作系统的共同开发接口,所以经常采用Win32 来代表 Microsoft 的 32 位 Windows 操作系统), Visual C++主要针对 Win32 的 11 应用程序开发。 数字图像基本概念 数字图像是连续图像 ( , )f xy 的一种近似表示,通常用由采样点的值所组成的矩阵来表示: ( 0 , 0 ) ( 0 , 1 ) .. . ( 0 , 1 )( 1 , 0 ) ( 1 , 1 ) .. . ( 1 , 1 ).. . .. . .. .( 1 , 0 ) ( 1 , 1 ) .. . ( 1 , 1 )f f f Mf f f Mf N f N f N M     每一个采样单元叫做一个像素 (pixel),上式 ()中, M、 N 分别为数字图像在横(行 )、纵 (列 )方向上的像素总数。 在计算机内通常用二维数组来表示数字图像的矩阵,把像素按不同的方式进行组织或存储,就得到不同的图像格式,把图像数据存成文件就得到图像文件。 图像文件按其数字图像格式的不同一般具有不同的扩展名。 最常见的图像格式是位图格式,其文件名以 BMP 为扩展名。 图像数字化的精度包括两部分,即分辨率和颜色深度。 分辨率指图像数字化的空间精细度,有显示分辨率和图像分辨率两种。 数字图像的颜色深度表示每一像素的颜色值所占的二进制位数。 颜色深度越大则能表示的颜色数目越多。 颜色深度的不同,就产生不同种类的图像文件,在计算机中常使用图像文件的类型有单色图像、灰度图像、伪彩色图像和 24 位真彩色图像。 它们之间的关系取决于数字图像采用的颜色表示法。 常用的颜色表示法有 RGB、 CMYK、HSL 和 YUV 等。 数字图像的数据容量非常庞大,如以 24 位真彩色表示像素为 640*480 的数字图像,所需要的数据量为 900KB,所以需要对数字图像进行数据压缩。 数据压缩包括数据压缩编码和压缩数据解码两个过程。 图像压缩的基本原则包括: ( 1)编码重复压缩:按照编码重复的概率大小做压缩编码,压缩重复概率大的编码,可以节省一些存储空间。 ( 2)像素间重复压缩:前后像素间存在的某种程度的相关,如存在相同的背景图像等,简化编码以节省空间。 ( 3)视觉重复压缩:由于入眼的生理构造,就算在像素之间少了几个像素,眼 12 睛也看不出来。 但是,只是在某些情况中才可以允许这种失真性较大的应用。 主要的数字图像压缩标准是 JPEG(Joint Picture Expert Group)标准。 数字图像的采集设备主要有扫描仪、数字相机和图像采集卡等。 通过对数字图像进行一定的处理,即图像处理,可在一定程度上改善图像的分辨质量和形成特殊的视觉效果。 数字图像处理由数字图像处理系统完成,其结构主要包括图像采集系统、计算机图像处理系统和图像输出系统三部分。 与设备无关的位 图 (DIB) 与设备无关位图 (DIB)可以在不同的机器或系统中显示位图所固有的颜色。 DIB是一种外部的位图格式,经常存储以 BMP 为后缀的位图文件。 DIB 位图还支持图像数据的压缩。 BMP 位图文件结构 BMP 文件由文件头、位图信息头、颜色信息和图像数据四部分组成。 位图结构包括:位图文件头 (BITMAPFILEHEADER)、位图信息头 (BITMAPINFOHEADER) 、调色板 (Palette)、实际的位图数据 (Image Data)。 CDIB 类库的建立 大多数图像处理都是基于与设备无关位图( DIB)来进行讨论的,而 MFC 中没有处理 DIB 位图的类,所以需要定义一个处理 DIB 位图的专用类 CDib 类,在其中封装必要而有效的 DIB 数据成员和处理函数。 设计目标 用面向对象的方法处理位图的核心是设计一个处理 DIB 的类,称之为 CDIB 类。 ( 1) 功能 CDIB 类的基本操作功能应 包括 DIB 文件的读、写操作;提供位图宽度、高度、颜色数目等位图相关信息;提供有关位图占据内存空间的信息,如图像数据区首地址、颜色表首地址、位图信息结构首地址等信息。 ( 2)父类 由于 MFC中有一个支持 DDB操作的 CBitmap类,因此很直观的想法是以 CBitmap 13 类为父类派生出 CDIB 类。 但是从长远考虑,这样做没有什么好处。 首先, CBitmap类中没有处理 DIB的功能,因此 CDIB类不能从中继承任何可用的功能。 其次, CBitmap是从 CGdiObject 中派生来的, CBitmap 类以及它从 CGdiObject 类继承来的数据成员和功能函数对 CDIB 类来说都是不合适的,多余的。 此外, CBitmap。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。