图书前言

 前    言

  本书是2005年年初出版的《C/C++图像处理编程》一书的姊妹书。在编写《C/C++图像处理编程》一书时我有一个观点,即图像的处理与编程环境无关。我原认为该书中的程序虽然是以C语言编写的,但是学好以后很容易移植到其他编程环境,譬如Visual C++中。现在我才认识到这个观点并不全面。虽然,它对于有较好编程基础的读者来说也许是正确的,但是对于那些一开始就学习C++编程的读者来说情况就不同了。C语言与C++尽管在语言结构上比较接近,但毕竟有一定的差异。对于初学者来说,阅读此书还有一定的困难,同时希望他们学完书中的编程原理后再应用到自己的工作中也不现实。因此,最好能有一本既可从中学到一些新的知识,又能花费较少精力就可拿来使用的图书。这样就萌发了为这些读者用C++再写一本书的念头,于是决定与我校从事多年C++教学工作的金登男副教授一起合作编写本书。

  本书与《C/C++图像处理编程》在取材和编程方法方面基本相似,都是选择图像处理应用中最为常用的图像基础知识、图像增强与图像分析进行介绍,选材以便于编程实现并具有实用价值为标准。两者的差别在于后者主要是用C语言编写的,从原理出发一步一步编写自己的程序,除了底层少数基本子程序外基本上是“自给自足”的。而本书则是用C++编写的,并且在编程过程中尽量使用MFC中的现有函数。因此,本书内容不是《C/C++图像处理编程》一书的简单翻版。

  实际上,Visual C++.NET与Visual C++在图形、图像的编程方面并没有实质性的差异。选择Visual C++.NET作为本书的编程环境有以下几方面的原因。

  第一,Visual Studio.NET是一个集成了多种编程语言的开发环境,越来越多的读者以它作为学习编程和开发软件的工作平台,例如计算机专业的学生。在这个平台上,Visual C++.NET相对于其他编程语言来说变化不大,它延续了MFC用于创建Windows应用程序的强大功能,以及高效的性能和灵活的控制性,并且有了新的基于属性的编程功能。

  第二,Visual C++.NET提供了多种常用图像文件格式(如BMP、TIF、GIF、JPEG与PNG等)的输入/输出模块。同时,ATL中的CImage类又极大地简化了图像数据的操作。

  第三,通过创建Visual C++环境下的CImage仿真类,本书内容同样可以适用于VC++编程环境。

  最后,也是很重要的一个原因—— 目前国内尚没有这方面的图书。虽然也有一些已经冠名Visual C++.NET图像处理编程或类似书名的图书,但是编程方法还是老的一套,没有跳出设备相关位图(DDB)与设备无关位图(DIB)概念的条框,编程方法比较复杂、繁琐、低效。

  Visual C++.NET环境以CImage类为基础,Visual C++环境则以Win32中新的位图结构DIBSECTION为基础,只用了CreateDIBSection、GetDIBColor-Table、SetDIBColorTable与BitBlt等4个Windows GDI函数就实现了图像的读入、显示与存储,并创建了CImage仿真类,完全跳出了DDB、DIB概念的条框,使得处理方法返朴归真、大为简化。在图像文件的读写、调色板数据的存取等方面效果尤为明显。

  本书内容可分4个部分,第1部分(第1章)为图像基础知识,介绍了颜色模式,图像显示原理和图像文件的结构;第2部分(第2~5章)为图像编程初步,介绍了Visual C++.NET应用程序框架的建立,图形编程,图像的存取、显示与生成,以及图像的变化;第3部分(第6~12章)为图像处理编程,介绍了图像的点处理,邻域处理,二值图像的处理,形态学图像处理,彩色图像的处理,轮廓跟踪与线段编码;第4部分(第13和第14章)为Visual C++图像编程,介绍了CImage仿真类的建立与图像文件的读写。

  以Visual C++.NET为编程环境的读者只需阅读本书的前12章,对图像文件感兴趣时再阅读第13和第14章。以Visual C++为编程环境的读者可在读完第1章之后插入阅读第13、14章,然后再回来接着阅读第3章开始的内容。

  本书演示程序层次分明,上层是窗口与菜单事件的响应程序,中间层以CImage类表示图像,底层则采用C语言的二维数组结构表示图像。三者中,后者由于采用C语言的基本数据结构,在各种编程环境(C、C++)下都可以使用。

  随书光盘提供了演示程序的源代码以及处理所需的图像实例。第3~5章的演示程序名为IProcessP,第6~12章的演示程序名为IProcessN,第13和第14章的演示程序名为ImageShow。其中,前面两个演示程序是在VC++.NET环境下编制的,与它们对应的Visual C++版本演示程序名分别为ImageP与ImageN,两种版本程序的创建过程有所不同,但程序代码基本相同,而在功能上则完全一样。ImageShow则是在Visual C++环境下编制的,是图像文件的输入/输出模块,支持BMP、TIF、GIF、PCX、TGA与JPEG等6种常用图像文件格式。它是编制ImageP与ImageN程序的基础。这些演示程序可以作为初学者编写程序的基础。

  本书可作为计算机及相关专业数字图像处理的教材或教学参考书使用,也可作为电子、信息类专业的学生与科研人员在图像处理方面的参考书或程序库。

  由于本书侧重图像处理编程知识的介绍,对于图像处理理论的介绍只能是初步的,无法做到全面、完整,若需要进一步研究,请参阅有关数字图像处理的图书。

  限于篇幅,对于Visual C++.NET与Visual C++编程方面的专门知识本书只能略作介绍,不可能十分详尽,如需作进一步的了解,请参阅相关编程图书。

  本书第2部分(第2~5章)由金登男编写,其余章节由陆宗骐编写。

  演示程序中的菌丝图像及相关处理方法选自我的学生陈芳的硕士学位论文。

  本书的编写再次得到华东理工大学教材立项的资助,对于学校教务部门的关心和支持在此深表谢意。

  最后,对于清华大学出版社第五事业部策划部主任、本书的组稿编辑胡伟卷同志在出版过程中的支持和帮助表示由衷的感谢。

  

                                                 陆宗骐