作者: 吕凤军编
出版社: 清华大学出版社
副标题: 做一个自己的Photoshop
出版年: 1999-12
页数: 177
定价: 24.00元
ISBN: 9787302035237
内容简介
数字图像处理是一门非常有趣而且实用的技术,一些学用的软件如Photoshp ,CorelPhotoPaint等的核心就是图像处理技术;然而市面上介绍图像处理的书大多理论性太强,涉及到大量的数学公式,读过很多章后也没有一个感性认识,使得许多对图像处理感兴起的读者望而生畏。本书正是为这样的读者编写的。
本书*介绍了Windows 位图结构和调色板的概念,为后面的学习作准备。随后,收浅入深、结合实例、生动形象地介绍了图像处理中最常用的算法,如几何变换、平滑、锐化、半影调、抖动、直方图修正、彩色变换、腐蚀和膨胀、细化、骨架和提取、边沿检测与抽取、houg变换、轮廓跟踪、图像检测、模板匹配、图像压缩编码、JPEG压缩编码标准等。最后,介绍了非学实用的图像处理编程控件Lead、视频游戏编写常用工具DirectDraw以及简单的多媒体编码技术。
本书语言简洁流畅、风趣幽默,复杂的算法、深奥的公式无生动形象地呈出在读者面前,使读者在轻松愉快的学习气氛中逐步领略数字图像处理技术的魅力。附盘中给出了书中实例的C语言源程序及图像文件,可在Windows 环境下直接运行。
本书适用于数字图像处理技术的初学者及C语言编程爱好者。
目 录
第一章 Windows 位图和调色板
1.1 位衅和调色板的概念
1.2 bmp文件格式
1.3 显示一个bmp文件的C程序
第二章 图像的几何变换
2.1 平移
2.2 旋转
2.3 镜象
2.4 转置
2.5 缩放
第三章 图像的平滑、锐化
3.1 平滑
3.2 中值滤波
3.3 锐化
第四章 图像的半影调和抖动技术
4.1 图案法
4.2 抖动法
4.3 将bmp文件转换为txt文件
第五章 直方图修正和彩色变换
5.1 反色
5.2 彩色图转达灰度图
5.3 真彩图转256色图
5.4 对比度扩展
5.5 削波
5.6 阈值化
5.7 灰度窗口变换
5.8 灰度直方图统计
5.9 灰度直方图均衡
第六章 腐蚀、膨胀、细化算法
6.1 腐蚀
6.2 膨胀
6.3 开
6.4 闭
6.5 细化
第七章 边沿检测与轮廓、提取跟踪
7.1 边沿检测
7.2 Hough变换
7.3 轮廓提取
7.4 种子填充
7.5 轮廓跟踪
第八章 图像的检测及模板匹配
8.1 投影法
8.2 差影法
8.3 模板匹配
第九章 图像压缩编码及JPEG压缩编码标准
9.1 哈夫曼编码
9.2 行程编码
9.3 JZW算法的大体思想
9.4 JPEG压缩编码标准
第十章 图像处理编码工具及简单的多媒体编程
10.1 LeadTools
10.2 DirectDraw
10.3 简单的多媒体编程
该书已经买不到了。本文主要参考了
第9章 图像压缩编码及JPEG压缩编码标准 电子版
数字图像处理编成入门笔记——第9章 图象的压缩编码,JPEG压缩编码标准
从信息熵的角度来看,数据压缩是一种怎样的过程?
一、为什么要压缩
在介绍图象的压缩编码之前,先考虑一个问题:为什么要压缩?
其实这个问题不用我回答,你也能想得到。因为图象信息的数据量实在是太惊人了。举一个例子就明白:一张A4(210mm×297mm) 幅面的照片,若用中等分辨率(300dpi)的扫描仪按真彩色扫描,其数据量为多少?让我们来计算一下:共有(300×210/25.4) ×(300×297/25.4)个象素,每个象素占3个字节,其数据量为26M字节,其数据量之大可见一斑了。
如今在Internet上,传统基于字符界面的应用逐渐被能够浏览图象信息的WWW(World Wide Web)方式所取代。WWW尽管漂亮,但是也带来了一个问题:图象信息的数据量太大了,本来就已经非常紧张的网络带宽变得更加不堪重负,使得World Wide Web变成了World Wide Wait。
总之,大数据量的图象信息会给存储器的存储容量,通信干线信道的带宽,以及计算机的处理速度增加极大的压力。单纯靠增加存储器容量,提高信道带宽以及计算机的处理速度等方法来解决这个问题是不现实的,这时就要考虑压缩。
二、压缩的分类
压缩的理论基础是信息论。从信息论的角度来看,压缩就是去掉信息中的冗余,即保留不确定的信息,去掉确定的信息可推知的,也就是用一种更接近信息本质的描述来代替原有冗余的描述。这个本质的东西就是信息量即不确定因素。
压缩可分为两大类:第一类压缩过程是可逆的,也就是说,从压缩后的图象能够完全恢复出原来的图象,信息没有任何丢失,称为无损压缩;第二类压缩过程是不可逆的,无法完全恢复出原图象,信息有一定的丢失,称为有损压缩。
选择哪一类压缩,要折衷考虑,尽管我们希望能够无损压缩,但是通常有损压缩的压缩比(即原图象占的字节数与压缩后图象占的字节数之比,压缩比越大,说明压缩效率越高)比无损压缩的高。
图象压缩一般通过改变图象的表示方式来达到,因此压缩和编码是分不开的。图象压缩的主要应用是图象信息的传输和存储,可广泛地应用于广播电视、电视会议、计算机通讯、传真、多媒体系统、医学图象、卫星图象等领域。
三、压缩编码方式
压缩编码的方法有很多,主要分成以下四大类:(1)象素编码;(2)预测编码;(3)变换编码;(4)其它方法。
1.象素编码
所谓象素编码是指,编码时对每个象素单独处理,不考虑象素之间的相关性。在象素编码中常用的几种方法有:
(1)脉冲编码调制(Pulse Code Modulation,简称PCM);
(2)熵编码(Entropy Coding);
(3)行程编码(Run Length Coding);
(4)位平面编码(Bit Plane Coding)。
2.预测编码
所谓预测编码是指,去除相邻象素之间的相关性和冗余性,只对新的信息进行编码。举个简单的例子,因为象素的灰度是连续的,所以在一片区域中,相邻象素之间灰度值的差别可能很小。如果我们只记录第一个象素的灰度,其它象素的灰度都用它与前一个象素灰度之差来表示,就能起到压缩的目的。如248,2,1,0,1,3,实际上这6个象素的灰度是248,250,251,251,252,255。表示250需要8个比特,而表示2只需要两个比特,这样就实现了压缩。
常用的预测编码有Δ调制(Delta Modulation,简称DM);微分预测编码(Differential Pulse Code Modulation,DPCM),具体的细节在此就不详述了。
3.变换编码
所谓变换编码是指,将给定的图象变换到另一个数据域如频域上,使得大量的信息能用较少的数据来表示,从而达到压缩的目的。变换编码有很多,如
(1)离散傅立叶变换(Discrete Fourier Transform,简称DFT);
(2)离散余弦变换(Discrete Cosine Transform,简称DCT);
(3)离散哈达玛变换(Discrete Hadamard Transform,简称DHT)。
4.其它编码
其它的编码方法也有很多,如混合编码(Hybird Coding)、矢量量化(Vector Quantize,VQ) 、LZW算法。在这里,我们只介绍LZW算法的大体思想。
值得注意的是,近些年来出现了很多新的压缩编码方法,如使用人工神经元网络(Artificial Neural Network,简称ANN)的压缩编码算法、分形(Fractl)、小波(Wavelet) 、基于对象(Object Based)的压缩编码算法、基于模型(Model –Based)的压缩编码算法(应用在MPEG4及未来的视频压缩编码标准中)。这些都超出了本书的范围。
本章的最后,我们将以JPEG压缩编码标准为例,看看上面的几种编码方法在实际的压缩编码中是怎样应用的。
四、熵编码之哈夫曼编码
哈夫曼(Huffman)编码是一种常用的压缩编码方法,是Huffman于1952年为压缩文本文件建立的。它的基本原理是频繁使用的数据用较短的代码代替,较少使用的数据用较长的代码代替,每个数据的代码各不相同。这些代码都是二进制码,且码的长度是可变的。
举个例子:假设一个文件中出现了8种符号S0,S1,S2,S3,S4,S5,S6,S7,那么每种符号要编码,至少需要3比特(即,三个二进制bit位)。假设编码成000,001,010,011,100,101,110,111(称做码字)。那么符号序列“S0 S1 S7 S0 S1 S6 S2 S2 S3 S4 S5 S0S0 S1”编码后变成“000 001 111 000 001 110 010 010 011 100 101 000 000 001”,共用了42比特。我们发现S0,S1,S2这三个符号出现的频率比较大,其它符号出现的频率比较小,如果我们采用一种编码方案使得S0,S1,S2的码字短,其它符号的码字长,这样就能够减少占用的比特数。
例如,我们采用这样的编码方案:S0到S7的码字分别01,11,101,0000,0001,0010,0011,100,那么上述符号序列变成011110001110011101101000000010010010111,共用了39比特,尽管有些码字如S3,S4,S5,S6变长了(由3位变成4位),但使用频繁的几个码字如S0,S1变短了,所以实现了压缩。
上述的编码是如何得到的呢?随意乱写是不行的。编码必须保证不能出现一个码字和另一个的前几位相同的情况,比如说,如果S0的码字为01,S2的码字为011,那么当序列中出现011时,你不知道是S0的码字后面跟了个1,还是完整的一个S2的码字。我们给出的编码能够保证这一点。
下面给出具体的Huffman编码算法。
(1) 首先统计出每个符号出现的频率,上例S0到S7的出现频率分别为4/14,3/14,2/14,1/14,1/14,1/14,1/14,1/14。
(2) 从左到右把上述频率按从小到大的顺序排列。
(3) 每一次选出最小的两个值,作为二叉树的两个叶子节点,将和作为它们的根节点,这两个叶子节点不再参与比较,新的根节点参与比较。
(4) 重复(3),直到最后得到和为1的根节点。
(5) 将形成的二叉树的左节点标0,右节点标1。把从最上面的根节点到最下面的叶子节点途中遇到的0,1序列串起来,就得到了各个符号的编码。
上面的例子用Huffman编码的过程如图9.1所示,其中圆圈中的数字是新节点产生的顺序。可见,我们上面给出的编码就是这么得到的
产生Huffman编码需要对原始数据扫描两遍。第一遍扫描要精确地统计出原始数据中,每个值出现的频率,第二遍是建立Huffman树并进行编码。由于需要建立二叉树并遍历二叉树生成编码,因此数据压缩和还原速度都较慢,但简单有效,因而得到广泛的应用。源程序就不给出了,有兴趣的读者可以自己实现。
五、行程编码
行程编码(Run Length Coding)的原理也很简单:将一行中颜色值相同的相邻象素用一个计数值和该颜色值来代替。例如aaabccccccddeee可以表示为3a1b6c2d3e。如果一幅图象是由很多块颜色相同的大面积区域组成,那么采用行程编码的压缩效率是惊人的。然而,该算法也导致了一个致命弱点,如果图象中每两个相邻点的颜色都不同,用这种算法不但不能压缩,反而数据量增加一倍。所以现在单纯采用行程编码的压缩算法用得并不多,PCX文件算是其中的一种。
六、LZW算法的大体思想
LZW是一种比较复杂的压缩算法,其压缩效率也比较高。我们在这里只介绍一下它的基本原理:LZW把每一个第一次出现的字符串用一个数值来编码,在还原程序中再将这个数值还成原来的字符串。例如:用数值0x100代替字符串“abccddeee”,每当出现该字符串时,都用0x100代替,这样就起到了压缩的作用。至于0x100与字符串的对应关系则是在压缩过程中动态生成的,而且这种对应关系隐含在压缩数据中,随着解压缩的进行这张编码表会从压缩数据中逐步得到恢复,后面的压缩数据再根据前面数据产生的对应关系产生更多的对应关系,直到压缩文件结束为止。LZW是无损的。GIF文件采用了这种压缩算法。要注意的是,LZW算法由Unisys公司在美国申请了专利,要使用它首先要获得该公司的认可。
七、JPEG 压缩编码标准
JPEG 是联合图象专家组(Joint Picture Expert Group)的英文缩写,是国际标准化组织(ISO)和CCITT 联合制定的静态图象的压缩编码标准。和相同图象质量的其它常用文件格式(如 GIF,TIFF,PCX)相比,JPEG 是目前静态图象中压缩比最高的。我们给出具体的数据来对比一下。例图采用 Windows95 目录下的 Clouds.bmp,原图大小为 640*480,256 色。用工具SEA(version1.3)将其分别转成 24 位色 BMP、24 位色 JPEG、GIF(只能转成 256 色)压缩格式、24 位色 TIFF 压缩格式、24 位色 TGA 压缩格式。得到的文件大小(以字节为单位)分别为:921,654,17,707,177,152,923,044,768,136。可见 JPEG 比其它几种压缩比要高得多,而图象质量都差不多(JPEG 处理的颜色只有真彩和灰度图)。
正是由于 JPEG 的高压缩比,使得它广泛地应用于多媒体和网络程序中,例如 HTML 语法中选用的图象格式之一就是 JPEG(另一种是 GIF)。这是显然的,因为网络的带宽非常宝贵,选用一种高压缩比的文件格式是十分必要的。
JPEG 有几种模式,其中最常用的是基于 DCT 变换的顺序型模式,又称为基线系统(Baseline),以下将针对这种格式进行讨论。
- JPEG 的压缩原理
JPEG 的压缩原理其实上面介绍的那些原理的综合,博采众家之长,这也正是 JPEG 有高压缩比的原因。其编码器的流程为:
解码器基本上为上述过程的逆过程:
8×8 的图象经过 DCT 变换后,其低频分量都集中在左上角,高频分量分布在右下角(DCT变换实际上是空间域的低通滤波器)。由于该低频分量包含了图象的主要信息(如亮度),而高频与之相比,就不那么重要了,所以我们可以忽略高频分量,从而达到压缩的目的。如何将高频分量去掉,这就要用到量化,它是产生信息损失的根源。这里的量化操作,就是将某一个值除以量化表中对应的值。由于量化表左上角的值较小,右上角的值较大,这样就起到了保持低频分量,抑制高频分量的目的。JPEG 使用的颜色是 YUV 格式。我们提到过,Y 分量代表了亮度信息,UV 分量代表了色差信息。相比而言,Y 分量更重要一些。我们可以对Y 采用细量化,对 UV 采用粗量化,可进一步提高压缩比。所以上面所说的量化表通常有两张,一张是针对 Y 的;一张是针对 UV 的。
后文略