比特位进行分解,就构成了图像八个不同的位平面,如图2.5所示。对于八位灰度图像I,其位平面分解可表示为:
由图2.4中可以看出,随着位平面从高位到低位(即从位平面7到位平面0),位平面图像特征逐渐变得复杂,位平面图像的随机纹理逐渐增加,图像轮廓逐渐变得模糊直至消失。到位平面0,基本上就已无法看到原图信息,这恰恰表明,不同位平面的信息对数字图像的(网学)贡献是不同的,较高位平而(简称"重要位平面")反应原始图像的主要内容,而较低位平面所携带的原始信号能量极少,即忽略较低位平面对原始图像质量没有太大的影响。也就是说我们只需要提取图像的最高5个位平面(即重要位平面)就足以表达图像内容。
2.3 Visual C++6.0介绍
采用的是Visual C++ 6.0平台编程实现,建立的项目名称为RWJpegExp。在此应用程序中,我们可以打开和存储任意的BMP文件或JPEG文件,并能实现两者的格式转换。即可以将BMP文件压缩编码为JPEG文件,也可以将JPEG文件解码为BMP文件。
2.3.1 Visual C++软件平台
Visual C++首先是一种程序设计语言,同时也是一个集成开发工具,它提供了自动生成软件代码和可视化资源编辑的功能。Visual C++是Windows环境下最主要的面向对象应用开发系统之一,不仅是C++语言的集成开发环境,而且与Win32紧密相连。所以,使用Visual C++可以灵活地开发从底层软件到上层直接面向用户的软件。
进入20世纪90年代以来,随着多媒体技术和图形图像技术的不断发展,可视化技术得到广泛的重视,越来越多的计算机专业人员和非专业人员都开始研究并应用可视化技术。所谓可视化技术,一般是指软件开发阶段的可视化和对计算机图像技术和方法的应用。Visual C++是一个很好的可视化编程工具,使用Visual C++环境来开发基于Windows的应用程序大大缩短了开发时间,而且它的界面更为友好,便于程序员操作。在没有可视化开发工具之前,程序员要花好几个月的时间来完成Windows程序的界面开发,而现在只需较少的时间就可以完成。
2.3.2 VC++技术特性
面向对象程序设计(Object-Oriented 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的应用程序开发。
2.3 数字图像基本概念
数字图像是连续图像的一种近似表示,通常用由采样点的值所组成的矩阵来表示:
每一个采样单元叫做一个像素(pixel),上式(2.1)中,M、N分别为数字图像在横(行)、纵(列)方向上的像素总数。在计算机内通常用二维数组来表示数字图像的矩阵,把像素按不同的方式进行组织或存储,就得到不同的图像格式,把图像数据存成文件就得到图像文件。图像文件按其数字图像格式的不同一般具有不同的扩展名。最常见的图像格式是位图格式,其文件名以BMP为扩展名。图像数字化的精度包括两部分,即分辨率和颜色深度。分辨率指图像数字化的空间精细度,有显示分辨率和图像分辨率两种。
数字图像的颜色深度表示每一像素的颜色值所占的二进制位数。颜色深度越大则能表示的颜色数目越多。颜色深度的不同,就产生不同种类的图像文件,在计算机中常使用图像文件的类型有单色图像、灰度图像、伪彩色图像和24位真彩色图像。它们之间的关系取决于数字图像采用的颜色表示法。常用的颜色表示法有RGB、CMYK、HSL和YUV等。
数字图像的数据容量非常庞大,如以24位真彩色表示像素为640*480的数字图像,所需要的数据量为900KB,所以需要对数字图像进行数据压缩。数据压缩包括数据压缩编码和压缩数据解码两个过程。
图像压缩的基本原则包括:
(1)编码重复压缩:按照编码重复的概率大小做压缩编码,压缩重复概率大的编码,可以节省一些存储空间。
(2)像素间重复压缩:前后像素间存在的某种程度的相关,如存在相同的背景图像等,简化编码以节省空间。
(3)视觉重复压缩:由于入眼的生理构造,就算在像素之间少了几个像素,眼睛也看不出来。但是,只是在某些情况中才可以允许这种失真性较大的应用。
主要的数字图像压缩标准是JPEG(Joint Picture Expert Group)标准。
数字图像的采集设备主要有扫描仪、数字相机和图像采集卡等。通过对数字图像进行一定的处理,即图像处理,可在一定程度上改善图像的分辨质量和形成特殊的视觉效果。数字图像处理由数字图像处理系统完成,其结构主要包括图像采集系统、计算机图像处理系统和图像输出系统三部分。
2.4 与设备无关的位图(DIB)
与设备无关位图(DIB)可以在不同的机器或系统中显示位图所固有的颜色。DIB是一种外部的位图格式,经常存储以BMP为后缀的位图文件。DIB位图还支持图像数据的压缩。
2.5 BMP位图文件结构
BMP文件由文件头、位图信息头、颜色信息和图像数据四部分组成。位图结构包括:位图文件头(BITMAPFILEHEADER)、位图信息头(BITMAPINFOHEADER) 、调色板(Palette)、实际的位图数据(Image Data)。
2.6 CDIB类库的建立
大多数图像处理都是基于与设备无关位图(DIB)来进行讨论的,而MFC中没有处理DIB位图的类,所以需要定义一个处理DIB位图的专用类CDib类,在其中封装必要而有效的DIB数据成员和处理函数。
2.6.1 设计目标
用面向对象的方法处理位图的核心是设计一个处理DIB的类,称之为CDIB类。
(1)功能
CDIB类的基本操作功能应包括DIB文件的读、写操作;提供位图宽度、高度、颜色数目等位图相关信息;提供有关位图占据内存空间的信息,如图像数据区首地址、颜色表首地址、位图信息结构首地址等信息。
(2)父类
由于MFC中有一个支持DDB操作的CBitmap类,因此很直观的想法是以CBitmap类为父类派生出CDIB类。但是从长远考虑,这样做没有什么好处。首先,CBitmap类中没有处理DIB的功能,因此CDIB类不能从中继承任何可用的功能。其次,CBitmap是从CGdiObject中派生来的,CBitmap类以及它从CGdiObject类继承来的数据成员和功能函数对CDIB类来说都是不合适的,多余的。此外,CBitmap类没有提供有效的文件操作机制。而DIB主要是一种"外部"位图,即它主要以文件形式进行存储和交换,所以CDIB类应该能很好地处理文件操作。
MFC中的CObject类是MFC中其他大多数类的根类和基类。它不但提供许多有用的特性,还包括对文件串行化的支持,运行时的类信息和对象诊断的输出等。如果从CObject类派生类,则可继承该类的这些特性。另外,CObject类具有最低限度的成员数据和函数,因此采用CObject类作为父类是很合理的。
(3)数据封装
面向对象方法的一个重要特征就是数据封装,即将类的成员数据隐藏在
上一篇:
基于vc++开放可编程网络控制件和转发件之间通信毕业论文(2003doc)
下一篇:
超市进销存管理系统的开发