圖像處理基本思想和算法研究
剛開始想把這部分內(nèi)容命名為“基本算法”,意在介紹圖像處理中的一些基本算法,后來仔細想想決定不這么寫,因為圖像處理是一個非常大的概念,圖像處理不等于人臉識別,也不等于模式識別,直接介紹諸如圖像處理基本算法之類的內(nèi)容很容易寫成空話,沒有什么實際意義。讀者有興趣的話可以直接搜索“圖像處理十大經(jīng)典算法”,適當了解。
所謂圖像處理,就是用計算機對圖像進行分析,以達到所需結(jié)果的技術(shù),又稱影像處理。圖像處理一般指數(shù)字圖像處理。數(shù)字圖像是指用工業(yè)相機、攝像機、掃描儀等設備經(jīng)過拍攝得到的一個大的二維數(shù)組,該數(shù)組的元素稱為像素,其值稱為灰度值。圖像處理技術(shù)一般包括圖像壓縮,增強和復原,匹配、描述和識別3個部分。
萬變不離其宗,算法是死的,重在思想。舉個例子,在模式識別方向這個方向判斷一個學生是否入門有一個非常簡單的方法,就是“如果你能把圖像很自然的想象成高維空間中的一個點”,那就說明在模式識別方面入門了,可以對圖像進行分類了。
當然標準不是唯一,在其他領域如目標檢測也會有其他的判斷標準,總之我們要對圖像進行處理,那么圖像就不再只是圖像,它可能會演變成各種不同形式的概念,可能是點,可能是面,還可能是一個坐標空間。在目標跟蹤的經(jīng)典算法粒子濾波中,將一個個的小圖像塊看做一個個粒子;在子空間理論中,將一系列圖像放在一起構(gòu)建一個成分主空間(例如主成分分析PCA算法等等。我不會詳細介紹這些算法,說多了就顯得抽象老套,但我要說的是我們一定要把圖像本身理解好,它是一個圖像,是一個矩陣,是一個信息的容器,是一種數(shù)據(jù)的表現(xiàn)形式,圖像不一定都必須在視覺上有意義(比如頻域的圖像)。
總之圖像處理的基本思想還是要立足于圖像本身,要深度到圖像內(nèi)部結(jié)構(gòu)中,思維要靈活。打個比方說,圖像和高維空間中的點之間有什么對應關(guān)系,這是所謂的量變產(chǎn)生質(zhì)變??傊欢ㄒ嘞?,多總結(jié),主動去鉆研,才能夠真正領悟一些東西。最基本的東西往往蘊藏著深奧的道理,無論你現(xiàn)在多牛多厲害,都不能放掉最本源的東西。多想想圖像是什么,有什么本質(zhì)屬性,你可能無法得到準確的答案,但肯定能得到一些有用的感悟(有點像哲學問題了)。
算法研究
算法研究應該是圖像處理的核心工作,尤其是各大高校的博士碩士。這里我并不談那些高大上的算法,我更想說的是一些算法研究的一些基礎的東西,比如說一些基礎課程,比如說矩陣運算。
研究圖像處理的算法,離不開數(shù)學。在這里我建議圖像處理方面的碩士一定要上兩門課:《泛函分析》以及《最優(yōu)化算法》,有的學校已經(jīng)將這兩門課列為了研究生階段的必修課程。這兩門可可以說是圖像處理(至少是模式識別)的基礎。我當初沒上過最優(yōu)化算法,但后來也自己補上了,不然真的是寸步難行。至于泛函我當時聽課的時候也不是很懂,但是在之后的研究過程中發(fā)現(xiàn)很多圖像處理的基本知識基本理論都和泛函分析中枯燥的定理如出一轍,沒辦法,有的東西本身就是枯燥的干貨,學著費力,缺它不行。
其次我想說的是矩陣運算。圖像就是矩陣,圖像處理就是矩陣運算。大家為什么都喜歡用Matlab,就是因為它的矩陣運算能力實在是太強大,在Matlab的世界中任何變量都是矩陣。同樣OpenCv之所以能流行,不僅僅是因為它良好的封裝性,也是因為它的矩陣格式,它定義了Mat基礎類,允許你對矩陣進行各種操作。Python也不例外,它的Numpy就是一個專門的線性代數(shù)庫。
真正在圖像編程過程中,那些看著高大上的API函數(shù)歸根到底都是工具,查查手冊就能找到,真正核心還是在算法,算法是由公式編寫的,公式的單元是變量,而圖像屆的變量就是矩陣。所以,熟練去操作矩陣,求秩、求逆、最小二乘,求協(xié)方差,都是家常便飯。所以,如果你有幸能上《矩陣分析》這門課,一定要把它看懂,那里面都是干貨。