我學習圖像處理的小結


    前一段時間,我一直在制作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
圖像處理涉及方面很多,無論是理論、實現還是應用場景,再加上軟件、硬件,我也只是接觸、了解、實現了很小的一個部分。但是反思這幾年的過程,感覺還是有必要小結一下的,這里把自己博客中的一些東西串了一下——每一篇博客的發布都肯定是有原因的,不是隨便發布出來的。寫博客是總結,也是分享。現在感覺博客看的人還是比較少,感覺有里面的一些資源,還是有自己的思考在里面的,是有一定價值的東西。大家如果有機會,還是幫忙宣傳宣傳。有機會也多來踩一踩,增增人氣!
  最后,放些圖,有圖有真相嘛~
 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM