第四章 总体设计
经过需求分析的工作系统必须“做什么”已经清楚了,现在是解决“怎样做”的问题的时候了。总体设计的基本目标是回答“概括的说,系统应该如何实现?”这个问题,因此,总体设计又称为概要设计或初步设计。通过这个阶段的工作将划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等等,但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后的设计中。总体设计阶段的另一项重要任务是设计软件的结构,也就是确定系统中每个程序是有哪些模块组成的,以及这些模块的相互关系。总体设计过程首先寻找实现目标系统的不同方案,需求分析阶段得到的数据流图是设想各种方案的基础。然后分析员从这些供选择的方案中选取若干个合理的方案,为每个合理的方案都准备一份系统流程图,列出组成系统的所有物理元素,进行成本、效益分析,并且制定实现这个方案的进度计划。分析员应该综合分析比较这些合理的方案,从中选择一个最佳的方案向用户和使用部门负责人推荐。如果用户的使用部门的负责人接受了推荐的方案,分析员应该进一步为这个最佳方案设计的软件结构,通常,设计出的初步软件结构后还要有很多改进,确定测试要求并且指定测试计划。
4.1 系统设计的原则
随着系统规模的扩大,模块化的开发方法得到了越来越广泛的应用。系统设计模块化的程度可以由下面的几个特性来描述:
1)可扩展性: 也就是系统的文护性,在系统产生新的需求时,不用修改程序直接利用系统的扩展性就可解决。
2)分解性: 将一个大型系统分解为若干的子系统模块。
3)组装性: 子系统模块实现后,可以方便地用于构建新的大型系统。
4)可移植性: 为了适应今后的发展,要求系统具有可移植性强的特性。
5)保护性: 在模块发生错误时减少副作用的发生。
4.2 设计目标
基于对图像编,解码的研究,对图像重新编码后,达到对数据的压缩。
4.3 系统开发平台
4.3.1 软件配置
操作系统:Windows 2000 Sever或更高;
开发平台:Visual studio 2005。
4.3.2 硬件配置
CPU:PⅡ266或更高;
内存:64MB以上
硬盘:2G以上
显示器:VGA或更高;
4.4 系统开发方法及技术路线
本设计拟采用VC++来实现。程序实现的各个步骤如下。
1)读取BMP图像信息,获取图像行像素和列像素数值,在BMP图像中,图像数据是以倒序存放的。亦即实际图像第一行资料存放在BMP图像数据矩阵的最后一行,依次类推,所以取资料的时候要从BMP图像数据矩阵的最后一行开始读起,把数据存放在新建数组(或称矩阵)的第一行,一直取完。BMP图像行像素和列像素的数值分别存于文件头信息的第18和22字节。从Cimage类中可得到Width(图像宽度)和hight(图像高度)的数值。
2)得到Pwidth*Phight后便得知BMP图像的像素点大小,而数据矩阵(三基色,RGB矩阵)的大小是Pwidth*Phight*3,因为每一个像素点都含有RGB三个数据,我们要处理的是数据矩阵而不是像素点矩阵。所以,新建数组的大小是(Pwidth*3)*Phight。
3)接下来,把这一个矩阵(包含BGR)拆分成三个独立的B、G、R矩阵,得到三个新的矩阵(只包含B的矩阵,只包含G的矩阵,只包含R的矩阵),简称为B矩阵、G矩阵、R矩阵(大小为Pwidth*Phight),用程序实现拆分,只要依次取原矩阵的第1、4、7、10、13......个资料即得到B矩阵,依次读取第2、5、8、11......个数据即得到G矩阵,依次读第3、6、9、12......个资料即得到R矩阵。得到B、G、R矩阵后再利用颜色转换公式很容易就可得到YCbCr矩阵。
Y(n)=0.114B(n)+0.587G(n)+0.299R(n)
Cb(n)=0.5B(n)-0.3313G(n)-0.1687R(n)
Cr(n)=0.0813B(n)-0.14187G(n)+0.5R(n)
(For n=1 To PW*PH),其中PW为Pwidth的简写,PH为Phight的简写。
4)二文DCT变换
由于VC中无法实现二文DCT计算公式,所以只有把二文的变换变成先做一文,再做另一文的变换,俗称快速DCT变换。快速DCT变换方法如下:设一个大小为8的数组SL(8),先读取一个8*8块的第一行资料值,赋给SL(8),对SL(8)进行一文DCT变换后得到一个新的SL(8)数组,再把SL(8)数组覆盖到原来的8*8块中相应的地方去。做完第一行后再做第二行,一直做完8行,一个8*8块的一文DC即告完成,然后再做列方向的第二文DCT变换,变换公式一样,只是由SL(8)取8*8块的行资料变成取列数值。做完后覆盖回原值,即得到一个8*8块的DFT系数块,再重复这两个过程做第二个8*8块......一直到做完全部8*8块(Y,Cb,Cr)。这样就得到Y、Cb、Cr的DFT系数矩阵。
5)量化
读取Y矩阵中第一个8*8块,与量化系数矩阵中对应的相乘,得到的值覆盖回原矩阵,然后做第二个8*8块,一直到做完全部8*8块,然后做CbCr矩阵的量化,用另外一个系数矩阵。
6) “之”字形扫描
7)哈夫曼编码
哈夫曼编码时必须判断一个个DC(AC)的值,以及转换成二进制代码后的码长,再去对照哈夫曼编码表进行编码,比如对一个DC值编码,首先得先判断该DC的值在哪段范围内,在某一段范围内的数值,其二进制代码长相等。并要让程序知道该DC的值到底为多少,然后才能进行编码。
8)压缩过程完成以后,接下去要做的工作便是码串存贮,存贮时需要注意的—点是在抽样过程中得到1个Y块对应1个Cb块合一个Cr块的对应关系,在存贮时也要按这种对应关系存贮,即1个Y块的码串后面紧接着存放与其对应的一个Cb块的码串及一个Cr块的码串,循环往复,存完所有串。这样的1个Y8*8块+1个Cb块+1个Cr简称为MCU,是JPEG格式的最小存贮处理单元。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>