1. 程式人生 > >計算機視覺&模式識別Survey

計算機視覺&模式識別Survey

************************************************************************************************************************************************************************************  

         在這裡,我特別宣告:本文章的源作者是   楊曉冬  (個人郵箱:[email protected])。原文的連結是
http://www.iask.sina.com.cn/u/2252291285/ish。版權歸 楊曉冬 朋友所有。

         我非常感謝原作者辛勤地編寫本文章,並願意共享出來。我也希望轉載本文的各位朋友,要註明原作者和出處,以尊重原作者!                 

***************************************************************************************************************************************************************************************

                       影象處理與計算機視覺基礎,經典以及最近發展

                                                                                                                             By xdyang(楊曉冬[email protected]

一、 緒論

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在小波,分割,檢索和紋理上的應用以及一本比較早的中文電子書,現在也不知道作者是誰,在這裡對作者表示感謝。

[1989 ] A tutorial on hidden markov models and selected applications in speech recognition

[1998 TSP] Wavelet-based statistical signal processing using hidden Markov models

[2001 TIP] Multiscale image segmentation using wavelet-domain hidden Markov models

[2002 TMM] Rotation invariant texture characterization and retrieval using steerable wavelet-domain hidden Markov models

[2003 TIP] Wavelet-based texture analysis and synthesis using hidden Markov models

Hmm Chinese book.pdf

9. Independent Component Analysis

同PCA一樣,獨立成分分析在計算機視覺中也發揮著重要的作用。這裡介紹兩篇綜述性的文章,最後一篇是第二篇的TR版本,內容差不多,但比較清楚一些。

[1999] Independent Component Analysis A Tutorial

[2000 NN] Independent component analysis algorithms and applications

[2000] Independent Component Analysis Algorithms and Applications

10. Information Theory

計算機視覺中的資訊理論。這方面有一本很不錯的書Information Theory in Computer Vision and Pattern Recognition。這本書有電子版,如果需要用到的話,也可以參考這本書。

[1995 NC] An Information-Maximization Approach to Blind Separation and Blind Deconvolution

[2010] An information theory perspective on computational vision

11. Kalman Filter

這個話題在張賢達老師的現代訊號處理裡面講的比較深入,還給出了一個有趣的例子。這裡列出了Kalman的最早的論文以及幾篇綜述,還有Unscented Kalman Filter。同時也有一篇Kalman Filter在跟蹤中的應用以及兩本電子書。

[1960 Kalman] A New Approach to Linear Filtering and Prediction Problems Kalman

[1970] Least-squares estimation_from Gauss to Kalman

[1997 SPIE] A New Extension of the Kalman Filter to Nonlinear System

[2000] The Unscented Kalman Filter for Nonlinear Estimation

[2001 Siggraph] An Introduction to the Kalman Filter_full

[2003] A Study of the Kalman Filter applied to Visual Tracking

12. Pattern Recognition and Machine Learning

模式識別名氣比較大的幾篇綜述

[2000 PAMI] Statistical pattern recognition a review

[2004 CSVT] An Introduction to Biometric Recognition

[2010 SPM] Machine Learning in Medical Imaging

13. Principal Component Analysis

著名的PCA,在特徵的表示和特徵降維上非常有用。

[2001 PAMI] PCA versus LDA

[2001] Nonlinear component analysis as a kernel eigenvalue problem

[2002] A Tutorial on Principal Component Analysis

[2009] A Tutorial on Principal Component Analysis

[2011] Robust Principal Component Analysis

[Book Chapter] Singular Value Decomposition and Principal Component Analysis

14. Random Forest

隨機森林

[2001 ML] Random Forests

15. RANSAC

隨機抽樣一致性方法,與傳統的最小均方誤差等完全是兩個路子。在Sonka的書裡面也有提到。

[2009 BMVC] Performance Evaluation of RANSAC Family

16. Singular Value Decomposition

對於非方陣來說,就是SVD發揮作用的時刻了。一般的模式識別書都會介紹到SVD。這裡列出了K-SVD以及一篇Book Chapter

[2006 TSP] K-SVD An Algorithm for Designing Overcomplete Dictionaries for Sparse Representation

[Book Chapter] Singular Value Decomposition and Principal Component Analysis

17. Sparse Representation

這裡主要是Proceeding of IEEE上的幾篇文章

[2009 PAMI] Robust Face Recognition via Sparse Representation

[2009 PIEEE] Image Decomposition and Separation Using Sparse Representations An Overview

[2010 PIEEE] Dictionaries for Sparse Representation Modeling

[2010 PIEEE] It's All About the Data

[2010 PIEEE] Matrix Completion With Noise

[2010 PIEEE] On the Role of Sparse and Redundant Representations in Image Processing

[2010 PIEEE] Sparse Representation for Computer Vision and Pattern Recognition

[2011 SPM] Directionary Learning

18. Support Vector Machines

[1998] A Tutorial on Support Vector Machines for Pattern Recognition

[2004] LIBSVM A Library for Support Vector Machines

19. Wavelet

在小波變換之前,時頻分析的工具只有傅立葉變換。眾所周知,傅立葉變換在時域沒有解析度,不能捕捉區域性頻域資訊。雖然短時傅立葉變換克服了這個缺點,但只能刻畫恆定視窗的頻率特性,並且不能很好的擴充套件到二維。小波變換的出現很好的解決了時頻分析的問題,作為一種多解析度分析工具,在影象處理中得到了極大的發展和應用。在小波變換的發展過程中,有幾個人是不得不提的,Mallat, Daubechies,Vetteri, M.N.Do, Swelden,Donoho。Mallat和Daubechies奠定了第一代小波的框架,他們的著作更是小波變換的必讀之作,相對來說,小波十講太偏數學了,比較難懂。而Mallat的訊號處理的小波導引更偏應用一點。Swelden提出了第二代小波,使小波變換能夠快速方便的實現,他的功勞有點類似於FFT。而Donoho,Vetteri,Mallat及其學生們提出了Ridgelet, Curvelet, Bandelet,Contourlet等幾何小波變換,讓小波變換有了方向性,更便於壓縮,去噪等任務。尤其要提的是M.N.Do,他是一個越南人,得過IMO的銀牌,在這個領域著作頗豐。我們國家每年都有5個左右的IMO金牌,希望也有一兩個進入這個領域,能夠也讓我等也敬仰一下。而不是一股腦的都進入金融,管理這種跟數學沒有多大關係的行業,呵呵。很希望能看到中國的陶哲軒,中國的M.N.Do。
說到小波,就不得不提JPEG2000。在JPEG2000中使用了Swelden和Daubechies提出的用提升演算法實現的9/7小波和5/3小波。如果對比JPEG和JPEG2000,就會發現JPEG2000比JPEG在效能方面有太多的提升。本來我以為JPEG2000的普及只是時間的問題。但現在看來,這個想法太Naive了。現在已經過去十幾年了,JPEG2000依然沒有任何出頭的跡象。不得不說,工業界的慣性力量太強大了。如果以前的東西沒有什麼硬傷的話,想改變太難了。不巧的是,JPEG2000的種種優點在最近的硬體上已經有了很大的提升。壓縮率?現在動輒1T,2T的硬碟,沒人太在意壓縮率。漸進傳輸?現在的網速包括無線傳輸的速度已經相當快了,漸進傳輸也不是什麼優勢。感覺現在做影象壓縮越來越沒有前途了,從最近的會議和期刊文件也可以看出這個趨勢。不管怎麼說,JPEG2000的Overview還是可以看看的。

[1989 PAMI] A theory for multiresolution signal decomposition__the wavelet representation

[1996 PAMI] Image Representation using 2D Gabor Wavelet

[1998 ] FACTORING WAVELET TRANSFORMS INTO LIFTING STEPS

[1998] The Lifting Scheme_ A Construction Of Second Generation Wavelets

[2000 TCE] The JPEG2000 still image coding system_ an overview

[2002 TIP] The curvelet transform for image denoising

[2003 TIP] Gray and color image contrast enhancement by the curvelet transform

[2003 TIP] Mathematical Properties of the jpeg2000 wavelet filters

[2003 TIP] The finite ridgelet transform for image representation

[2005 TIP] Sparse Geometric Image Representations With Bandelets