? ? 現(xiàn)在算柳,圖像類信息越來越多了,對圖像的編程需求也越來越多旧蛾。圖像類項目的特點是性價比高,單行代碼的價格一般是普通的程序的10倍蠕嫁,每行代碼能夠賣幾塊錢锨天。很多人把目光放在這個上面。剛才又有網(wǎng)友咨詢剃毒,做圖像要看些什么書病袄?結合我的自學經(jīng)驗,寫一篇博客談談這個問題赘阀。
需要先明確幾個問題:
(1)你的基礎如何益缠?做圖形圖像的話,對數(shù)學要求比較高基公,至少要有大學數(shù)學的基礎——微積分幅慌、線性代數(shù)、概率統(tǒng)計和數(shù)值分析都會用到的轰豆。不然胰伍,書看不下去,沒法自學酸休。如果要做深入的話骂租,對英語也有一定的要求,絕大部分深入的資料都是英文的斑司。
(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%感興趣的部分,其它的要么是不感興趣的祖搓,要么是看不懂的狱意。
只需要大學數(shù)學基礎就可以開始看,能看懂部分就可以做項目了拯欧。找到和項目相關的內容详囤,找到相應的參考文獻,直接去看論文實現(xiàn)論文的算法即可镐作。絕大部分重要論文Google
Scholar都能搜到原文藏姐,如果英文水平不夠,也可以在幾個期刊網(wǎng)搜中文的論文该贾,不是特別前沿的東西羔杨,中文的論文也有涉及到的。
看書的重點是理解杨蛋,理解算法最佳方式是自己把算法寫一遍兜材±砼欤可以參考OpenCV的代碼來寫。理解一個算法之后曙寡,這個算法就可以為你賺錢糠爬,不理解,是很難用對算法的举庶。自己寫算法执隧。你才對這個算法的性能有直觀的感受,知道可以通過哪些方式來改進它灯变,知道怎么在性能和算法效果之間進行取舍殴玛,這對項目來說,是很重要的添祸。
不建議買第二本書的中文版滚粟,它的中文版閹割了參考文獻和索引這兩個最有使用價值的部分。
把這兩本書全部看完吃透刃泌,單靠大學水平的數(shù)學是不夠的凡壤,至少得數(shù)學系本科生級別的知識儲備。如果大學數(shù)學忘了耙替,建議先復習一遍亚侠。
自學推薦:
(1)陳天權版《數(shù)學分析(一、二俗扇、三)》硝烂。這是國內最難的一套數(shù)學分析教材,為什么推薦它呢铜幽?它自成條理滞谢,信息量豐富,把圖像分析深入所需的數(shù)學內容都包括進去了:微積分除抛、點集拓撲狮杨、實分析、泛函到忽、變分橄教、復分析、流形……喘漏,重要概念都講了护蝶。學完了,看論文問題不大翩迈。缺點就是難滓走。可是帽馋,圖像類項目的特點也是難搅方。遇難而上是必須的比吭。這套書雖難,但是思路極其清晰姨涡,就是看的慢一點而已衩藤。要知道,計算機所能發(fā)揮出的威力只是數(shù)學理論的一部分涛漂,隨著計算機的計算能力越來越強赏表,越來越多的數(shù)學方法會引入到程序中來,對于圖像分析領域尤其如此匈仗。所以要未雨綢繆瓢剿,別看有的數(shù)學知識現(xiàn)在用不上,說不定哪天就用到了悠轩。
(2)Lax的《線性代數(shù)及其應用》间狂。作者是沃爾夫獎得主,寫的很簡潔明要火架,且不與大學學的線性代數(shù)重復鉴象。
(3)《Numerical Recipes》。數(shù)值分析有這一本書就夠了何鸡,秒殺眾書的書纺弊。這本書只看感興趣的或當前用到的即可。
鑒于圖形和圖像的關系越來越緊密骡男,關于圖形學的書籍也是值得一讀的淆游。推薦兩本:
(1)David F.Rogers的《計算機圖形學的算法基礎》。這本書實在是太經(jīng)典了隔盛,就是有點老犹菱,比較基礎。
(2)《實時計算機圖形學》這本書講的都是比較現(xiàn)代的骚亿,正好結合上一本看。
圖像編程=算法+性能熊赖。因此来屠,性能優(yōu)化方面也得看。比如這本:《軟件優(yōu)化技術--IA-32平臺的高性能手冊》震鹉。
會用Photoshop對圖像編程很重要俱笛。Photoshop有強大的編輯功能和特效庫,很多時候传趾,可以用Photoshop先進行預研究迎膜,確定項目是否可行〗迹可行的話磕仅,我們再把Photoshop的操作過程用算法來實現(xiàn)珊豹,實際項目中,經(jīng)常會這么操作的榕订。Photoshop推薦一本書:李金明店茶、李金榮的《Photoshop CS5完全自學教程》。這本書寫的非常棒劫恒,就是書名有點土贩幻,和那些垃圾書的書名很像。
如果用C/C++的話两嘴,推薦《學習OpenCV(中文版)》丛楚,翻譯的不錯。如果用C#的話憔辫,沒啥好書可以推薦趣些,可以看看我博客中的文章。如果用Flash的話螺垢,推薦《Foundation ActionScript 3.0
Image Effects》喧务。
如果做的是和彩圖有關的話,推薦《彩色數(shù)字圖像處理》枉圃。其它的功茴,《圖像局部特征不變性特征與描述》寫的也不錯。
====
下面舉個例子講講工具孽亲、知識間的綜合應用坎穿。
要實現(xiàn)一個lemo特效,可以先利用現(xiàn)有工具得到像素之間的映射圖(比如我這篇文章:《解決問題的藝術:半小時編程實現(xiàn)照片的反轉負沖特效》)返劲。但這樣一來玲昧,每種特效都需要一個像素映射圖,增大了程序的尺寸篮绿,怎么辦呢孵延?
一種方法是用Photoshop模擬它,然后亲配,寫圖像處理算法來重復這一過程尘应。這是用圖像處理的方法來解決問題。
另一種方法是將lemo特效當作一多元函數(shù)吼虎,特效前的圖像是輸入值犬钢,特效后的圖像是輸出值,先寫出一個自由度高點的函數(shù)思灰,再采用擬合的方法玷犹,找到合適的函數(shù)參數(shù),然后檢驗這個函數(shù)的穩(wěn)定性洒疚,靠譜的話就是它了歹颓。這是用數(shù)學的方法來解決問題坯屿。