想學習計算機圖像處理方面從哪入手,怎麼個學習順序,體系?
自己是軟體工程的一名學生,想學習一下圖像處理方面的編程知識,求問各位大大,從哪開始學起。這一塊有點迷茫
我並非圖像處理專業方向的研究者,只是工作中偶爾會用到這些東西。我只能說說我自己是怎麼做的,希望能有所幫助。
首先,去買本數字圖像處理 (豆瓣),不要什麼Matlab版,C++版。只買純理論的那個。然後親手把其中大部分演算法實現一遍。這樣你自己就能做一個小型的圖像處理庫出來。能順便練一下你在軟體工程里學的各種模式。很多內容重複性比較高,一個類型的做一個就好了。至少對我自己來說,只有親手實現了這個演算法,才算是真正理解了。有能力去看英文版,這本書的翻譯不是很好,很多地方說不清楚。就算看中文版也要找個英文的留著對照。
其次就看你的興趣了。比如對圖像分割感興趣,那就去Google 學術搜索找找最近的Review。你如果之前有認真看過那本書,那麼大部分論文應該是可以看懂的。
更細化一些的領域,比如醫學圖像的血管分割,或者互動式分割,你可以直接搜這個關鍵詞,去看引用數最多的論文。從中根據其內容,也可以順著找著它引用的參考文獻。
這樣一路下來,基本你就能理清這個領域中大部分重要的演算法了。盡量把它們都實現一遍,你自己再去做進一步研究就會非常順利了。
另外多說兩句。
除了看Review,最好不要浪費大量時間在中文論文上。比如你可以拿研究生論文當做背景資料看,他們做的演算法基本就不用看了,坑太多。當然不乏有優秀作品,但是垃圾太多,實現一個演算法又不是一件容易的事,被坑次數多了,浪費太多時間以後就會對其敬而遠之。
你如果真的按照他們的演算法去實現一遍,就知道很多的論文根本就是瞎扯。一會多出來一個莫名其妙的參數,一會又搞了一個假設前提,說基於這種前提,XXXXX。最後弄出來的演算法,要麼只能在他自己的數據集上跑出理想效果,這還是好的,還有的乾脆連自己提供的測試結果都做不出來。這些東西實用性基本為0。所以搞得我現在看見中文論文就先看它的引用文獻,找他這個改進演算法的原版演算法,大部分都是英文的,然後去看原始論文。
很多作者會分享自己的代碼。真正優秀的演算法,作者是不會介意分享自己的代碼的。因為他知道我的演算法你拿去也能做出來一樣的效果。
另外,你可以去看OpenCV | OpenCV裡面實現的演算法。那些基本都是各自領域裡非常有名的演算法,很多都會標記出相關的論文。只是還是建議你親手實現一下,這樣才能體會到它的精妙之處。作為一個學了七年圖像處理的從業者,我自認為從來都沒有系統的學過圖像處理的知識,無論是讀書還是工作,從來都是用到什麼學什麼,看的多自然能發現這些知識的聯繫點,但是要說把圖像處理里涉及到的知識循序漸進的學習,不現實也不科學。
其實這個方向跟其他計算機學科的方向沒什麼不同,都是基礎數學在領域裡的發展而已。想要系統的學習圖像處理,最好的方法是把這裡面涉及的數學知識從頭到尾看一遍,例如從線性代數開始學習計算幾何學、線性規劃以及凸優化理論,從概率論學習隨機過程和基於貝葉斯的機模式識別,除此之外還有離散數學,變分理論,統計機器學習等等等等等等等等。當然,相信當你把這些知識從頭到尾理解透徹了之後早已成為科學大神去追尋更偉大的數學問題,肯定對圖像處理沒什麼興趣了。。。
另一方面,這個方向可以認為是一個偏向自然應用的學科,在工程中的具體實現方法往往是又工程中的其他因素決定的,例如數據集,並行計算,參數學習等。這又需要從計算機體系的角度去理解這個方向里的知識,從應用頂層去系統的理解這些知識。當然,當你把這些知識自頂而下融會貫通之後早就攻克無數應用難題擔任CEO迎娶白富美,肯定對圖像處理沒什麼興趣了。。。
所以綜上所述,系統的學習圖像處理知識,最好的辦法還是用到什麼學什麼,好好的打好其他基礎吧。。。
應該好好看看岡薩雷斯的數字圖像處理 基本研究生的課程就是這本書 我們當時比較願意用matlab編程 可能有助於理解一些演算法神馬的~
推薦閱讀:
※電腦中一個G的文件有多重?
※計算機補碼運算背後的數學原理是什麼?
※當今最好的本地文本檢索軟體是?
※如果現在微軟重寫Windows會怎麼樣?
※為什麼分布在地球各地的古文明大多採用十進位的計數法?