伴随着图像处理技术的发展,我们每天无时无刻都在接触着图像处理的一切,打开相机,设置美颜程度,伴随着快门键的按下,一张瘦脸磨皮的人像处理完成了。按下手机的解锁键,前置摄像头已经获取了你的人脸图像,并在你的脸上打上了若干个点,与数据库的信息进行比对,一次人像比对完成了。车辆行驶到单位校园门口,你的车牌已经被切割成一个个字母、数字与汉字,随着栏杆的抬起,又一次图像处理完成了。伴随着图像处理的广泛应用以及目前人工智能在图像领域的应用,更多的图像处理技术爆发式的增长,也更多的人投入到了这个领域的研究。作为一名行业从业者,如何学好图像处理就显得甚为棘手。博主作为一名“半路出家”的图像处理入门者,在这里也给各位读者分享一下一直以来的一些思考,因为本人水平有限,不妥之处还望见谅。

1、高山平顶上,尽是采樵翁。人人各怀刀斧意,未见山花映水红。        ——何权峰《眼界,决定你的世界》

        其实很多时候,我们都局限在自己的小平台里,沾沾自喜,而忽略了你身边技术的飞速发展,也许这种沉浸对于一些传统行业来说,淘汰一个人的速度是十几年甚至几十年,但是对于计算机领域来说,这一淘汰也许就是一瞬间,这也是为什么企业在招聘应届生事,一方面关注你的技能,但也非常关注你的学习能力(简单说就是你可以什么都不会,但你学的快不?但你愿意学不?),而这种学习能力往往是需要长时间培养锻炼的,举个例子:清华北大的学生永远不愁找不到工作,而去清华北大招聘的企业也往往最不看重你的专业,因为他们知道,这里有着国内学习能力最强的人。说的有点远了,回到刚刚的话题,其实给博主触动最深的还是看到了CSDN某大神的一篇博客《阿里巴巴(菜鸟) - 算法工程师(机器学习)提前批笔试面试总结》中面试环节面试官问的一个问题:介绍CVPR2018你最感兴趣一篇论文的工作?看到这里博主犹如当头一棒。自己也只是听说过CVPR,当然也会留意一些媒体的报道或者是推送,但是从来都没有认真的甚至说大致的浏览过每一年会议的文章内容甚至是会议目录。而自己也“井底之蛙”般的只能感叹自己也许将是接下来就被淘汰的那个。其实广一点说,我们的本科生或者研究生期间,可能你的实验室做的东西很low,亦或是你是一个“半路出家者”,或者我们的“出身”不是很好,这些都或多或少的会限制我们的眼界。但是我们自己不应该允许自己做那只“井底之蛙”,我们更应该关注或者说拥抱我们所处这个行业最新、最前沿的技术(比如2018CVPR的最佳论文《Taskonomy: Disentangling Task Transfer Learning》);关注我们这个领域的大牛(比如做计算机视觉我们一定绕不开李飞飞教授、做相机标定一定离不开张正友教授)。眼界决定我们的视野,这也是为什么很多顶尖的公司在招聘的时候一定会加上如下两条:1、所在实验室为国家重点实验室或者在国内顶尖的科研机构有过实习经历  2、在顶级会议发表过相关文章。会当凌绝顶,方能一览众山小!

这里,博主附上计算机视觉领域的CCF推荐会议:计算机视觉及图像处理领域会议,CCF推荐(A类,B类,C类),感兴趣的读者可以选取和你研究课题相关的较高水平的会议关注查看。

2、知其然与知其所以然。 ——《朱子语类》卷九《论知行》

        这里我们要说,很多人在从事图像处理工作的时候更多的是被动的被推着走,只知其然而不知其所以然,还是举个例子,我们都知道,图像处理的前期操作就是获取图像,而获取图像的一个重要途径就是通过相机获取图片,相机获取到的图片更多程度需要去标定矫正。好了,问题来了,很多人知道,我获取图像了,按照“前人所述”我需要进行相机标定,设置标定板、计算内外参数...一些列工作完成了,我们也得到了“前人所述”的内外参数,那接下来呢?我们怎么矫正呢?为什么要做矫正呢?不矫正对我的图像处理过程有什么影响呢?想必这个问题是很多读者没有考虑过的,博主也看了很多的博客,相机标定写内外参矩阵的大有人在,图像生动、推导详尽。但说获取这些参数只会该干什么的博客却是凤毛麟角。反观之,我们其实很多时候也都停留在这样的阶段,就是只知道,这个事情该这样,但是为什么要这样却知之甚少。

3、一门科学,只有当它成功地运用数学时,才能达到真正完善的地步。  ——马克思

        其实博主本人也是一个讨厌数学且数学不好的人,但是越是从事图像处理工作越深,越发觉得数学的重要性。数学也许就像是你的导师,你很多时候很讨厌,但是却绕不开。图像处理时我们会发现,图像在计算机内其实就是一个个矩阵,图像的处理很多时候就是数学变换,比如去噪(数学上的均值或者中值处理),比如放大缩小图像(数学上的插值和采样)等等,这里我们还是举一个例子:从事图像处理的人应该大部分都知道(最起码听说过)SIFT特征点检测算法,这里不展开论述,我们只拿其中的一个关键部分来说,SIFT算法中有两种方法,分别是:

a、使用LOG图像(高斯拉普拉斯变换图像):其步骤是:先将照片降采样,得到了不同分辨率下的图像金字塔。再对每层图像进行高斯卷积。这样一来,原本的图像金字塔每层只有一张图像,而卷积后,每层又增加了多张不同模糊程度下的照片。大概就是下图这样:

b、使用(DOG图像):DOG即高斯差分。构造高斯差分图像的步骤是:在获得LOG图像后,用其相邻的图像进行相减,得到所有图像重新构造的金字塔就是DOG金字塔。大概就是下图这样子:

        好了,问题来了,这一数学上的改进,能有多大的差距呢?我们可以看到,就是这样一个“看似简单”的改进可以使我们的运算量小一个数量级!数学有多重要!

        也许上面的过程有一些读者没看明白,什么又是高斯卷积又是图像相减的,太麻烦,那我们再介绍一种非常“简单”的特征点检测算法(FAST) ,有多“简单”呢?这里先放一张图:

        为了让大家简单易懂,这里我们简单的说原理,可能与实际不相符,简单说,就是你要找特征点P,那我在p周边画个圈,设置一个阈值,如果有若干个点大于这一阈值,我们就理解为p是特征点(阈值为9就是FAST9,阈值为11就是FAST11)。惊不惊喜,意不意外,就是这么好理解,而且这一算法的速度快,效果也不差。其实这种方法博主更多的理解为是一种数学上的改进。而我们纵观众多划时代的文章、方法、算法,其实其本质大多为数学方法在各个领域上应用的改进。学好数理化,走遍天下都不怕,数学,可怕却重要! 

4、如果我能看得更远一点的话,是因为我站在巨人的肩膀上。  ——牛顿

        伴随着计算机网络的发展,开源的趋势化(强调专利的微软收购了Github并主动开源了众多代码),我们可以找到更多的资源与资料(BaiDu,Google一键直达),一个个的开放图形库和开放图形软件(最常见的OpenGL、OpenCV),我们有着比以往任何时候更多的资源,也有着比以往人更多的机会接触到科技的最前沿(顶级会议大部分都是开源的,我们可以随意下载),这里博主特别强调,大胆的去使用这些工具,抱着书本往死里啃,问周边同学或老师有效,但这样的时代终将过去,信息交互的年代,每一个人都是一个信息源(有点像众包的概念),站在巨人肩膀上引领科技进步的人也许不是你我,但是你我可以更容易找到这个世界上的巨人在哪里了,我们的获取信息的渠道更多了,我们身边的信息源更多了(比如MOOC,我们可以倾听最好的老师讲课),这里说点题外话,推荐一部纪录片《互联网时代》,当时博主看的热血沸腾!回到主题,不主动拥抱这个时代的人一定会被时代所抛弃。能活到最后的人一定不是闭门造车的,一定是那个敢于攀登,寻找巨人的人。

5、工欲善其事,必先利其器。  ——《论语·卫灵公》

这里其实博主还是老生常谈的强调你的编程能力,我们都知道,一切的图像处理的最终实现都是程序,更是算法(硬件处理也有硬件程序、算法),而编程能力就好比士兵的枪、老师的粉笔。再好的想法如果不能付诸于一行行“冰冷”的算法最后都只能是镜中花、水中月。而选择哪门语言作为你的“枪”这里博主就不再赘述,直接放上之前写的一篇博客的内容:

Python?JAVA?C/C++?
      其实实验室也会有一些师弟师妹问我这个问题,我该选一门什么语言呢?当然,我在这里不去评论哪门语言的优劣好坏,仅仅针对每一门语言在找工作时选择的机会跟大家做一些分享,首先,如果你需要找工作时自己能多一些机会和选择,那么仅仅会MATLAB或者Python可能还是远远不够的,毕竟找工作时需求量最大的依旧是JAVA\C\C++相关的工程师,如果你仅仅会MATLAB或者Pyrthon,那么你找工作时可能只能选择算法相关类的工作,而这类工作,我们都知道,和你竞争的往往都是一些大佬,算法岗也因为其相对的高工资和低劳动强度而成为近两年来淘汰人数最多的岗位之一。

      所以,这里强烈建议如果有可能,请抽出时间选择JAVA\C\C++其中一门语言进行系统化的学习(这里我们只谈最常见的,PHP,GO等语言博主没有学过,也没有具体了解,就不在这里献丑了),当然选择JAVA你还可以转向安卓开发,C\C++则更加偏底层一些。这一切的选择基础需要你综合衡量,博主特别讨厌一些鼓吹某某语言万能无敌之类的话,举个例子C++的确可以坐界面,但显然,做界面C++不是最好的选择,合适的才是最好的,不是么?

6、你看江面平如镜,要看水底万丈深。  ——谚语

        我们很多人,其实也包括博主本人都有这个问题,就是用一个东西的时候想的不够深入,直至其表,不知其里,还是举个例子,我们每个人都应该知道的边缘检测算法,博主相信,用起来不难,网上搜一下代码,一搜一大片,有一定程序基础的人都可以轻松实现,但是深入思考,我们知道他的原理么?这里,博主将所有人分为几个等级,大家可以以边缘检测算法作为作为自己的对照,看看自己停留在哪个级别:

a、还没入门的“行外汉”:什么是边缘检测算法?不会怎么办?问周边人吧!

b、已经入门的“小菜鸟”:emm,好像有印象,去网上搜一下现成的程序,改一下图片输入就行了!

c、有思考的“程序猿”:算法每一个参数什么意思啊?我改一下会怎样?

d、负责任的“熟练工”:这个算法的原理究竟是什么样的?怎么就找到边缘了?找个博客看看!

e、企业抢着要的“大牛”:算法原理我看懂了,自己手撕代码试一下!

f、“大佬、科研工作者”:数学公式可能需要自己推一下,看能不能改进!

看看,一个简单的边缘检测算法我们就可以看到不同人的不同水平,你的思维深度更多时候可以决定你的高度!

7、思考可以构成一座桥,让我们通向新知识。 ——普朗克

      小时候爸爸妈妈就教会我们多问一问为什么,那时候最喜欢看的书也是《十万个为什么》,但是越长大越发现自己丧失了这种质疑和思考能力,我们更多时候的想法是“哪有那么多为什么!”。做项目,搞科研其实更多时候需要我们这种问问题的能力,就好比之前的例子:相机标定,为什么要标定?其实道理大家都懂,做到的却太少了,包括博主本人,这里写出这条大家共勉!

8、亡羊补牢,犹未迟也。  ——《战国策·楚策四》

        可能很多人看到博主写了这么多会觉得可能自己再某个或者某些领域的欠缺有点大,有些失落甚至灰心丧气。其实博主需要在文章的最后和大家打打气,我们发现了问题和漏洞只要积极去改变,就会发现事情就会朝着好的方向发展。谁能想到《三体》作者刘慈欣若干年前还在水电站工作?又有谁能想到阿里云的头头是一个哲学博士呢?最后一句话赠与自己也赠与能看到这篇文章的读者们共勉:改变,从当下开始!