处理图像技术小结

前一段时间,我一直在制作OpenCV基础知识的课件,因为一方面我感觉如我现在的准备的东西缺乏一个系统的过程;另一方面我也在做视频的过程中,反省自己对基础知识是否掌握牢靠了,千万不能误人子弟。那么课件的制作,包括内容的顺序,主要还是基于《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)。
图像处理涉及方面很多,无论是理论、实现还是应用场景,再加上软件、硬件,我也只是接触、了解、实现了很小的一个部分。但是反思这几年的过程,感觉还是有必要小结一下的,这里把自己博客中的一些东西串了一下——每一篇博客的发布都肯定是有原因的,不是随便发布出来的。希望大家有兴趣可以去看一看,特别是做桌面图像处理的,应该能够得到一些可以借鉴丢东西。

时间: 2024-11-13 06:37:21

处理图像技术小结的相关文章

三维图像技术与OpenGL基础理论

英文原文:3D Graphics with OpenGL Basic Theory 中文译文:三维图像技术与OpenGL基础理论 1. 计算机图像硬件 1.1 GPU(图像处理单元) 如今,计算机拥有用来专门做图像处理显示的GPU模块,拥有独立的图像处理储存(显存). 1.2 像素和画面 任何图像显示都是基于栅格的格式.一个栅格既是一张二维的像素直角坐标网.像素具有两个属性:颜色和位置.颜色通常使用RGB(红绿蓝)来表示,典型的有用8位或者24位二进制位(真彩色)表示一种颜色.位置则用坐标(x,

SVG图片技术小结

今天在公司没事,研究了一下最近流行的SVG技术,发现,随着css3的不断流行,和浏览器技术的发展,SVG将会取代网站大量图片,成为网站图片展现的主流. AI是我们常用的矢量图编辑器,现在AI可以直接另存SVG图片,SVG图片相比传统图片,占位更小,浏览更方便!而且可扩展性更强! 下面看一个SVG的例子: <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//

谷歌那让人“呵呵”的图像技术

其实,谷歌在图像技术方面没搞明白的,可不仅仅只是libjpeg的optimize_mode参数那么简单. 跟安卓系统在图像内存管理方面的“糊涂”比起来,图片品质还真算不上个事,质量差点大家还能忍,内存管理不当则会导致应用的崩溃(OOM :Out of Memory)可就真没人能忍了.   Bitmap很占内存,那到底会占多少内存呢?计算起来很简单,如果你需要显示一个长宽均为612个像素的正方形图片,对应的Bitmap对象需要612*612*4=1498176个字节的内存,即大约不到1.5MB的内

前端html、Javascript、CSS技术小结

简单地总结了一下前端用过的html.javascript.css技术,算是清点一下,做个大略的小结,为进一步的学习给个纲领. 一.HTML 由于HTML5的兴起,简单地判断一个网页是否是html5网页,只需要找找内部是否有html5的标志性标签就行了.然而平时虽然写了不少html,却没怎么关注它的发展史: GML(Generalized Marcup Language)通用标记语言 和SGML(Standard Generalized Markup Language)标准通用标记语言. 由Tim

ATM技术小结

ATM技术小结 ATM是一种高速.低延迟的多路复用和交换技术,它可支持任何类型的用户业务,比如语音.数据和视频.ATM采用小的.固定长度的单元(称作信元),每个信元由包含于信元头部的虚电路标识符来识别,ATM网络使用这些标识符经由高速交换机对业务进行中继处理.ATM提供有限的差错检测操作,它不提供重发服务,只在小的信元头部进行很少的操作,这样做的目的是使网络具有足够快的速度以支持多兆位传输速率.在ATM层之上还有一层,称作ATM适配层,这一层对各种业务类型进行大量的会聚.分段和重装操作. ATM

图像技术分析 图像编辑器核心技术

图像技术都是想通的,要举一反三,从中思考出核心,使其变幻莫测.一个合格的图像编辑器所要有的技术框架:

图像操作小结

花了两天时间弄图像. 今天做一个小结 关于图像操作. 小结 相关类.Drawable  就是一个可画的对象. 官方文档原话是:A Drawable is a general abstraction for "something that can be drawn."Canvas 画布. 官方文档如是说: 用这个类来画一些东西, 前提要有4个基本的部件    1. 一个bitmap用来确定像素. 可以看一下Canvas() 的构造函数, 有三个: Canvas(); Canvas(Bit

又要刷屏,苹果将增强AR图像技术,毫无违和感

原文标题:又要刷屏,苹果将增强AR图像技术,毫无违和感 今天苹果公开了一项新的专利,通过使用这项技术 ,一些AR应用能够在呈现AR图像时将它与现实存在物体之间那种奇怪的违和感消除,让AR图像变得与显示图像更加相似. 对于VR软件,苹果似乎一直都没有什么大动作,但是对于AR技术苹果明显抱有极大的兴趣.苹果CEO库克表示,虽然对于AR还没有彻底了解,但他已经认识到了它的潜力.对此有不少人预言iPhone上将搭载了AR机能,今日的一项发现让人们更加确认了这一可能性. 今天苹果公开了一项新的专利,它就是

技术小结

1. default(T) 在泛型编成中如果不限制T类型参数是值类型或引用类型的话 你程序内部可能会出现错误,因为值类型不允许NULL.所以default用来获取一个类型的默认值,对于值类型得到new T()  基本得到的都是0;对于引用类型会得到Null或者你不使用Default关键词,自己通过反射得到T是指类型还是引用类型 然后设置默认值 例子:/// <summary>        /// 逆序列化对象        /// </summary>        /// &l