如何自學圖像編程(轉)

現在,圖像類信息越來越多了,對圖像的編程需求也越來越多。圖像類項目的特點是性價比高,單行代碼的價格一般是普通的程序的10倍,每行代碼能夠賣幾塊錢。很多人把目光放在這個上面。剛纔又有網友諮詢,做圖像要看些什麼書?結合我的自學經驗,寫一篇博客談談這個問題。

需要先明確幾個問題:

(1)你的基礎如何?做圖形圖像的話,對數學要求比較高,至少要有大學數學的基礎——微積分、線性代數、概率統計和數值分析都會用到的。不然,書看不下去,沒法自學。如果要做深入的話,對英語也有一定的要求,絕大部分深入的資料都是英文的。

(2)做哪個層面的?與硬件嚴重相關的只能選C,做應用層的話可以選C++和C#,我個人推薦C#,當然,智能手機還是推薦C++。做Web層面的話,目前最佳選擇是Flash(其實Silverlight比Flash更適合做Web圖像,好歹Silverlight有byte類型,有struct,但Silverlight的普及度不夠),Html5/Canvas目前只能做簡單的應用,複雜的還不行。如果只是做算法,matlab就夠了,但一般不是科班出生,很少做純算法的。做純算法還有個缺點就是,算法轉換爲收入很難。鑑於C#寫算法並不比用matlab寫算法慢,不建議摸matlab。但matlab代碼要能看懂,因爲論文中很多算法是用matlab寫的。

(3)有沒有克服困難的勇氣。圖像類項目大多不大,普遍的幾千行代碼就可以搞定。就這幾千行代碼,難度越大的錢越多。關鍵詞就是困難和難度,工作量往往不是問題。也就是說,你越牛逼,越值錢。牛逼是沒有止境的,不像那些靠體力的項目,身體是個硬的限制。

下面的書籍,如果是寫的英文名字,那就是推薦閱讀英文版,如果是中文名字,那就說明,中文版寫的/翻譯的也不錯,推薦看中文版而非英文版。都是可以直接下載到的或買到的。

首先是兩本核心書籍:

(1)Image Processing,Analysis and Machine Vision 3ED。(中文名:《圖像處理、分析與機器視覺》)

(2)Computer Vision:

Algorithms and Application(中文名:《計算機視覺——算法與應用》)

第一本書偏重於基礎,但是它寫的可不基礎。寫的很簡且信息量極大,但核心概念都講了,重點算法大部分都列出來了。第二本書偏重於工程應用,概述了各個領域的有效算法,點到爲止。

如果看第二本沒困難的話,可以忽略掉第一本。第一本書也不好讀,一上來就講了狄拉克分佈,因此,要想從頭到尾都看懂是幾乎不可能的,但是它的內容的前後依存性不大,看不懂的直接略過去就行了,只看能看懂的即可。

沒必要看完,我也只看了30-40%感興趣的部分,其它的要麼是不感興趣的,要麼是看不懂的。

只需要大學數學基礎就可以開始看,能看懂部分就可以做項目了。找到和項目相關的內容,找到相應的參考文獻,直接去看論文實現論文的算法即可。絕大部分重要論文Google

Scholar都能搜到原文,如果英文水平不夠,也可以在幾個期刊網搜中文的論文,不是特別前沿的東西,中文的論文也有涉及到的。

看書的重點是理解,理解算法最佳方式是自己把算法寫一遍。可以參考OpenCV的代碼來寫。理解一個算法之後,這個算法就可以爲你賺錢,不理解,是很難用對算法的。自己寫算法。你纔對這個算法的性能有直觀的感受,知道可以通過哪些方式來改進它,知道怎麼在性能和算法效果之間進行取捨,這對項目來說,是很重要的。

不建議買第二本書的中文版,它的中文版閹割了參考文獻和索引這兩個最有使用價值的部分。

把這兩本書全部看完喫透,單靠大學水平的數學是不夠的,至少得數學系本科生級別的知識儲備。如果大學數學忘了,建議先複習一遍。

自學推薦:

(1)陳天權版《數學分析(一、二、三)》。這是國內最難的一套數學分析教材,爲什麼推薦它呢?它自成條理,信息量豐富,把圖像分析深入所需的數學內容都包括進去了:微積分、點集拓撲、實分析、泛函、變分、複分析、流形……,重要概念都講了。學完了,看論文問題不大。缺點就是難。可是,圖像類項目的特點也是難。遇難而上是必須的。這套書雖難,但是思路極其清晰,就是看的慢一點而已。要知道,計算機所能發揮出的威力只是數學理論的一部分,隨着計算機的計算能力越來越強,越來越多的數學方法會引入到程序中來,對於圖像分析領域尤其如此。所以要未雨綢繆,別看有的數學知識現在用不上,說不定哪天就用到了。

(2)Lax的《線性代數及其應用》。作者是沃爾夫獎得主,寫的很簡潔明要,且不與大學學的線性代數重複。

(3)《Numerical Recipes》。數值分析有這一本書就夠了,秒殺衆書的書。這本書只看感興趣的或當前用到的即可。

鑑於圖形和圖像的關係越來越緊密,關於圖形學的書籍也是值得一讀的。推薦兩本:

(1)David F.Rogers的《計算機圖形學的算法基礎》。這本書實在是太經典了,就是有點老,比較基礎。

(2)《實時計算機圖形學》這本書講的都是比較現代的,正好結合上一本看。

圖像編程=算法+性能。因此,性能優化方面也得看。比如這本:《軟件優化技術–IA-32平臺的高性能手冊》。

會用Photoshop對圖像編程很重要。Photoshop有強大的編輯功能和特效庫,很多時候,可以用Photoshop先進行預研究,確定項目是否可行。可行的話,我們再把Photoshop的操作過程用算法來實現,實際項目中,經常會這麼操作的。Photoshop推薦一本書:李金明、李金榮的《Photoshop CS5完全自學教程》。這本書寫的非常棒,就是書名有點土,和那些垃圾書的書名很像。

如果用C/C++的話,推薦《學習OpenCV(中文版)》,翻譯的不錯。如果用C#的話,沒啥好書可以推薦,可以看看我博客中的文章。如果用Flash的話,推薦《Foundation ActionScript 3.0

Image Effects》。

如果做的是和彩圖有關的話,推薦《彩色數字圖像處理》。其它的,《圖像局部特徵不變性特徵與描述》寫的也不錯。

====

下面舉個例子講講工具、知識間的綜合應用。

要實現一個lemo特效,可以先利用現有工具得到像素之間的映射圖(比如我這篇文章:《解決問題的藝術:半小時編程實現照片的反轉負衝特效》)。但這樣一來,每種特效都需要一個像素映射圖,增大了程序的尺寸,怎麼辦呢?

一種方法是用Photoshop模擬它,然後,寫圖像處理算法來重複這一過程。這是用圖像處理的方法來解決問題。

另一種方法是將lemo特效當作一多元函數,特效前的圖像是輸入值,特效後的圖像是輸出值,先寫出一個自由度高點的函數,再採用擬合的方法,找到合適的函數參數,然後檢驗這個函數的穩定性,靠譜的話就是它了。這是用數學的方法來解決問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章