图像处理与计算机视觉 基础经典以及最近发展
Posted somebot
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像处理与计算机视觉 基础经典以及最近发展相关的知识,希望对你有一定的参考价值。
博主QQ:1356438802
QQ交流群:473383394——UVC&OpenCV47
************************************************************************************************************************************************************************************
在这里,我特别声明:本文章的源作者是 杨晓冬 (个人邮箱:xdyang.ustc@gmail.com)。原文的链接是
http://www.iask.sina.com.cn/u/2252291285/ish。版权归 杨晓冬 朋友所有。
我非常感谢原作者辛勤地编写本文章,并愿意共享出来。我也希望转载本文的各位朋友,要注明原作者和出处,以尊重原作者!
***************************************************************************************************************************************************************************************
图像处理与计算机视觉基础,经典以及最近发展
By xdyang(杨晓冬xdyang.ustc@gmail.com)
一、 绪论
1. 为什么要写这篇文章
从2002年到现在,接触图像快十年了。虽然没有做出什么很出色的工作,不过在这个领域摸爬滚打了十年之后,发现自己对图像处理和计算机视觉的感情越来越深厚。下班之后看看相关的书籍和文献是一件很惬意的事情。平常的一大业余爱好就是收集一些相关的文章,尤其是经典的文章,到现在我的电脑里面已经有了几十G的文章。写这个文档的想法源于我前一段时间整理文献时的一个突发奇想,既然有这个多文献,何不整理出其中的经典,抓住重点来阅读,同时也可以共享给大家。于是当时即兴写了一个《图像处理与计算机视觉中的经典论文》。现在来看,那个文档写得很一般,所共享的论文也非常之有限。就算如此,还是得到了一些网友的夸奖,心里感激不尽。因此,一直想下定决心把这个工作给完善,力求做到尽量全面。
本文是对现有的图像处理和计算机视觉的经典书籍(后面会有推荐)的一个补充。一般的图像处理书籍都是介绍性的介绍某个方法,在每个领域内都会引用几十上百篇参考文献。有时候想深入研究这个领域的时候却发现文献太多,不知如何选择。但实际上在每个领域都有那么三五篇抑或更多是非读不可的经典文献。这些文献除了提出了很经典的算法,同时他们的Introduction和Related work也是对所在的领域很好的总结。读通了这几篇文献也就等于深入了解了这个领域,比单纯的看书收获要多很多。写本文的目的就是想把自己所了解到的各个领域的经典文章整理出来,不用迷失在参考文献的汪洋大海里。
2. 图像处理和计算机视觉的分类
按照当前流行的分类方法,可以分为以下三部分:A.图像处理:对输入的图像做某种变换,输出仍然是图像,基本不涉及或者很少涉及图像内容的分析。比较典型的有图像变换,图像增强,图像去噪,图像压 缩,图像恢复,二值图像处理等等。基于阈值的图像分割也属于图像处理的范畴。一般处理的是单幅图像。
B.图像分析:对图像的内容进行分析,提取有意义的特征,以便于后续的处理。处理的仍然是单幅图像。
C.计算机视觉:对图像分析得到的特征进行分析,提取场景的语义表示,让计算机具有人眼和人脑的能力。这时处理的是多幅图像或者序列图像,当然也包括部分单幅图像。
关于图像处理,图像分析和计算机视觉的划分并没有一个很统一的标准。一般的来说,图像处理的书籍总会或多或少的介绍一些图像分析和计算机视觉的知识,比如冈萨雷斯的数字图像处理。而计算机视觉的书籍基本上都会包括图像处理和图像分析,只是不会介绍的太详细。其实图像处理,图像分析和计算机视觉都可以纳入到计算机视觉的范畴:图像处理->低层视觉(low level vision),图像分析->中间层视觉(middle level vision),计算机视觉->高层视觉(high level vision)。这是一般的计算机视觉或者机器视觉的划分方法。在本文中,仍然按照传统的方法把这个领域划分为图像处理,图像分析和计算机视觉。
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(Latent SVM),高斯背景模型,特征检测,聚类,hough变换等等 。而且它还支持各种机器学习方法(SVM,NN,KNN,决策树,Boosting等),使用起来很简单。
(4)文档内容丰富,并且给出了很多示例程序。当然也有一些地方文档描述不清楚,不过看看代码就很清楚了。
(5)完全开源。可以从中间提取出任何需要的算法。
(6)从学校出来后,除极少数会继续在学术圈里,大部分还是要进入工业界。现在在工 业界,c/c++仍是主流,很多公司都会优先考虑熟悉或者精通OpenCV的。事实上,在学术界,现在OpenCV也大有取代matlab之势。以前的demo或者source code,很多作者都愿意给出matlab版本的,然后别人再呼哧呼哧改成c版本的。现在作者干脆给出c/c++版本,或者自己集成到OpenCV中去,这样能快速提升自己的影响力。
如果想在图像处理和计算机视觉界有比较深入的研究,并且以后打算进入这个领域工作的话,建议把OpenCV作为自己的主攻方向。如果找工作的时候敢号称自己精通OpenCV的话,肯定可以找到一份满意的工作。
4. 本文的特点和结构,以及适合的对象
在本文 面向的对象是即将进入或者刚刚进入图像处理和计算机视觉领域的童鞋,可以在阅读书籍的同时参阅这些文献,能对书中提到的算法有比较深刻的理解。由于本文涉及到的范围比较广,如果能对计算机视觉的资深从业者也有一定的帮助,我将倍感欣慰。为了不至太误人子弟,每一篇文章都或多或少的看了一下,最不济也看了摘要(这句话实在整理之前写的,实际上由于精力有限,好多文献都只是大概扫了一眼,然后看了看google的引用数,一般在1000以上就放上来了,把这些文章细细品味一遍也是我近一两年之内的目标)。在成文的过程中,我本人也受益匪浅,希望能对大家也有所帮助。
由于个人精力和视野的关系,有一些我未涉足过的领域不敢斗胆推荐,只是列出了一些引用率比较高的文章,比如摄像机标定和立体视觉。不过将来,由于工作或者其他原因,这些领域也会接触到,我会逐步增减这些领域的文章。尽管如此,仍然会有疏漏,忘见谅。同时文章的挑选也夹带了一些个人的喜好,比如我个人比较喜欢low level方向的,尤其是IJCV和PAMI上面的文章,因此这方面也稍微多点,希望不要引起您的反感。如果有什么意见或者建议,欢迎mail我。文章和资源我都会在我的csdn blog和sina ishare同步更新。此申明:这些论文的版权归作者及其出版商所有,请勿用于商业目的。
个人blog: http://blog.csdn.net/dcraw
新浪iask地址:http://iask.sina.com.cn/u/2252291285/ish?folderid=868438
本文的安排如下。第一部分是绪论。第二部分是图像处理中所需要用到的理论基础,主要是这个领域所涉及到的一些比较好的参考书籍。第三部分是计算机视觉中所涉及到的信号处理和模式识别文章。由于图像处理与图像分析太难区分了,第四部分集中讨论了它们。第五部分是计算机视觉部分。最后是小结。
二、 图像处理与计算机视觉相关的书籍
1. 数学
我们所说的图像处理实际上就是数字图像处理,是把真实世界中的连续三维随机信号投影到传感器的二维平面上,采样并量化后得到二维矩阵。数字图像处理就是二维矩阵的处理,而从二维图像中恢复出三维场景就是计算机视觉的主要任务之一。这里面就涉及到了图像处理所涉及到的三个重要属性:连续性,二维矩阵,随机性。所对应的数学知识是高等数学(微积分),线性代数(矩阵论),概率论和随机过程。这三门课也是考研数学的三个组成部分,构成了图像处理和计算机视觉最基础的数学基础。如果想要更进一步,就要到网上搜搜林达华推荐的数学书目了。2. 信号处理
图像处理其实就是二维和三维信号处理,而处理的信号又有一定的随机性,因此经典信号处理和随机信号处理都是图像处理和计算机视觉中必备的理论基础。2.1经典信号处理
信号与系统(第2版) Alan V.Oppenheim等著 刘树棠译
离散时间信号处理(第2版) A.V.奥本海姆等著 刘树棠译
数字信号处理:理论算法与实现 胡广书 (编者)
2.2随机信号处理
现代信号处理 张贤达著
统计信号处理基础:估计与检测理论 Steven M.Kay等著 罗鹏飞等译
自适应滤波器原理(第4版) Simon Haykin著 郑宝玉等译
2.3 小波变换
信号处理的小波导引:稀疏方法(原书第3版) tephane Malla著, 戴道清等译
2.4 信息论
信息论基础(原书第2版) Thomas M.Cover等著 阮吉寿等译
3. 模式识别
Pattern Recognition and Machine Learning Bishop, Christopher M. Springer
模式识别(英文版)(第4版) 西奥多里德斯著
Pattern Classification (2nd Edition) Richard O. Duda等著
Statistical Pattern Recognition, 3rd Edition Andrew R. Webb等著
模式识别(第3版) 张学工著
4. 图像处理与计算机视觉的书籍推荐
图像处理,分析与机器视觉 第三版 Sonka等著 艾海舟等译
Image Processing, Analysis and Machine Vision
( 附:这本书是图像处理与计算机视觉里面比较全的一本书了,几乎涵盖了图像视觉领域的各个方面。中文版的个人感觉也还可以,值得一看。)
数字图像处理 第三版 冈萨雷斯等著
Digital Image Processing
(附:数字图像处理永远的经典,现在已经出到了第三版,相当给力。我的导师曾经说过,这本书写的很优美,对写英文论文也很有帮助,建议购买英文版的。)
计算机视觉:理论与算法 Richard Szeliski著
Computer Vision: Theory and Algorithm
(附:微软的Szeliski写的一本最新的计算机视觉著作。内容非常丰富,尤其包括了作者的研究兴趣,比如一般的书里面都没有的Image Stitching和 Image Matting等。这也从另一个侧面说明这本书的通用性不如Sonka的那本。不过作者开放了这本书的电子版,可以有选择性的阅读。
http://szeliski.org/Book/
Multiple View Geometry in Computer Vision 第二版Harley等著
引用达一万多次的经典书籍了。第二版到处都有电子版的。第一版曾出过中文版的,后来绝版了。网上也可以找到中英文版的电子版。)
计算机视觉:一种现代方法 DA Forsyth等著
Computer Vision: A Modern Approach
MIT的经典教材。虽然已经过去十年了,还是值得一读。期待第二版
Machine vision: theory, algorithms, practicalities 第三版 Davies著
(附:为数不多的英国人写的书,偏向于工业应用。)
数字图像处理 第四版 Pratt著
Digital Image Processing
(附:写作风格独树一帜,也是图像处理领域很不错的一本书。网上也可以找到非常清晰的电子版。)
5. 小结
罗嗦了这么多,实际上就是几个建议:(1)基础书千万不可以扔,也不能低价处理给同学或者师弟师妹。不然到时候还得一本本从书店再买回来的。钱是一方面的问题,对着全新的书看完全没有看自己当年上过的课本有感觉。
(2)遇到有相关的课,果断选修或者蹭之,比如随机过程,小波分析,模式识别,机器学习,数据挖掘,现代信号处理甚至泛函。多一些理论积累对将来科研和工作都有好处。
(3)资金允许的话可以多囤一些经典的书,有的时候从牙缝里面省一点都可以买一本好书。不过千万不要像我一样只囤不看。
三、 计算机视觉中的信号处理与模式识别
从本章开始,进入本文的核心章节。一共分三章,分别讲述信号处理与模式识别,图像处理与分析以及计算机视觉。与其说是讲述,不如说是一些经典文章的罗列以及自己的简单点评。与前一个版本不同的是,这次把所有的文章按类别归了类,并且增加了很多文献。分类的时候并没有按照传统的分类方法,而是划分成了一个个小的门类,比如SIFT,Harris都作为了单独的一类,虽然它们都可以划分到特征提取里面去。这样做的目的是希望能突出这些比较实用且比较流行的方法。为了以后维护的方便,按照字母顺序排的序。1. Boosting
Boosting是最近十来年来最成功的一种模式识别方法之一,个人认为可以和SVM并称为模式识别双子星。它真正实现了“三个臭皮匠,赛过诸葛亮”。只要保证每个基本分类器的正确率超过50%,就可以实现组合成任意精度的分类器。这样就可以使用最简单的线性分类器。Boosting在计算机视觉中的最成功的应用无疑就是Viola-Jones提出的基于Haar特征的人脸检测方案。听起来似乎不可思议,但Haar+Adaboost确实在人脸检测上取得了巨大的成功,已经成了工业界的事实标准,并且逐步推广到其他物体的检测。Rainer Lienhart在2002 ICIP发表的这篇文章是Haar+Adaboost的最好的扩展,他把原始的两个方向的Haar特征扩展到了四个方向,他本人是OpenCV积极的参与者。现在OpenCV的库里面实现的Cascade Classification就包含了他的方法。这也说明了盛会(如ICIP,ICPR,ICASSP)也有好文章啊,只要用心去发掘。
[1997] A Decision-Theoretic Generalization of on-Line Learning and an Application to Boosting
[1998] Boosting the margin A new explanation for the effectiveness of voting methods
[2002 ICIP TR] Empirical Analysis of Detection Cascades of Boosted Classifiers for Rapid Object Detection
[2003] The Boosting Approach to Machine Learning An Overview
[2004 IJCV] Robust Real-time Face Detection
2. Clustering
聚类主要有K均值聚类,谱聚类和模糊聚类。在聚类的时候如果自动确定聚类中心的数目是一个一直没有解决的问题。不过这也很正常,评价标准不同,得到的聚类中心数目也不一样。不过这方面还是有一些可以参考的文献,在使用的时候可以基于这些方法设计自己的准则。关于聚类,一般的模式识别书籍都介绍的比较详细,不过关于cluster validity讲的比较少,可以参考下面的文章看看。
[1989 PAMI] Unsupervised Optimal Fuzzy Clustering
[1991 PAMI] A validity measure for fuzzy clustering
[1995 PAMI] On cluster validity for the fuzzy c-means model
[1998] Some New Indexes of Cluster Validity
[1999 ACM] Data Clustering A Review
[1999 JIIS] On Clustering Validation Techniques
[2001] Estimating the number of clusters in a dataset via the Gap statistic
[2001 NIPS] On Spectral Clustering
[2002] A stability based method for discovering structure in clustered data
[2007] A tutorial on spectral clustering
3. Compressive Sensing
最近大红大紫的压缩感知理论。
[2006 TIT] Compressed Sensing
[2008 SPM] An Introduction to Compressive Sampling
[2011 TSP] Structured Compressed Sensing From Theory to Applications
4. Decision Trees
对决策树感兴趣的同学这篇文章是非看不可的了。
[1986] Introduction to Decision Trees
5. Dynamical Programming
动态规划也是一个比较使用的方法,这里挑选了一篇PAMI的文章以及一篇Book Chapter
[1990 PAMI] using dynamic programming for solving variational problems in vision
[Book Chapter] Dynamic Programming
6. Expectation Maximization
EM是计算机视觉中非常常见的一种方法,尤其是对参数的估计和拟合,比如高斯混合模型。EM和GMM在Bishop的PRML里单独的作为一章,讲的很不错。关于EM的tutorial,网上也可以搜到很多。
[1977] Maximum likelihood from incomplete data via the EM algorithm
[1996 SPM] The Expectation-Maximzation Algorithm
7. Graphical Models
伯克利的乔丹大师的Graphical Model,可以配合这Bishop的PRML一起看。
[1999 ML] An Introduction to Variational Methods for Graphical Models
8. Hidden Markov Model
HMM在语音识别中发挥着巨大的作用。在信号处理和图像处理中也有一定的应用。最早接触它是跟小波和检索相关的,用HMM来描述小波系数之间的相互关系,并用来做检索。这里提供一篇1989年的经典综述,几篇HMM在小波,分割,检索和纹理上的应用以及以上是关于图像处理与计算机视觉 基础经典以及最近发展的主要内容,如果未能解决你的问题,请参考以下文章
计算机视觉OpenCV 4高级编程与项目实战(Python版):图像处理基础
计算机视觉OpenCV 4高级编程与项目实战(Python版):图像处理基础