我学习图像处理的小结

jsxyhelu2015 2017-08-14 10:43:41
加精
前一段时间,我一直在制作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)。
图像处理涉及方面很多,无论是理论、实现还是应用场景,再加上软件、硬件,我也只是接触、了解、实现了很小的一个部分。但是反思这几年的过程,感觉还是有必要小结一下的,这里把自己博客中的一些东西串了一下——每一篇博客的发布都肯定是有原因的,不是随便发布出来的。希望大家有兴趣可以去看一看,特别是做桌面图像处理的,应该能够得到一些可以借鉴丢东西。


...全文
12306 62 打赏 收藏 转发到动态 举报
写回复
用AI写文章
62 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sliny2001 2018-05-25
  • 打赏
  • 举报
回复
菜的自己都看不下去的菜鸟 前来膜拜
qq_35638643 2017-11-08
  • 打赏
  • 举报
回复
马住,学习。
weixin_40538118 2017-11-08
  • 打赏
  • 举报
回复
棒棒哒
qq_32363911 2017-11-06
  • 打赏
  • 举报
回复
learning~
hijudey 2017-11-03
  • 打赏
  • 举报
回复
学习学习,做好准备……
__小石头 2017-10-31
  • 打赏
  • 举报
回复
谢谢分享经验,向你学习~~
yuzh_data 2017-10-29
  • 打赏
  • 举报
回复
整理得不错
天台的故事 2017-10-28
  • 打赏
  • 举报
回复
新鲜出炉的帖子啊,关注,搞个实际有用的案例来实战更好吧...
zhangyu09a 2017-10-27
  • 打赏
  • 举报
回复
一步步进步,博主加油!
Clampard 2017-10-27
  • 打赏
  • 举报
回复
学习学习再学习!!!!
q820265121 2017-10-27
  • 打赏
  • 举报
回复
很棒的帖子,值得学习
FoolCarpe 2017-10-24
  • 打赏
  • 举报
回复
学习学习
paschen 2017-10-23
  • 打赏
  • 举报
回复
零隐 2017-10-23
  • 打赏
  • 举报
回复
一分也是分。接
weixin_40753650 2017-10-23
  • 打赏
  • 举报
回复
加油加油谢谢支持
社会瑞弟呀 2017-10-18
  • 打赏
  • 举报
回复
...................
HomerRo 2017-10-18
  • 打赏
  • 举报
回复
习惯性的去下载,一看毛星云的教程就在身边O(∩_∩)O
qq_34912532 2017-10-17
  • 打赏
  • 举报
回复
真厉害楼主!
AITECH 2017-10-16
  • 打赏
  • 举报
回复
总结的很好,有心人
cathy_ff 2017-10-16
  • 打赏
  • 举报
回复
很棒的帖子,值得学习
加载更多回复(42)
数字图像处理方面的经典教材,中文译本 阮秋琦,阮宇智等译 本书是把图像处理基础理论论述与软件实践方法相结合的第一本书,它集成了冈萨雷斯和伍兹所著的《数字图像处理》一书中的重要内容和MathWorks公司的图像处理工具箱。本书的特色在于它重点强调了怎样通过开发新代码来增强这些软件工具。本书在介绍MATLAB编程基础知识之后,讲述了图像处理的主要内容,具体包括亮度变换、线性和非线性空间滤波、频率域滤波、图像复原与配准、彩色图像处理、小波、图像数据压缩、形态学图像处理、图像分割、区域和边界表示与描述以及对象识别等。 本书概念清晰,层次分明,可供从事信号与信息处理、计算机科学与技术、通信工程、地球物理、医学等专业的大专院校师生学习参考,也可供相应的工程技术人员参考使用。 本书概念清晰,层次分明,可供从事信号与信息处理、计算机科学与技术、通信工程、地球物理、医学等专业的大专院校师生学习参考,也可供相应的工程技术人员参考使用。 第1章 绪言  前言  1.1 背景知识  1.2 什么是数字图像处理  1.3 MATLAB和图像处理工具箱的背景知识  1.4 本书涵盖的图像处理范围  1.5 本书的Web站点  1.6 MATLAB工作环境   1.6.1 MATLAB桌面   1.6.2 使用MATLAB编辑器创建M文件   1.6.3 获得帮助   1.6.4 保存和检索工作会话  1.7 参考文献的组织方式  小结 第2章 基本原理  前言  2.1 数字图像的表示   2.1.1 坐标约定   2.1.2 图像的矩阵表示  2.2 读取图像  2.3 显示图像  2.4 保存图像  2.5 数据类  2.6 图像类型   2.6.1 亮度图像   2.6.2 二值图像   2.6.3 术语注释  2.7 数据类与图像类型间的转换   2.7.1 数据类间的转换   2.7.2 图像类和类型间的转换  2.8 数组索引   2.8.1 向量索引   2.8.2 矩阵索引   2.8.3 选择数组的维数  2.9 一些重要的标准数组  2.10 M函数编程简介   2.10.1 M文件   2.10.2 运算符   2.10.3 流控制   2.10.4 代码优化   2.10.5 交互式I/O   2.10.6 单元数组与结构简介  小结 第3章 亮度变换与空间滤波  前言  3.1 背景知识  3.2 亮度变换函数   3.2.1 函数imadjust   3.2.2 对数和对比度拉伸变换   3.2.3 亮度变换的一些实用M函数  3.3 直方图处理与函数绘图   3.3.1 生成并绘制图像的直方图   3.3.2 直方图均衡化   3.3.3 直方图匹配(规定化)  3.4 空间滤波   3.4.1 线性空间滤波   3.4.2 非线性空间滤波  3.5 图像处理工具箱的标准空间滤波器   3.5.1 线性空间滤波器   3.5.2 非线性空间滤波器  小结 第4章 频域处理  前言  4.1 二维离散傅里叶变换  4.2 在MATLAB中计算并可视化二维DFT  4.3 频域滤波   4.3.1 基本概念   4.3.2 DFT滤波的基本步骤   4.3.3 用于频域滤波的M函数  4.4 从空间滤波器获得频域滤波器  4.5 在频域中直接生成滤波器   4.5.1 建立用于实现频域滤波器的网格数组   4.5.2 低通频域滤波器   4.5.3 线框图与表面图  4.6 锐化频域滤波器   4.6.1 基本的高通滤波器   4.6.2 高频强调滤波  小结 第5章 图像复原  前言  5.1 图像退化/复原处理的模型  5.2 噪声模型   5.2.1 使用函数imnoise添加噪声   5.2.2 使用指定的分布产生空间随机噪声   5.2.3 周期噪声   5.2.4 估计噪声参数  5.3 仅有噪声的复原:空间滤波   5.3.1 空间噪声滤波器   5.3.2 自适应空间滤波器  5.4 通过频域滤波来降低周期噪声  5.5 退化函数建模  5.6 直接逆滤波  5.7 维纳滤波  5.8 约束的最小二乘方(正则)滤波  5.9 使用Lucy-Richardson算法的迭代非线性复原  5.10 盲去卷积  5.11 几何变换与图像配准   5.11.1 空间几何变换   5.11.2 对图像应用空间变换   5.11.3 图像配准  小结 第6章 彩色图像处理  前言  6.1 MATLAB中彩色图像的表示方法   6.1.1 RGB图像   6.1.2 索引图像   6.1.3 用来处理RGB图像和索引图像的IPT函数  6.2 转换至其他彩色空间   6.2.1 NTSC彩色空间   6.2.2 YCb

5,531

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧