一、圖像處理的應(yīng)用
這個其實沒什么好說的,一種技術(shù)的應(yīng)用價值不是靠嘴上說,而是要看有多少人去搞,很簡單的道理。其實我覺得判斷一項技術(shù)有沒有價值、有多大價值的最簡單最有效的方法就是看有多少人在研究它。如果大家都在研究,那必然說明它很火,至少目前很火,以后的幾年里依然還會火。因此,如果你不確定圖像處理是不是有價值,那就查查全國圖像處理工程師的數(shù)量就行了。
當(dāng)然這里還是簡單提一下。如果你真的只想問“圖像處理有什么用?”,相信百度會給出比我更專業(yè)的答案。不過作為圖像處理的行內(nèi)人,我還是從幾個基本的點來具體說一下。
1、身份認(rèn)證
21世紀(jì)是刷臉的時代,這一點無可厚非。首先是銀行,據(jù)說重慶的銀行已經(jīng)使用了人臉識別的驗證系統(tǒng)來進(jìn)行輔助的認(rèn)證。其次是門禁系統(tǒng),以前是指紋,虹膜,現(xiàn)在就是人臉。指紋、虹膜的識別雖然準(zhǔn)確,但是有侵犯性,采集的過程中有侵犯性,驗證的過程中也有侵犯性,反正讓誰天天錄指紋(采集指紋信息),用眼睛瞪攝像頭(采集虹膜信息),誰都會覺得不舒服的,況且手還會脫皮。相比之下,人臉的識別就方便多了,拍張照片(采集人臉信息)誰都不會介意。最后是監(jiān)控,一個攝像頭所拍的監(jiān)控能從不同的角度記錄成百上千的人(比如車站等密集場所的監(jiān)控),讓警察去辨認(rèn)將是一個浩大的工程,要是系統(tǒng)能夠自動判別人員信息,無疑會給辦案帶來極大方便。
2、監(jiān)控安防
安防監(jiān)控可以說是圖像處理領(lǐng)域最有潛力的應(yīng)用領(lǐng)域。如今各個城市都在瘋狂的安裝監(jiān)控攝像頭,全國時刻都有無數(shù)的攝像頭在錄監(jiān)控,但是安防監(jiān)控的后端處理卻沒跟上。什么是后端處理,簡單的說就是監(jiān)控錄像的視頻處理。注意這里的視頻處理可就不止包含人臉識別了,還有行人檢測、異常檢測、顯著性檢測、協(xié)同跟蹤等。人臉識別之前說了,這里簡單說說行人異常檢測。圖像處理中的行人異常檢測在外行人眼中是一個非常有魔力的東西。畢竟讓攝像頭通過監(jiān)控視頻就能判斷出當(dāng)前畫面中誰是好人誰是壞人(當(dāng)然直接分為好人和壞人還是太武斷了),在一般思維中貌似是不可能的。但是請不要忽略這樣一個事實,就是目前大部分監(jiān)控視頻的分析處理都是由人工來完成的,警察破案時經(jīng)常動不動就調(diào)出最近幾天的監(jiān)控視頻,然后從頭看到尾,其工程量之大可想而知。也正是這樣才催生了人們對智能監(jiān)控方面的研究,因為有這方面的實際需求。當(dāng)然我們的視頻分析程序不會直接給出諸如“好人or壞人”這樣的武斷而片面的判斷結(jié)果。就當(dāng)前的技術(shù)水平而言,能夠統(tǒng)計當(dāng)下監(jiān)控畫面中的人數(shù)(行人檢測)、定位他們的人臉(人臉檢測)、識別他們的身份(人臉識別)、判別他們的表情(表情識別)、檢測他們的動作(異常檢測),這就已經(jīng)夠了。這樣以后人們就不會再面對長達(dá)幾十甚至上百個小時的監(jiān)控視頻發(fā)呆,而是直接分析計算機(jī)給出的數(shù)據(jù),當(dāng)前畫面中有多少人、都是誰、誰的動作可疑等??傊?,接下來智能監(jiān)控發(fā)展會很迅速,因為需求很迫切。
3、深度學(xué)習(xí)(Deep Learning)
通俗的說一句,“圖像處理是深度學(xué)習(xí)應(yīng)用的天堂”。深度學(xué)習(xí)這個概念可能有人不太熟悉,大家可以自行百度,我這里給出一個相對通俗的解釋:“如果你不知道什么叫深度學(xué)習(xí),就想想《終結(jié)者》中的T-800”。當(dāng)然這句話不是我說的,是出自業(yè)界的一位大牛之口。當(dāng)然這可能有點小片面,不過深度學(xué)習(xí)確實是公認(rèn)的新一代人工智能的基礎(chǔ)。
這里舉兩個例子。一是谷歌的人工大腦項目。谷歌公司可以說是深度學(xué)習(xí)方面的牽頭企業(yè)了,其在2012年公布的谷歌大腦項目,動用了1.6萬個計算節(jié)點,訓(xùn)練數(shù)周,得到的人工智能模型能夠自主識別貓臉圖像,為新一代人工智能開辟了道路,之后微軟深度學(xué)習(xí)研究院、百度深度學(xué)習(xí)研究院等機(jī)構(gòu)都開始大量投入,各個高校也搞得風(fēng)聲水起,原因很簡單,大家都知道它會火。
第二就是圖像識別方面的競賽。最有權(quán)威的就是ImageNet競賽。大家在一個擁有上千萬張,上千類別的圖像數(shù)據(jù)庫上訓(xùn)練和測試自己的算法,比拼識別率。近幾年來,摘得桂冠的一直都是深度學(xué)習(xí)模型,確切的說是卷積神經(jīng)網(wǎng)絡(luò)。更多有關(guān)ImageNet歷年的競賽信息大家可以自行百度。
說道深度學(xué)習(xí)在圖像處理的應(yīng)用,不得不提中國的湯曉鷗教授,說他是國內(nèi)深度學(xué)習(xí)的領(lǐng)頭羊也不為過。他提出的DeepID人臉識別算法(一共分為三代),在一些大規(guī)模人臉數(shù)據(jù)庫上的正確率(若LFW庫)已經(jīng)達(dá)到了99.75%,單純從數(shù)字上講的話可以說已經(jīng)超越了人類的識別率,為此湯教授還開辦了公司,開發(fā)FaceSDK(雖然還沒有公布)。不過拿計算機(jī)和人腦相比本身就是不合理的,各有所長嘛。不過可見DeepLearning在圖像識別領(lǐng)域的強(qiáng)大威力。至于深度學(xué)習(xí)與圖像處理的關(guān)系這里就不用多說了,谷歌大腦識別的是圖像,深度學(xué)習(xí)競賽用的是圖像,DeepID識別的還是圖像人臉,雖然深度學(xué)習(xí)在其他方面諸如語音識別等也有應(yīng)用,在圖像處理依然是其主要的應(yīng)用領(lǐng)域。
二、圖像處理研究工具
圖像處理的研究分為算法研究和應(yīng)用兩個部分。用到的主要編程語言有Matlab、C/C++、Python等,原因很簡單,它們都有很多相應(yīng)的第三方庫,不用我們從零開始編程。
1、Matlab
MathWork公司的Matlab軟件可以說是算法研究的利器,它的強(qiáng)大之處在于其方便快捷的矩陣運算能力和圖形仿真能力,單從簡潔性和封裝性來說,確實完爆其他語言。但高度封裝必然會相應(yīng)的損失一部分靈活性,況且Matlab嚴(yán)格的講更像是一個工具,而非一門編程語言。順便提一句,它在2015年編程語言排行榜中位于第20名,僅次于IOS開發(fā)的Objective-C。
對于算法研究人員(尤其是高校的碩士博士),首選工具自然是matlab,因為它簡便快捷,封裝性好,更重要的是全世界幾乎所有的算法大牛、精英教授都會首先公布對應(yīng)的Matlab源碼,然后在逐步改寫成其他語言進(jìn)行實際應(yīng)用。所以,如果你想做圖像處理方面的研究,Matlab是必須掌握的,而且是熟練掌握。當(dāng)你有一些想法需要驗證時,最好明智的先用matlab編寫出來測試。如果你上來就用看似高大上的C++來實驗,不僅錯誤BUG一大堆,到頭來可能效果還不佳,就算效果好,時間也會耽擱不少,畢竟算法開發(fā)還是要快的,這樣才能趕在別人之前發(fā)論文??傊?,只要是接觸圖像算法,終究逃不過Matlab,就算你是軟件開發(fā)的,不研發(fā)算法,但總得能看懂別人的Matlab算法吧。
對于之前沒怎么接觸過Matlab與圖像處理的人,在這里推薦一本相關(guān)的書籍《MATLAB圖像處理實例詳解(附光盤)》。這本書對于Matlab圖像處理入門還是很有幫助的。記得我當(dāng)時剛上研究生時就靠兩本書入門的,一是岡薩雷斯的《數(shù)字圖像處理》,二是這本《MATLAB圖像處理實例詳解》。不過這里友情提示,在看這類教程(不僅僅是Matlab)時千萬不要試圖去記憶所有的工具函數(shù),這種做法是十分愚蠢的。正確的做法是根據(jù)自己的情況快速翻閱這類工具書,可以找出里面的有實際意義的源碼來敲一敲練練手感,至于具體的工具函數(shù),只需要知道Matlab提供了這方面的功能就行了,以后用到了再回來查,或者谷歌百度。我覺得在入門階段,最重要的不是看了多少書,聽了多少課,而是盡快自己敲出一段代碼,運行出結(jié)果,來建立自信和成就感,這才是支持我們走下去的最實在的動力。記得我當(dāng)時看了沒多久就自己敲了一個蹩腳的車牌檢測的Matlab程序,現(xiàn)在看來真是漏洞百出,不過當(dāng)時我真的很興奮,很有成就感,覺得自己能干這行,對于初學(xué)者來說,這種感受彌足珍貴。
2、OpenCv
Opencv是Intel公司開發(fā)的C++圖像處理工具包,形象的理解為就是C++版的Matlab。當(dāng)初Intel公司開發(fā)這個工具包的初衷也是方便大家共享,希望大家能夠在一個共同架構(gòu)的基礎(chǔ)上共同建造摩天大樓,而不是各自在自己的地基上蓋平房。與Matlab不同,Opencv是面向開發(fā)的,穩(wěn)定性好,異常處理機(jī)制周全,但有一點需要注意,由于Opencv是開源的,那么如果你在項目中直接調(diào)用了它的API,那就意味著你的項目也必須開源。因此在真正的產(chǎn)品開發(fā)過程中,往往需要從Opencv庫里面挖代碼,而不是直接調(diào)用,幸好Intel公司允許我們看源碼,自己編譯一把就可以了。
說道C++和Opencv,有一個問題不得不提,那就是深度學(xué)習(xí)領(lǐng)域大名鼎鼎的Caffe框架。這是一個典型的基于C++和OpenCv的深度學(xué)習(xí)框架,由谷歌深度學(xué)習(xí)團(tuán)隊、“谷歌大腦”負(fù)責(zé)人之一賈揚(yáng)清學(xué)者編寫,并公布了源碼。如今各個深度學(xué)習(xí)機(jī)構(gòu)都在大量使用這個框架進(jìn)行研究。
這里同樣對推薦兩本關(guān)于Opencv方面的教程。一本是CSDN博客大牛毛星云寫的《OpenCV3編程入門》,這是它根據(jù)自己多年的博客整理成的書,很詳細(xì),很典型的一本教程,介紹了OpenCv中相對前沿的知識。我翻看過這本教程,中規(guī)中矩,里面的代碼通俗易懂,尤其適合初學(xué)者。當(dāng)然大家同樣要注意不要犯了死讀書的毛病,只看它的功能,敲代碼練手感即可,不要試圖記憶API函數(shù)。重要的工具用多了自然會記住,不重要的工具記住了也沒用。
這里推薦的第二本書是《圖像識別與項目實踐――VC++、MATLAB技術(shù)實現(xiàn)》,這本書是一本偏向于工程應(yīng)用的書,我之所以推薦它是因為它給出了很多有新意、能運行的代碼。其中里面有一個項目讓我印象很深,是一個車牌檢測的實例。簡單描述一下:由于車牌中的字符數(shù)是固定的,因此它通過判斷橫向區(qū)域筆畫的跳變數(shù)以及筆畫寬度來定位車牌區(qū)域。這個想法讓人耳目一新,并且它還給出了詳細(xì)代碼,我也親身試驗過,效果還不錯。
這里同樣再強(qiáng)調(diào)一下,就是一定要盡早入手寫程序,建立自信和成就感。我當(dāng)時學(xué)OpenCv正好用它開發(fā)了一個人臉性別識別的系統(tǒng),是一個本科大學(xué)生創(chuàng)新計劃的需求,效果還可以。
3、Python
Python在今年12月份的編程語言排行榜中名列第5,增長迅速??梢哉fPython已經(jīng)逐漸成為當(dāng)下腳本語言的新標(biāo)準(zhǔn)。Python在圖像處理算法方面除了其自身簡潔的編程優(yōu)勢外,還得益于兩個重要的Python類庫——Numpy和Theano。
Numpy是Python的線性代數(shù)庫,對于矩陣運算能提供很好的支持,并且能夠在此基礎(chǔ)上進(jìn)行很多機(jī)器學(xué)習(xí)相關(guān)算法的開發(fā)仿真,這里推薦一本受到大家廣泛認(rèn)可的書《機(jī)器學(xué)習(xí)實戰(zhàn)》,我最近也正在看這本書,里面對好多機(jī)器學(xué)習(xí)領(lǐng)域的經(jīng)典算法,小到KNN,大到SVM,都給出了詳細(xì)的介紹以及代碼實現(xiàn)(Python版)。Theano是Python的機(jī)器學(xué)習(xí)庫,能夠方便的實現(xiàn)深度學(xué)習(xí)(例如卷積神經(jīng)網(wǎng)絡(luò)CNN)算法,網(wǎng)上很多對于DeepID算法的復(fù)現(xiàn)都是用的這個庫。
人覺得單從圖像處理的角度評價的話,Python并沒有前面兩個工具(Matlab和OpenCv)應(yīng)用廣泛,不過作為通用的腳本語言,我覺得每個程序員都應(yīng)該去了解了解它,畢竟俗話說沒有爛的編程語言,只有爛程序員。我在學(xué)Python時第一個自己寫的程序就是微信打飛機(jī)的小程序,在我的博客中有詳細(xì)的教程,雖然是參照小甲魚的《零基礎(chǔ)入門學(xué)習(xí)Python》視頻教程寫的,但還是蠻有成就感的。
三、圖像處理研究方法
我覺得,圖像處理研究主要可以分為三個部分:基礎(chǔ)概念、基本思想、算法研究。
1、基礎(chǔ)概念
所謂基礎(chǔ)概念,就是圖像處理里最基本的知識,比如什么是圖像?什么是像素?什么是彩色圖像等等。沒有一個明確的界限來劃定什么是基礎(chǔ)概念什么是高級知識,因人而異。了解圖像處理的基礎(chǔ)知識,有一本書是必讀的,就是岡薩雷斯編寫的、阮秋琦翻譯的《數(shù)字圖像處理》。這本書已經(jīng)作為圖像處理領(lǐng)域的經(jīng)典教材使用了三十多年,我自己也把這本書看了好幾遍,每一遍都會有新的體會。我覺得每一個搞圖像的都應(yīng)該熟讀這本書。書中除了有幾章內(nèi)容在講小波變換、模式識別等相對抽象的內(nèi)容外,其他內(nèi)容相對都是很基礎(chǔ)的,本科生水平就能看懂。而且我建議要盡早看這本書,如果是研究生盡量在進(jìn)入課題之前就看一遍,因為這樣一本經(jīng)典的書在進(jìn)入課題之后可能就沒時間看了,以后也頂多是查閱而已。我當(dāng)初就是在大四的寒假看完了這本書,以后在圖像入門的過程中就顯得輕松很多??赐赀@本書,哪怕是只看前幾章,明白了什么是圖像(二維或者三維矩陣)、什么是像素、彩色圖和灰度圖、顏色空間、圖像濾波、圖像噪聲、圖像頻域變換等概念,將來在進(jìn)行更深一步的研究的話就會方便很多了。
2、基本思想
剛開始想把這部分內(nèi)容命名為“基本算法”,意在介紹圖像處理中的一些基本算法,后來仔細(xì)想想決定不這么寫,因為圖像處理是一個非常大的概念,圖像處理不等于人臉識別,也不等于模式識別,直接介紹諸如圖像處理基本算法之類的內(nèi)容很容易寫成空話,沒有什么實際意義。讀者有興趣的話可以直接谷歌百度“圖像處理十大經(jīng)典算法”,上面有我想說的內(nèi)容。
萬變不離其宗,算法是死的,重在思想。舉個例子,我個人是主攻模式識別方向,在這個方向判斷一個學(xué)生是否入門有一個非常簡單的方法,就是“如果你能把圖像很自然的想象成高維空間中的一個點”,那就說明在模式識別方面入門了,可以對圖像進(jìn)行分類了。當(dāng)然標(biāo)準(zhǔn)不是唯一,在其他領(lǐng)域如目標(biāo)檢測也會有其他的判斷標(biāo)準(zhǔn),總之我們要對圖像進(jìn)行處理,那么圖像就不再只是圖像,它可能會演變成各種不同形式的概念,可能是點,可能是面,還可能是一個坐標(biāo)空間。在目標(biāo)跟蹤的經(jīng)典算法粒子濾波中,將一個個的小圖像塊看做一個個粒子;在子空間理論中,將一系列圖像放在一起構(gòu)建一個成分主空間(例如主成分分析PCA算法等等。,我不會詳細(xì)介紹這些算法,說多了就顯得抽象老套,但我要說的是我們一定要把圖像本身理解好,它是一個圖像,是一個矩陣,是一個信息的容器,是一種數(shù)據(jù)的表現(xiàn)形式,圖像不一定都必須在視覺上有意義(比如頻域的圖像)。
總之圖像處理的基本思想還是要立足于圖像本身,要深度到圖像內(nèi)部結(jié)構(gòu)中,思維要靈活。我當(dāng)時做本科畢設(shè)時,怎么也不知道圖像和高維空間中的點之間有什么對應(yīng)關(guān)系,后來總算有一天,突然就明白了,這也就是所謂的量變產(chǎn)生質(zhì)變。總之一定要多想,多總結(jié),主動去鉆研,才能夠真正領(lǐng)悟一些東西。最基本的東西往往蘊(yùn)藏著深奧的道理,無論你現(xiàn)在多牛多厲害,都不能放掉最本源的東西。多想想圖像是什么,有什么本質(zhì)屬性,你可能無法得到準(zhǔn)確的答案,但肯定能得到一些有用的感悟(有點像哲學(xué)問題了)。
3、算法研究
算法研究應(yīng)該是圖像處理的核心工作,尤其是各大高校的博士碩士。這里我并不想談那些高大上的算法,我更想說的是一些算法研究的一些基礎(chǔ)的東西,比如說一些基礎(chǔ)課程,比如說矩陣運算。
研究圖像處理的算法,離不開數(shù)學(xué)。在這里我建議圖像處理方面的碩士一定要上兩門課:《泛函分析》以及《最優(yōu)化算法》,有的學(xué)校已經(jīng)將這兩門課列為了研究生階段的必修課程。這兩門可可以說是圖像處理(至少是模式識別)的基礎(chǔ)。我當(dāng)初沒上過最優(yōu)化算法,但后來也自己補(bǔ)上了,不然真的是寸步難行。至于泛函我當(dāng)時聽課的時候也不是很懂,但是在之后的研究過程中發(fā)現(xiàn)很多圖像處理的基本知識基本理論都和泛函分析中枯燥的定理如出一轍,沒辦法,有的東西本身就是枯燥的干貨,學(xué)著費力,缺它不行。
其次我想說的是矩陣運算。圖像就是矩陣,圖像處理就是矩陣運算。大家為什么都喜歡用Matlab,就是因為它的矩陣運算能力實在是太強(qiáng)大,在Matlab的世界中任何變量都是矩陣。同樣OpenCv之所以能流行,不僅僅是因為它良好的封裝性,也是因為它的矩陣格式,它定義了Mat基礎(chǔ)類,允許你對矩陣進(jìn)行各種操作。Python也不例外,它的Numpy就是一個專門的線性代數(shù)庫。
真正在圖像編程過程中,那些看著高大上的API函數(shù)歸根到底都是工具,查查手冊就能找到,真正核心還是在算法,算法是由公式編寫的,公式的單元是變量,而圖像屆的變量就是矩陣。所以,熟練去操作矩陣,求秩、求逆、最小二乘,求協(xié)方差,都是家常便飯。所以,如果你有幸能上《矩陣分析》這門課,一定要把它看懂,那里面都是干貨。
四、小結(jié)
總之,圖像處理就是一個典型的門檻低、廳堂深的領(lǐng)域。不需要太多基礎(chǔ),學(xué)過線性代數(shù),會一點編程就夠了;但是那些算法卻深不可測,是個消耗功夫的活兒。在寫這篇教程時我說的很直白,就像和大家對話一樣,想到什么說什么。在最后我想說兩句題外話,就是不僅僅針對圖像處理,對于其他新技術(shù)的入門學(xué)習(xí)也是一樣,盡快邁出第一步,盡快去建立自信和成就感,讓自己有勇氣走下去,然后缺什么補(bǔ)什么就行了。我覺得真正讓人望而卻步的往往不是技術(shù)本身,而是我們對自身的不自信。唯有果斷開工,才能戰(zhàn)勝心魔。
審核編輯:郭婷
-
C++
+關(guān)注
關(guān)注
21文章
2102瀏覽量
73457 -
python
+關(guān)注
關(guān)注
55文章
4773瀏覽量
84385 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5471瀏覽量
120903
原文標(biāo)題:圖像處理怎么入門
文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論