我学习图像处理的小结

    前一段时间,我一直在制做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
图像处理涉及方面不少,不管是理论、实现仍是应用场景,再加上软件、硬件,我也只是接触、了解、实现了很小的一个部分。可是反思这几年的过程,感受仍是有必要小结一下的,这里把本身博客中的一些东西串了一下——每一篇博客的发布都确定是有缘由的,不是随便发布出来的。写博客是总结,也是分享。如今感受博客看的人仍是比较少,感受有里面的一些资源,仍是有本身的思考在里面的,是有必定价值的东西。你们若是有机会,仍是帮忙宣传宣传。有机会也多来踩一踩,增增人气!
  最后,放些图,有图有真相嘛~




相关文章
相关标签/搜索