图像处理与计算机视觉基础,经典以及最近发展Byxdyang(杨晓冬xdyang.ustc@gmail.com)一、绪论1.为什么要写这篇文章从2002年到现在,接触图像快十年了。虽然没有做出什么很出色的工作,不过在这个领域摸爬滚打了十年之后,发现自己对图像处理和计算机视觉的感情越来越深厚。下班之后看看相关的书籍和文献是一件很惬意的事情。平常的一大业余爱好就是收集一些相关的文章,尤其是经典的文章,到现在我的电脑里面已经有了几十G的文章。写这个文档的想法源于我前一段时间整理文献时的一个突发奇想,既然有这个多文献,何不整理出其中的经典,抓住重点来阅读,同时也可以共享给大家。于是当时即兴写了一个《图像处理与计算机视觉中的经典论文》。现在来看,那个文档写得很一般,所共享的论文也非常之有限。就算如此,还是得到了一些网友的夸奖,心里感激不尽。因此,一直想下定决心把这个工作给完善,力求做到尽量全面。本文是对现有的图像处理和计算机视觉的经典书籍(后面会有推荐)的一个补充。一般的图像处理书籍都是介绍性的介绍某个方法,在每个领域内都会引用几十上百篇参考文献。有时候想深入研究这个领域的时候却发现文献太多,不知如何选择。但实际上在每个领域都有那么三五篇抑或更多是非读不可的经典文献。这些文献除了提出了很经典的算法,同时他们的Introduction和Relatedwork也是对所在的领域很好的总结。读通了这几篇文献也就等于深入了解了这个领域,比单纯的看书收获要多很多。写本文的目的就是想把自己所了解到的各个领域的经典文章整理出来,不用迷失在参考文献的汪洋大海里。2.图像处理和计算机视觉的分类按照当前流行的分类方法,可以分为以下三部分:图像处理:对输入的图像做某种变换,输出仍然是图像,基本不涉及或者很少涉及图像内容的分析。比较典型的有图像变换,图像增强,图像去噪,图像压缩,图像恢复,二值图像处理等等。基于阈值的图像分割也属于图像处理的范畴。一般处理的是单幅图像。图像分析:对图像的内容进行分析,提取有意义的特征,以便于后续的处理。处理的仍然是单幅图像。计算机视觉:对图像分析得到的特征进行分析,提取场景的语义表示,让计算机具有人眼和人脑的能力。这时处理的是多幅图像或者序列图像,当然也包括部分单幅图像。关于图像处理,图像分析和计算机视觉的划分并没有一个很统一的标准。一般的来说,图像处理的书籍总会或多或少的介绍一些图像分析和计算机视觉的知识,比如冈萨雷斯的数字图像处理。而计算机视觉的书籍基本上都会包括图像处理和图像分析,只是不会介绍的太详细。其实图像处理,图像分析和计算机视觉都可以纳入到计算机视觉的范畴:图像处理-低层视觉(lowlevelvision),图像分析-中间层视觉(middlelevelvision),计算机视觉-高层视觉(highlevelvision)。这是一般的计算机视觉或者机器视觉的划分方法。在本文中,仍然按照传统的方法把这个领域划分为图像处理,图像分析和计算机视觉。3.图像处理和计算机视觉开源库以及编程语言选择目前在图像处理中有两种最重要的语言:c/c++和matlab。它们各有优点:c/c++比较适合大型的工程,效率较高,而且容易转成硬件语言,是工业界的默认语言之一。而matlab实现起来比较方便,适用于算法的快速验证,而且matlab有成熟的工具箱可以使用,比如图像处理工具箱,信号处理工具箱。它们有一个共同的特点:开源的资源非常多。在学术界matlab使用的非常多,很多作者给出的源代码都是matlab版本。最近由于OpenCV的兴起和不断完善,c/c++在图像处理中的作用越来越大。总的来说,c/c++和matlab都必须掌握,最好是精通,当然侧重在c/c++上对找工作会有很大帮助。至于开源库,个人非常推荐OpenCV,主要有以下原因:(1)简单易入手。OpenCV进入OpenCV2.x的时代后,使用起来越来越简单,接口越来越傻瓜化,越来越matlab化。只要会imread,imwrite,imshow和了解Mat的基本操作就可以开始入手了。(2)OpenCV有一堆图像处理和计算机视觉的大牛在维护,bug在逐步减少,每个新的版本都会带来不同的惊喜。而且它已经或者逐步在移植到不懂的平台,并提供了对Python的很好的支持。(3)在OpenCV上可以尝试各种最新以及成熟的技术,而不需要自己从头去写,比如人脸检测(Harr,LBP),DPM(LatentSVM),高斯背景模型,特征检测,聚类,hough变换等等。而且它还支持各种机器学习方法(SVM,NN,KNN,决策树,Boosting等),使用起来很简单。(4)文档内容丰富,并且给出了很多示例程序。当然也有一些地方文档描述不清楚,不过看看代码就很清楚了。(5)完全开源。可以从中间提取出任何需要的算法。(6)从学校出来后,除极少数会继续在学术圈里,大部分还是要进入工业界。现在在工业界,c/c++仍是主流,很多公司都会优先考虑熟悉或者精通OpenCV的。事实上,在学术界,现在OpenCV也大有取代matlab之势。以前的demo或者sourcecode,很多作者都愿意给出matlab版本的,然后别人再呼哧呼哧改成c版本的。现在作者干脆给出c/c++版本,或者自己集成到OpenCV中去,这样能快速提升自己的影响力。如果想在图像处理和计算机视觉界有比较深入的研究,并且以后打算进入这个领域工作的话,建议把OpenCV作为自己的主攻方向。如果找工作的时候敢号称自己精通OpenCV的话,肯定可以找到一份满意的工作。4.本文的特点和结构,以及适合的对象本文面向的对象是即将进入或者刚刚进入图像处理和计算机视觉领域的童鞋,可以在阅读书籍的同时参阅这些文献,能对书中提到的算法有比较深刻的理解。由于本文涉及到的范围比较广,如果能对计算机视觉的资深从业者也有一定的帮助,我将倍感欣慰。为了不至太误人子弟,每一篇文章都或多或少的看了一下,最不济也看了摘要(这句话实在整理之前写的,实际上由于精力有限,好多文献都只是大概扫了一眼,然后看了看google的引用数,一般在1000以上就放上来了,把这些文章细细品味一遍也是我近一两年之内的目标)。在成文的过程中,我本人也受益匪浅,希望能对大家也有所帮助。由于个人精力和视野的关系,有一些我未涉足过的领域不敢斗胆推荐,只是列出了一些引用率比较高的文章,比如摄像机标定和立体视觉。不过将来,由于工作或者其他原因,这些领域也会接触到,我会逐步增减这些领域的文章。尽管如此,仍然会有疏漏,忘见谅。同时文章的挑选也夹带了一些个人的喜好,比如我个人比较喜欢lowlevel方向的,尤其是IJCV和PAMI上面的文章,因此这方面也稍微多点,希望不要引起您的反感。如果有什么意见或者建议,欢迎mail我。文章和资源我都会在我的csdnblog和sinaishare同步更新。在此申明:这些论文的版权归作者及其出版商所有,请勿用于商业目的。个人blog:新浪iask地址:=868438本文的安排如下。第一部分是绪论。第二部分是图像处理中所需要用到的理论基础,主要是这个领域所涉及到的一些比较好的参考书籍。第三部分是计算机视觉中所涉及到的信号处理和模式识别文章。由于图像处理与图像分析太难区分了,第四部分集中讨论了它们。第五部分是计算机视觉部分。最后是小结。二、图像处理与计算机视觉相关的书籍1.数学我们所说的图像处理实际上就是数字图像处理,是把真实世界中的连续三维随机信号投影到传感器的二维平面上,采样并量化后得到二维矩阵。数字图像处理就是二维矩阵的处理,而从二维图像中恢复出三维场景就是计算机视觉的主要任务之一。这里面就涉及到了图像处理所涉及到的三个重要属性:连续性,二维矩阵,随机性。所对应的数学知识是高等数学(微积分),线性代数(矩阵论),概率论和随机过程。这三门课也是考研数学的三个组成部分,构成了图像处理和计算机视觉最基础的数学基础。如果想要更进一步,就要到网上搜搜林达华推荐的数学书目了。2.信号处理图像处理其实就是二维和三维信号处理,而处理的信号又有一定的随机性,因此经典信号处理和随机信号处理都是图像处理和计算机视觉中必备的理论基础。2.1经典信号处理信号与系统(第2版)AlanV.Oppenheim等著刘树棠译离散时间信号处理(第2版)A.V.奥本海姆等著刘树棠译数字信号处理:理论算法与实现胡广书(编者)2.2随机信号处理现代信号处理张贤达著统计信号处理基础:估计与检测理论StevenM.Kay等著罗鹏飞等译自适应滤波器原理(第4版)SimonHaykin著郑宝玉等译2.3小波变换信号处理的小波导引:稀疏方法(原书第3版)tephaneMalla著,戴道清等译2.4信息论信息论基础(原书第2版)ThomasM.Cover等著阮吉寿等译3.模式识别PatternRecognitionandMachineLearningBishop,ChristopherM.Springer模式识别(英文版)(第4版)西奥多里德斯著PatternClassification(2ndEdition)RichardO.Duda等著StatisticalPatternRecognition,3rdEditionAndrewR.Webb等著模式识别(第3版)张学工著4.图像处理与计算机视觉的书籍推荐图像处理,分析与机器视觉第三版Sonka等著艾海舟等译ImageProcessing,AnalysisandMachineVision这本书是图像处理与计算机视觉里面比较全的一本书了,几乎涵盖了图像视觉领域的各个方面。中文版的个人感觉也还可以,值得一看。数字图像处理第三版冈萨雷斯等著DigitalImageProcessing数字图像处理永远的经典,现在已经出到了第三版,相当给力。我的导师曾经说过,这本书写的很优美,对写英文论文也很有帮助,建议购买英文版的。计算机视觉:理论与算法RichardSzeliski著ComputerVision:TheoryandAlgorithm微软的Szeliski写的一本最新的计算机视觉著作。内容非常丰富,尤其包括了作者的研究兴趣,比如一般的书里面都没有的ImageStitching和ImageMatting等。这也从另一个侧面说明这本书的通用性不如Sonka的那本。不过作者开放了这本书的电子版,可以有选择性的阅读。第二版Harley等著引用达一万多次的经典书籍了。第二版到处都有电子版的。第一版曾出过中文版的,后来绝版了。网上也可以找到中英文版的电子版。计算机视觉:一种现代方法DAForsyth等著ComputerVision:AModernApproachMIT的经典教材。虽然已经过去十年了,还是值得一读。期待第二版Machinevision:theory,algorithms,practicalities第三版Davies著为数不多的英国人写的书,偏向于工业应用。数字图像处理第四版Pratt著DigitalImageProcessing写作风格独树一帜,也是图像处理领域很不错的一本书。网上也可以找到非常清晰的电子版。5.小结罗嗦了这么多,实际上就是几个建议:(1)基础书千万不可以扔,也不能低价处理给同学或者师弟师妹。不然到时候还得一本本从书店再买回来的。钱是一方面的问题,对着全新的书看完全没有看自己当年上过的课本有感觉。(2)遇到有相关的课,果断选修或者蹭之,比如随机过程,小波分析,模式识别,机器学习,数据挖掘,现代信号处理甚至泛函。多一些理论积累对将来科研和工作都有好处。(3)资金允许的话可以多囤一些经典的书,有的时候从牙缝里面省一点都可以买一本好书。不过千万不要像我一样只囤不看。三、计算机视觉中的信号处理与模式识别从