数字图像处理编程前言
<p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;"></span> </p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">前言</span></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">当你看到那些用</span><span lang="EN-US">PhotoShop</span><span style="FONT-FAMILY: 宋体;">或</span><span lang="EN-US">Corel PhotoPaint</span><span style="FONT-FAMILY: 宋体;">等软件绘制出的精美图片,并被它们表现出的神奇效果所折服时,是否曾想到做一个自己的图象处理软件?就象</span><span lang="EN-US">PhotoShop</span><span style="FONT-FAMILY: 宋体;">那样。“怎么可能,吹牛吧!”你一定会这么说。呵呵,别着急,待我慢慢讲来。</span></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">我是一名计算机系的博士研究生,一直对图象处理、多媒体的东西非常着迷,选修过不少这方面的课程,做过许多有意思的实验。我常常有这样一种冲动:把我做过的这些东西拿出来与大家一起分享,把有关的原理、算法、程序介绍给大家。</span></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">有这种想法的另一个原因是:数字图象处理</span><span lang="EN-US">(Digital Image Processing)</span><span style="FONT-FAMILY: 宋体;">技术是一门非常实用的技术。</span><span lang="EN-US">PhotoShop</span><span style="FONT-FAMILY: 宋体;">的核心就是图象处理技术。而目前有关这方面的资料太少了,已有的书不是内容太陈旧</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体;">还停留在</span><span lang="EN-US">DOS</span><span style="FONT-FAMILY: 宋体;">下的</span><span lang="EN-US">CGA</span><span style="FONT-FAMILY: 宋体;">,</span><span lang="EN-US">EGA</span><span style="FONT-FAMILY: 宋体;">甚至汇编编程阶段</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体;">,就是理论性太强,不容易懂,没有例子,看过以后也不知道该如何编程。我想:如果能够通过实际的例子来介绍这些图象处理算法,大家就很容易理解了。</span></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">这本书的侧重点是介绍数字图象编程,因此在内容的选择上也有所考虑,介绍的都是图象处理中的基本算法,大多可以用程序实现。而那些理论性很强,不易编程的算法,在这本书里是找不到的。书中的每一章可以看做是一个专题,后面都附有实际运行通过的源程序例子,全部程序都采用</span><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体;">编程</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体;">不过我并不打算介绍</span><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体;">的编程,这已经超出了本书的范围</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体;">。</span></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">下面是本书的主要内容:</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US">(1)<span style="FONT: 7pt 'Times New Roman';"> </span></span><span lang="EN-US">windows</span><span style="FONT-FAMILY: 宋体;">位图</span><span lang="EN-US">bitmap(</span><span style="FONT-FAMILY: 宋体;">即</span><span lang="EN-US">bmp</span><span style="FONT-FAMILY: 宋体;">文件</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体;">的结构和调色版的概念;</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US">(2)<span style="FONT: 7pt 'Times New Roman';"> </span></span><span style="FONT-FAMILY: 宋体;">图象的平移、旋转、镜象变换、转置变换、放缩;</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US">(3)<span style="FONT: 7pt 'Times New Roman';"> </span></span><span style="FONT-FAMILY: 宋体;">图象的平滑</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体;">去噪声</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体;">、锐化;</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US">(4)<span style="FONT: 7pt 'Times New Roman';"> </span></span><span style="FONT-FAMILY: 宋体;">图象的半影调、抖动技术;</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US">(5)<span style="FONT: 7pt 'Times New Roman';"> </span></span><span style="FONT-FAMILY: 宋体;">图象的直方图修正、彩色变换;</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US">(6)<span style="FONT: 7pt 'Times New Roman';"> </span></span><span style="FONT-FAMILY: 宋体;">图象的腐蚀和膨胀效果、细化算法、骨架的提取;</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US">(7)<span style="FONT: 7pt 'Times New Roman';"> </span></span><span style="FONT-FAMILY: 宋体;">图象的边沿检测与抽取、</span><span lang="EN-US">hough</span><span style="FONT-FAMILY: 宋体;">变换、轮廓跟踪;</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US">(8)<span style="FONT: 7pt 'Times New Roman';"> </span></span><span style="FONT-FAMILY: 宋体;">图象的检测、模板匹配;</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US">(9)<span style="FONT: 7pt 'Times New Roman';"> </span></span><span style="FONT-FAMILY: 宋体;">图象的压缩编码、</span><span lang="EN-US">JPEG</span><span style="FONT-FAMILY: 宋体;">压缩编码标准;</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US">(10)</span> <span style="FONT-FAMILY: 宋体;">图象处理编程工具</span><span lang="EN-US">lead.ocx</span><span style="FONT-FAMILY: 宋体;">、</span><span lang="EN-US">DirectDraw</span><span style="FONT-FAMILY: 宋体;">及简单的多媒体编程技术。</span></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">这里面有一些非常有趣的应用。例如第</span><span lang="EN-US">4</span><span style="FONT-FAMILY: 宋体;">章介绍了一个将一幅图象转换成</span><span lang="EN-US">ASCII</span><span style="FONT-FAMILY: 宋体;">码的算法。对于喜欢上</span><span lang="EN-US">BBS</span><span style="FONT-FAMILY: 宋体;">的读者,这个算法是非常有用的。在第</span><span lang="EN-US">10</span><span style="FONT-FAMILY: 宋体;">章,介绍了一款非常实用的图象处理编程工具</span><span lang="EN-US">lead.ocx</span><span style="FONT-FAMILY: 宋体;">,利用它可以很快地开发出非常棒的图象处理软件。</span></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">学习了这些内容,你就掌握了图象处理中的一些最常用的算法。当然,这些内容还不足以编出象</span><span lang="EN-US">PhotoShop</span><span style="FONT-FAMILY: 宋体;">那样“牛”的软件来</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体;">人家毕竟是</span><span lang="EN-US">Adobe</span><span style="FONT-FAMILY: 宋体;">公司的看家宝贝嘛!</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体;">。但是要知道:万丈高楼平地起,很多非常复杂的功能可能是一些简单方法的叠加。相信你自己吧,你一定能够成为图象处理大师的。</span></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">是不是还有些信心不足?好,让我变一个戏法给你瞧瞧。</span></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;"><span lang="EN-US"><img height="132" src="mk:@MSITStore:H:\200541352851453.chm::/2.files/image001.gif" width="454" vshapes="_x0000_i1025" alt=""/></span></span></p><span style="FONT-FAMILY: 宋体;"><span lang="EN-US"><p align="center" style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center;"><b><span style="FONT-FAMILY: 宋体;">图1</span><span> </span></b><b><span style="FONT-FAMILY: 宋体;">普通文本</span><span lang="EN-US"></span></b></p><p align="center" style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center;"><span lang="EN-US"><img height="126" src="mk:@MSITStore:H:\200541352851453.chm::/2.files/image002.gif" width="452" vshapes="_x0000_i1026" alt=""/> </span></p><p align="center" style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center;"><b><span style="FONT-FAMILY: 宋体;">图2</span><span> </span></b><b><span style="FONT-FAMILY: 宋体;">抽取骨架后的文本</span><span lang="EN-US"></span></b></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">上面有两幅图,图1是未经处理的普通文字,经过骨架抽取,变成了图2的样子。这可不是用</span><span lang="EN-US">PhotoShop</span><span style="FONT-FAMILY: 宋体;">做的,而是我自己编的程序处理的。怎么样?还不错吧。</span></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">有人会问:“在编这样的程序之前有什么要求吗?”回答是:“有,只有两条:</span><span lang="EN-US">(1)</span><span style="FONT-FAMILY: 宋体;">对</span><span lang="EN-US">c</span><span style="FONT-FAMILY: 宋体;">语言比较熟悉;</span><span lang="EN-US">(2)</span><span style="FONT-FAMILY: 宋体;">曾经编过</span><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体;">的程序。</span></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">有三点要说明:</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US">(1)<span style="FONT: 7pt 'Times New Roman';"> </span></span><span style="FONT-FAMILY: 宋体;">文中出现的所有例子都在我自己的机器上编译运行通过,我使用的编程语言为</span><span lang="EN-US">Visual C++4.1</span><span style="FONT-FAMILY: 宋体;">,运行环境为中文</span><span lang="EN-US">Windows95</span><span style="FONT-FAMILY: 宋体;">或</span><span lang="EN-US">Windows98</span><span style="FONT-FAMILY: 宋体;">。程序采用的是</span><span lang="EN-US">Windows API</span><span style="FONT-FAMILY: 宋体;">接口,全部采用</span><span lang="EN-US">C</span><span style="FONT-FAMILY: 宋体;">语言编写,并未用到</span><span lang="EN-US">C++</span><span style="FONT-FAMILY: 宋体;">的东西,所以也可以在其他的</span><span lang="EN-US">C</span><span style="FONT-FAMILY: 宋体;">编译器,如</span><span lang="EN-US">Borland C</span><span style="FONT-FAMILY: 宋体;">,</span><span lang="EN-US">Watcom C</span><span style="FONT-FAMILY: 宋体;">下编译通过</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体;">可能有些函数的名称有些差别,所以建议使用</span><span lang="EN-US">Visual C++4.0</span><span style="FONT-FAMILY: 宋体;">,</span><span lang="EN-US">4.1</span><span style="FONT-FAMILY: 宋体;">,</span><span lang="EN-US">4.2</span><span style="FONT-FAMILY: 宋体;">,</span><span lang="EN-US">5.0</span><span style="FONT-FAMILY: 宋体;">版本都可以</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体;">。尽管在</span><span lang="EN-US">Windows3.x</span><span style="FONT-FAMILY: 宋体;">平台上也能编译运行这些程序,但强烈建议使用</span><span lang="EN-US">Windows95</span><span style="FONT-FAMILY: 宋体;">或</span><span lang="EN-US">Windows98</span><span style="FONT-FAMILY: 宋体;">,因为</span><span lang="EN-US">32</span><span style="FONT-FAMILY: 宋体;">位的虚拟内存环境用起来爽极了。</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US">(2)<span style="FONT: 7pt 'Times New Roman';"> </span></span><span style="FONT-FAMILY: 宋体;">既然是编图象的程序,当然要把机器的分辨率和颜色数调大一点了,这样显示出来的图象才显得漂亮</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体;">我用的是</span><span lang="EN-US">800*600</span><span style="FONT-FAMILY: 宋体;">,</span><span lang="EN-US">16bits</span><span style="FONT-FAMILY: 宋体;">即</span><span lang="EN-US">64K</span><span style="FONT-FAMILY: 宋体;">色</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体;">。另外,装备一些好的图象软件是绝对必要的。我经常使用以下几种软件:</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US" style="FONT-FAMILY: Wingdings;">l<span style="FONT: 7pt 'Times New Roman';"> </span></span><span lang="EN-US">Sea</span><span style="FONT-FAMILY: 宋体;">,在</span><span lang="EN-US">DOS</span><span style="FONT-FAMILY: 宋体;">下的看图工具,而且可以很方便地转换图象格式;</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US" style="FONT-FAMILY: Wingdings;">l<span style="FONT: 7pt 'Times New Roman';"> </span></span><span lang="EN-US">AcdSee</span><span style="FONT-FAMILY: 宋体;">,一个小巧玲珑的看图软件;</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US" style="FONT-FAMILY: Wingdings;">l<span style="FONT: 7pt 'Times New Roman';"> </span></span><span lang="EN-US">Ulead IPhotoPlus</span><span style="FONT-FAMILY: 宋体;">,最大的优点是可以进行调色板的处理;</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US" style="FONT-FAMILY: Wingdings;">l<span style="FONT: 7pt 'Times New Roman';"> </span></span><span lang="EN-US">Windows PaintBrush</span><span style="FONT-FAMILY: 宋体;">,不要以为画笔的功能很弱,其实很多情况下还是很有用的;</span></p><p style="LINE-HEIGHT: 18pt;"><span lang="EN-US" style="FONT-FAMILY: Wingdings;">l<span style="FONT: 7pt 'Times New Roman';"> </span></span><span lang="EN-US">PhotoShop</span><span style="FONT-FAMILY: 宋体;">,就不用我多说了。</span></p><p class="MsoBodyTextFirstIndent" style="LINE-HEIGHT: 18pt;"><span lang="EN-US">(3)<span style="FONT: 7pt 'Times New Roman';"> </span></span><span style="FONT-FAMILY: 宋体;">图象处理的算法之中不可避免地要遇到一些数学的公式,霍金说过:“每多一个公式就要吓跑一半读者”,我将尽可能用通俗的语言将这些原理,公式讲解出来,力求做到公式尽可能的少;但遇到只有用公式才能讲明白的时候,我也决不回避,希望大家能耐着性子看下去。</span></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">本书主要参考的是我上数字图象处理课时的教材,作者是朱志刚老师,在此表示感谢。还要感谢我的好朋友袁昱,诸晓文和清华出版社的各位老师,没有他们的帮助,这本书的的出版是不可能的。</span></p><p style="LINE-HEIGHT: 18pt;"><span style="FONT-FAMILY: 宋体;">好了,不多说了,现在就让我们进入五彩缤纷的图象世界吧!</span></p></span></span> 本人水平不够 。 <div>优秀的视频网站,大家看看啊<a href="http://www.abab123.com/bbs/down.asp?html=707637" target="_blank"><font color="#004f97">http://www.abab123.com/bbs/down.asp?html=707637</font></a></div>
页:
[1]