我學習圖像處理的小結

    前一段時間,我一直在製做OpenCV基礎知識的課件(《學習OpenCV3.0初級實戰視頻課程》 http://edu.51cto.com/course/10381.html,《學習OpenCV3.0中級實戰視頻課程》http://edu.51cto.com/course/10712.html。由於一方面我感受若是僅僅是有好比「答題卡識別」http://edu.51cto.com/course/8637.html,「圖像拼接」http://edu.51cto.com/course/9313.html這一類的視頻,老是缺少一個系統的過程;另外一方面我也在作視頻的過程當中,檢討本身對基礎知識是否掌握牢靠了,千萬不能誤人子弟。那麼課件的製做,包括內容的順序,主要仍是基於《learningOpenCV3》的。結合製做課件,我對《learningOpenCV3》書後的習題較爲仔細的解決,而且push到了Github上https://github.com/oreillymedia/Learning-OpenCV-3_examples。有push固然也就有commit了,可喜的是這個commit是由Opencv類庫的創始者,也是《learningOpenCV3》這本書的做者Gary操做的。一來二去混熟了,我就問Gary這書怎麼還沒中文版呀?他說開始搞了呀。我就說我能不能加入呀?他說行。要了個人email,接着聯繫上了清華出版社,也看到了部分初稿。因爲書已經翻譯的差很少了,我就做爲reviewer加入,主要是看一看語法和程序方面的錯誤。review的過程,實際上仍是一個重複學習的過程,不少在之前學習過程當中一筆帶過,或者看不懂就拉倒的地方,如今就必須認真仔細地來看——多多少少要擔負責任的呀。這個過程當中,反思走過的路,悟出了一些東西,主要是當時是如何一步一步學習起圖像處理的,和你們分享:

  第一個過程,從不瞭解到了解
  我一開始是用csharp的,並且剛開始作圖像處理用的是halcon。halcon的官方自帶的例程不少,百十來個吧,我當時一個一個跑着玩,感受頗有意思;而後就想辦法融合到csharp中去。csharp不是寫界面快嘛,加上halcon的函數效果,就可以獲得完整的程序。而後我開始修改這些例程,實際上,我一開始使用halcon來作圖像拼接,而且實現了出來http://www.cnblogs.com/jsxyhelu/p/3390598.html。可是halcon的版權的呀,還有和界面的交互的問題也多,苦惱時看到一本書,叫作《學習OpenCV2》,聽老師傅說這個很厲害,翻了一翻——徹底看不懂呀!

  第二個過程,抄襲,造成本身的東西
  版權是硬傷呀,沒有辦法只能學習OpenCV,一開始不是看《學習OpenCV2》,而是其餘書。我採用的方法是在噹噹、china-pub中搜索opencv這個關鍵字,而後找到全部已經翻譯成中文的opencv方面的書,而後再亞馬遜上面搜索opencv,再找到那些尚未翻譯的原版。基本上,OpenCV相關的書英文的我都有,比較重要的有中文的。書拿到了,我認爲比較高效的方法就是——快速過一遍,有了基礎;而後跑裏面的例子,增長感性的認識;而後再根據須要重構,反覆反覆。這個過程當中,也生成本身的專用函數GOCVhelper(位github開源,簡介http://www.cnblogs.com/jsxyhelu/p/5904251.html爲了使用OpenCV,從頭學習mfc,雖然如今c++發展很迅速了,windows這塊仍是mfc支持的比較好;偶爾看到於世琪的dshow對mfc的支持,感受這個太好了,屢次封裝成爲了GOMFCTemplate2(位github開源,簡介http://www.cnblogs.com/jsxyhelu/p/GOMFCTemplate2.html,成爲一個比較完整的庫了,也發給於世琪看了,他說很好!還幫在微博上推了一下。
可是mfc寫界面實在太慢呀,怎麼辦?兩條路。一個是用csharp來寫,在這個方向研究,造成了《Csharp調用基於Opencv編寫的類庫文件http://www.cnblogs.com/jsxyhelu/p/GOCW.html 這種方法,可是有缺陷,傳遞的圖片不能太大太快;另外一個方向是mfc造成更全面的類庫,實現了GreenOpenPainthttp://www.cnblogs.com/jsxyhelu/p/6350260.html,相似於畫圖程序,帶文件列表,可以放大縮小還帶陰影,最重要的仍是帶準確的標尺,還可以畫矩形框。要知道,想在mfc中實現這種效果,所有要底層實現呀,我但是翻遍了github,codeproject,問遍了stackoverflow才獲得這樣的結果的。
固然,這些模型的推進,都是有實際項目拉動的。首先實現項目,而後從項目中將模型精良出來,方便下次使用。我基本上採用這個模式吧。
  這樣,csharp經過clr調用opencv , GreenOpenPaint實現多圖像處理,再加上GOMFCTemplate2實現實時視頻處理。那麼對於桌面來講,基本夠用了。下一步就是手機端和webapi了,這些已經思考到了,在研究。

  第三個過程,算法原創
  作到這個過程,還只是使用OpenCV作項目。可是隨着項目的深刻,不少時候客戶的要求,不是有現成的算法的,也不是經過現有算法進行拼接可以解決的。怎麼辦?只能本身去研究,有一些問題是有論文的,也可能有書,運氣比較好還有matlab代碼;也會遇到了太少見了,論文也比較少。這個時候,須要的能力,仍是最基本的英語數學。可以快速閱讀獲得本身要的東西,可是每每一篇重要的的論文也得讀個十幾、幾十遍吧,數學這塊,我主要從線性代數開始,包括作《learningOpenCV3》課後習題的時候,只要涉及到數學問題,都想辦法給解決掉,推導出來!而不是跳過去。由於我已經認識到,數學對於靈感呀、思惟呀綜合能力的影響很重要;可以把一個定理,好比pca中svd分解給推導一個例題出來,再使用這個函數,那感受絕對不同的(《學習OpenCV3》第7章第4題-SVD奇異值分解的驗算http://www.cnblogs.com/jsxyhelu/p/7029283.html
圖像處理涉及方面不少,不管是理論、實現仍是應用場景,再加上軟件、硬件,我也只是接觸、瞭解、實現了很小的一個部分。可是反思這幾年的過程,感受仍是有必要小結一下的,這裏把本身博客中的一些東西串了一下——每一篇博客的發佈都確定是有緣由的,不是隨便發佈出來的。寫博客是總結,也是分享。如今感受博客看的人仍是比較少,感受有裏面的一些資源,仍是有本身的思考在裏面的,是有必定價值的東西。你們若是有機會,仍是幫忙宣傳宣傳。有機會也多來踩一踩,增增人氣!
  最後,放些圖,有圖有真相嘛~




相關文章
相關標籤/搜索