我的十年图像生涯

我的十年图像生涯

王郑耀 

技术总监

上海易渊图像

西安交通大学

前一段时间看到李开复老师的微薄上转发的一个微薄:


//@王利芬中国为什么出不了大师?第一有很大一部分是惯性使然并没有领悟一个行业的规律,第二,因为中国官本位,在一个职位做得好一点就提成一个小官,当官了就不怎么做事,让下面人做,所以做事的全是新来的实习的或者不会做人的。如此,何来大师?

@卓越职场杂志: 【职场1万小时定律】一个人的技能要达到大师级水平,工作时间必须超过1万小时——任何行业都不能例外:莫扎特6岁作曲,到20岁才创作世界级作品;甲壳 虫乐队1964年风靡全球前已演出1200场;微软创始人盖茨1968年接触计算机,创业前已编程7年。你能在自己的工作上坚持10年甚至以上吗?期待大 师级的你!

而上个月,恰恰是我进入图像处理领域研究的十周年。作为一个重要的时间节点,有必要对过去十年的图像处理生涯做一个小结。是为序。

1. 2001年数学建模竞赛 血管三维重建

1999年 – 2001年 迷茫

1999年8月我考入西安交大计算数学系,开始了我的大学生活。大学生活一开始是兴奋,然后就是迷茫,没有方向。在此期间比较有意义的事情,就是聆听了很多报告会。印象比较深的就是微软亚洲研究院关于图形图像方面的新技术。图形、图像、计算机视觉等词汇逐渐进入我的视线。

2001年,大学二年级结束后,组队(我的队友是吴国清、吴甜)参加暑假数学建模培训,并参加了2001年数学建模比赛。比赛于2001年9月21日到24日之间举行。比赛的题目有两个,一个是《血管三维重建》,另一个是《公交车调度》。权衡再三后,我们选择的题目是《血管三维重建》。

这是我第一次真实接触的图像处理。

在关键的时刻,我的电脑坏了,所以论文中最关键的验证没有做完。这次竞赛我们的成绩并不是很好,只拿到了鼓励性质的陕西赛区一等奖。

但不管怎么说,我正式开始了图像处理生涯。而且我的图像处理生涯一开始就打上了数学建模的烙印。数学建模的思维方式,是我这些年来做图像处理和机器视觉方面研究和开发的最主要特点。数学建模的思维方式就是:【1】首先考察问题背景;【2】对做出尽可能一般的假设,在此基础上得到一般的数学模型;【3】从可计算的角度,结合实际情况对问题进行合理的、适当的简化,得到可计算的模型;【4】模型的计算;【5】根据实际问题对模型进行验证。我觉得这样的思维方式比较适合做出通用的算法和产品出来。

三年以后的2004年9月,我研究生一年级。我和杨敏、汪宏武等三人组队,参加了首届研究生数学建模竞赛。我们的论文《目标定位最优布站的研究》获得了一等奖,论文节选发表在了《数学的实践与认识》2005年第七期上。当时,杨敏和汪宏武也差不多算作图像处理的,至少与图像处理有点关系。前者现在在IBM工作,后者后来貌似去美国留学,研究语音识别去了。

2. 数字图像边缘检测

2002年-2006年 我的黄金时代

数学建模结束后,怀着一些疑问,我看了一些图像处理方面的书籍,渐渐对图像处理开始感兴趣,并准备考图像处理相关的研究生。 我们的专业课老师程正兴教授的硕士点方向是“小波分析与信号处理”与图像处理关系密切,所以我准备考取程正兴教授的研究生。

2002年下半年,在准备考研的同时,准备本科毕业答辩。因为已经准备报考程正兴教授的研究生,因此学校指定程正兴教授为我的本科论文辅导老师。他交给我两篇论文,让我选择一篇作为毕业论文的研究方向。这两篇论文都是当时IEEE On Image Processing期刊上最新的文章,一篇是关于利用小波分析做图像无损压缩的文章,另一篇是法国工程师Didier Demigny写的关于最优边缘滤波器的论文,名称为On optimal linear filtering for edge detection。最后,我选择了后者作为我的研究方向。选择的理由现在也记不是很清楚,现在想来应该是【1】边缘检测有认知或者人工智能的味道,更符合我的学术价值取向;【2】图像压缩面比较窄,从就业方面考虑不是很有钱途。

Didier Demigny的这篇文章,是沿着经典的边缘检测Canny算法的连续域中最优边缘滤波器的思路发展,在离散域中建立了最优三准则,并通过数值方法得到了最优边缘滤波器。思路非常清楚,但对当时的我来讲,是非常困难的一篇文章。

第一个困难是,作者是一个电气方面的工程师,所以论文中有些术语是电气信号处理方面的。为了克服这个困难,我搞了一本经典的《信号与系统》,看了一段时间,在此期间得到了杨敏同学的帮助。

第二个困难是,文章的背景和思路不清楚。即使在我整个翻译了这篇文章后,我还是发现,虽然每句话都能看懂,但是整体上我还是似懂非懂含含糊糊的。为了搞懂作者的思路,开始查阅作者的参考文献,参考文献的参考文献,…,最后我发现我陷入了文献的大海不可自拔。

在这里不得不说一下西安交大钱学森图书馆,在这里我能找到我想看的绝大多数文献:IEEE Transactions on Pattern Analysis and Machine Intelligence(PAMI),我记得除了最开始1卷找不到外其他的都有,IEEE Transactions On Image Processing全有,Computer Vision, Graphics, and Image Processin (CVGIP)几乎全有。早期的经典文献,几乎都发表在这些期刊上。这几种期刊都放在《过刊阅览室》最不引人瞩目的地方,可能很久都没有人看过,翻一翻都有一股难闻的味道,每次去找这些期刊的时候,接下来几天都会感冒。最后,我复印的有关资料有差不多两尺高。

然后就是昏天暗地的看这些文献。那段时间,恰好是非典爆发期间。学校封校,不许出校门,无处可去。我每天抱着一摞复印的资料到自习室看。大约集中看了半年,对边缘检测问题有了一定的了解。在此期间,我曾经给Jolion Jean-Michel、Demigny、Deriche、Ellen C. Hildreth、James Elder等图像处理方面的先驱和大牛们写邮件请教问题,并得到了他们热情的回复。

到毕业的时候,不仅看懂并实现了论文上的算法,而且对边缘检测的各种方法进行了总结,毕业设计就写了边缘检测的综述《数字图像边缘检测》,很大程度上由于篇幅的原因,这个毕业设计入选了当年校优秀毕业设计。我将其放在了我的个人主页上,收到了很多回复,很多人作为参考文献。

这段时间,开始接触编程,实现了一些基本的边缘检测算法。在此期间,得到了孙雪青的帮助。

2003年9月,开始了研究生生活。

在看上述文献的过程中,逐渐产生了几个问题:

【1】       为什么这么多人研究边缘检测,有什么意义?

【2】       看了小波分析的一些文献后,发现小波分析的很多思想与边缘检测有一些关系,尤其是小波分析界的大牛Mallat似乎说他在小波分析方面的贡献受到了Marr,Canny等人的论文的启发,而Canny提出的Canny算法正是最有影响的边缘检测算法,那么到底这其中关系是什么?

【3】       小波分析中也有边缘检测算法,这些算法到底是怎么回事?

从2003年开始,一直到2006年,我看的所有资料都是围绕这几个问题的。由此导致的一个后果便是,真正的小波分析反倒没有学到什么。

校友汤少杰第一个建议我阅读一些计算机视觉尤其是Marr视觉方面的书,他说Marr视觉是边缘检测的理论背景。老汤是图像所的博士老汤,他现在在美国做博士后,研究图像三维重建。

我和老汤认识貌似是在西安交大兵马俑BBS上,他在BBS上发起开设《计算机视觉与图像处理》版面,拥护者众多,我也热烈响应。最后老汤做了版主,我做了板斧。拥护者有来自各个学院的学生,看来有很多同学都在做有关图像处理方面的研究,但是缺乏交流,包括:我们理学院数学系、电信学院图像所、人机所、电气学院、生命科学院、机械学院等。最后,2004年暑假前后,还成立了图像处理兴趣小组。2004年10月,研究生二年级开始后,我就到法视特(上海)图像科技有限公司实习了,从此我开始了两年半学校、半公司的实习生活,但大部分时间都是在公司里。

西安交大钱学森图书馆中,有Marr视觉这本书的中文版(《视觉计算理论》),借出来开始看。从我习惯性的数学建模的角度来说,Marr视觉就是建立了人眼视觉的可计算的数学模型。我着重看了我关心的前四章。后面只是大致浏览了一下,主要是看不下去。(顺便说一下,前几天,我在淘宝上搞到了该书中文版的复印本。)

让我记忆深刻的是本书后记中最后一段话,原文非常好,翻译的也非常好。我特意让当时在澳大利亚留学的李雪梅姐姐从她们学校的图书馆借出了这本书的英文原版,并将这段话的英文原版给我摘抄发过来:


  " Well, to say the brain is a computer is correct but misleading. It‘s really a highly specialized information-processing device-or rather, a whole lot of them. Viewing our brains as information-processing devices is not demeaning and does not negate human values. If anything, it tends to support them and may in the end help us to understand what from an information-processing view human values actually are, why they have selective value, and how they are knitted into the capacity for social mores and organization with which our genes have endowed us."

David Marr in his book Vision (W.H. Freeman, 1982)

李雪梅姐姐是苏州人,现在移居美国了,去年在QQ上说,她现在给美国孩子教中文。她在澳大利亚留学期间,帮我找了很多资料。尤其是复印了两本关于Scale Space的书,给我寄过来。

Marr视觉计算理论是计算机视觉中第一个完整的可计算视觉模型。其作者David Marr 与1981年11月因白血病逝世,享年35岁。《Vision》这本书在他逝世一年后才正式出版。计算机视觉领域的开拓者在他最高产的时候去世,确实是计算机视觉界的一大损失。可以在这里找到Marr的生平介绍和在计算机视觉中的贡献。

从Marr视觉的逻辑框架来说,基于Werner实验和临床神经病学方面的依据,视觉最重要的功能是获取形状信息,颜色和纹理感觉是依赖于形状感知的。而描述形状的就是边界,所以图像中的边缘信息非常重要。

1977年,IBM的Logon证明了“一维信号,严格的说是带通的一类一维信号的零交叉点构成了原信号的一个完全的表示”。也就是Logon发现,有一类一维函数,可以通过零交叉点重构函数本身。这个定理对Marr有很大的启发:


“由Logan 定理引出的概念不仅得到了一种令人满意的图像分析方案, 而且对视觉心理学物理学和生理学也具有令人神往的含义。因为看来它们阐明了视觉通路第一级的一些基本性质。特别是这些概念说明了为什么最初对图像要用中心- 周边型感受野做滤波处理。它们为‘边缘’检测器提取图像全部基元符号这一见解提供了理论基础, 并指明只有用几个滤波器独立的带通滤波器即中心- 周边型感受野先行滤波处理才能做到这一点。这些概念还使灵长类动物视觉心理物理学和生理学研究中关于边缘检测器和空间频率通道之间的长期争论得以解决。实际上视觉的第一个阶段在很大程度上是由‘边缘’检测器(其实是零交叉点检测器) 而不是由傅里叶分析完成的, 但是零交叉检测器要提取有意义的信息,它们就必须对若干独立通道的输出进行运算,其中每一个通道只对某一特殊的空间频率段具有选择性。”

Marr期望零交叉点和其他附加的信息,能形成图像的完全的表示。所谓完全的表示,就是指通过这些信息能恢复图像本身。如果能有这样的表示,则Marr视觉有了坚实的基础。为了证明这一点,就需要在数学上证明,能表示的二维图像的一类二元函数类,其零交叉点及别的附加信息能完全重构函数本身。Marr等人开始寻找这样的定理。这个过程持续了二十年:

【1】1984年,Carlsson 的给出了一个基于边缘的图像压缩算法,可以看作是对零交叉点完全性的数值实验,从它的结果来看,算法支持完全性的。虽然有了这样的数值结果,但是还是缺乏严密的数学理论支持。

【2】1985 年,Yuill 和Poggio 证明了“一维和二维有限多项式信号在尺度空间上零交叉点的理论上的完全性”。

【3】1987年,Curtis 等证明了“一类有限带宽的二维信号的零交叉点的完全性定理”。

【4】1989年,Hummel 和Moniot 认为前面给出的这些定理在实际中不可能得出稳定的重构结构,而且这些结论很难推广到一般的连续函数。他们证明了,“如果给N 维信号的多尺度零交叉点补充在零交叉点的梯度数据,那么原始信号理论上就能够被重构。”

【5】1991年,Mayer和Mallat等人给出了例子,说明了“有很多例子说明不同的连续函数的多尺度零交叉点可能相同”,从而推翻了证明“一般性连续函数的零交叉点能完全表示”定理的可能性。

【6】2000 年,Elder等人长期研究后,通过大量实验,证明了虽然从数学理论上边缘不是完全的表示,但是从视觉上看是几乎完全的。“图像中的零交叉点是一般的、可靠的、精确的、简洁的、明确的并且是几乎完全的形状表象。”

在这个过程中,Mayer 构造了第一个小波基函数,  Mallat提出了小波分析的多尺度金字塔分解算法,奠定了小波分析实用化的基础。

基于连续小波变换的两个边缘检测算法,本质上分别对应基于二阶零交叉点的LoG算法和Canny算法。他们是一样一样一样的。

花了3年时间,浏览了大量的文献,在数学框架下经过这样的梳理,基本上对我前面的疑问都可以给出答案。这些结果全部整理在我的硕士毕业论文《图像的视觉信息表象理论及其数学基础》(2006年)中。至此,我在边缘检测方面的研究结束了。

在这个过程中,我积累了很多资料,在写硕士毕业论文的过程中,按照我自己的理论框架做了整理,我觉得其中的内容,对学习图像处理的人非常有价值,如果我当时有这个资料,就不用花三四年时间慢慢学习了。这些资料具备了出版一本书的规模,当时考虑写一本书,名字叫《数字图像的边缘检测-理论、算法及其应用》,我自己准备的素材绝对是够的。不过后来放弃了,原因有几个:第一个是版权,这些都是属于别人论文上的结果,我就是按照自己的逻辑整理了一下,顶多算是汇编,出版书籍的话涉及知识产权;第二个,出版书籍需要大量时间整理,总得像模像样一点,还要购买书号,这种书买的人估计也不会多,所以还要自己负责销售,太麻烦。最后,我将计划章节中的前四章完成,放在我的主页上供大家下载。这样我共享的目的达到了,而且也省去很多麻烦。后面还有8章实在没有时间完成,只好暂时放弃。以后有时间的时候,再说吧。

在此期间,参加了两次有关图像处理的研讨会。

2003年8月,参加了在西安交大举行的《图像处理的数学理论与方法研讨会》。2003年8月6日-15日,西安交大理学院特聘教授、长江学者王立河教授邀请了国内一些著名的图像处理与模式识别专家举办了系列讲座,着重介绍数学在图像处理与模式识别中的应用。这些专家中既有专门研究理论的,也有一些有着长期实践经验的,当然更多的是在理论和实践两方面都有造诣的专家。

陆颖教授(吉林大学)简单而又全面地介绍了图像处理的基础知识、主要内容以及各个层次,同时也就提出了很多有待于解决的问题。姜明教授(北京大学)讲了两个问题:首先是尺度空间理论,从图像的多尺度表示和基本的不变性(因果性、变换不变性和形态不变性)这些公理出发得到了偏微分方程,从而把图像处理问题转化为偏微分方程问题;另外是统计图像处理,从Bayes推断、随机过程、马尔可夫随机场理论等出发最终得到了图像处理的Mumford and Shah’s Model,这是一个变分问题。所以说,看起来零散的图像处理中的很多问题其实有着深刻的数学本质,从而数学工作着也可以在这个领域内做很多事情。张讲社教授(西安交大)从尺度空间和视网膜模型出发也得到了偏微分方程,值得注意的是他利用这个模型可以解决聚类问题,也就是说偏微分方程在图像处理中的应用有着深刻的生物背景。上面得到的方程主要是扩散方程(各向同性扩散方程和各向异性扩散方程),尹景学教授和他的博士生王春朋(吉林大学)对某些特定扩散方程的解的存在性问题从理论上给出了肯定的答案(某种意义下的)。周蜀林教授(北京大学)讲了变分问题解的存在唯一性性条件以及相关的理论。图像处理问题对计算的速度有很大的要求,因此这些问题的解的快速算法问题就摆在了我们的面前。孙伟伟教授(香港城市大学)对偏微分方程中的快速算法作了介绍,由于偏微分方程中的很多计算最终都转化为矩阵运算,所以主要内容为特殊矩阵的计算(比如说循环矩阵)。图像可以看作是一个连续曲面的抽样,因此也可以从几何的角度研究,屈长征(西北大学)等讲了目前国际上研究的比较多的不变几何流和曲率流。上面都是从一般的数学角度来讲的,为了对图像处理有一个更深入的了解,又有一些在某些专业领域有丰富经验的专家讲了一些具体的问题。陆颖教授(吉林大学)对指纹识别技术作了一个小结。彭立中教授(北京大学)讲了小波的新进展,尤其是框架小波在数字水印以及人脸识别中的应用。王利生教授(清华大学)对医学图像处理作了小结。陈恭亮教授(上海交通大学)讲了信息安全与图像处理方面的问题。

2004年5月16日 – 5月28日,参加了在浙江大学举行的《图像处理及相关的数学问题国际研讨班》。  参加研讨班并主讲的专家主要有:Prof. Brian A. Barsky(美国加州大学伯克利分校),Prof. Mladen Victor Wickerhauser(美国华盛顿大学), Prof. Allen Klinger(洛杉矶加州大学),Dr. Jim Arvo(加州理工学院),Dr. Michael Gleicher(美国Wisconsin大学)。本次研讨班名字中是图像处理,但实际上这几位专家,主要讲的都是 图形学方面的内容。

在研讨班上,国内一些相关领域的专家也做了报告:董光昌教授(浙江大学数学科学研究中心学部委员)做了数据光顺的报告,官志成教授(浙江大学数学系)做了两场关于偏微分方程用于“图像去噪和平滑”的报告,耿则勋(解放军信息工程大学)“数字图像超分辨率重建理论与算法”,本次会议的赞助商信雅达(SunYard)公司技术负责人季白杨做了“OCR技术及其应用”,国防科大罗家树教授做了“一类二元紧支撑双正交小波的构造与分析”的报告,南开大学机器智能研究所的刘春波博士做了“基于运动补偿时间提升滤波的可伸缩视频编码”,浙江大学&宁波大学赵晓宇做了题为Decryption of Pure-position Permutation Algorithm的报告,浙江大学张亶做了题为Meaningful Image Distance的报告,浙江大学CAD中心汪国昭做了人体切片重构技术研究的报告。

这次研讨班在暑假举行,我住在浙大的学生宿舍,同住的有华中科大的白翔和郑宇化,我们在一起学习了十几天。郑宇化后来去美国留学了,现在不知道在哪里,后来也没有联系过。白翔也去美国大牛导师那里学习了几年,现在在华中科大当老师了,IEEE上都发了很多篇文章了,非常NB。

3. 字符识别

2006年-2008年 初生牛犊不怕虎

2004年暑假,我得到了到刚成立的法视特(上海)图像科技有限公司实习的机会。之所有这样的实习机会,是因为我的本科毕业论文《数字图像边缘检测》被法视特公司工作的中国人看到。

2004年10月10日,我到了 法视特(上海)图像科技有限公司实习,此时公司刚成立半年。两年之后的2006年4月,我硕士毕业后直接留在法视特工作。

实习这段时间,公司给我了我足够宽松的环境,我前期主要还是做边缘检测方面的工作,后期和正式员工一起开发软件。我白天在公司实现各种边缘检测算法,晚上在住的地方(张江香楠小区)看论文,整理边缘检测方面的文献。实习这段时间,我在公司学会了编写程序。

正式工作后,我做的第一个项目是字符识别,客户是PitneyBowes 日本 公司,主要是面向邮政的字符识别。这事还得从小泉纯一郎谈起。

小泉纯一郎在任日本首相期间,做的一件非常重要的事情,就是邮政民营化。在这样的背景下,日本的邮政非常发达。为了吸引客户、同时降低成本,需要尽可能提高邮政业务的自动化水平。

日本的信件,哪怕是私人信件,信封也是可以自己打印的,有人开发专门的模板,一般的打印机中也带有这个服务。打印信封时,会打上专门的邮政条形码。这个条形码中含有非常详细的地址信息,甚至可以精确到房间号,因为这种方式印刷的信封方便自动化投递。邮政机构鼓励这种方式的信封,投递费用相应会低一点。

日本还有一个特点,是明信片非常多,各种形式的明星片。都可以自己随便印,上面印上地址,还有邮编条码。

除了上面说的私人信件外,还有大量的批量业务信件,例如信用卡账单、水电煤气费账单等业务账单。针对这些信件,形成了一个完整的产业链:打印、封装、检查、投递。Pitneybowes是一家美国公司,是财富500强公司之一,Pitneybowes一直保持着智能化邮件流解决方案的全球市场领导者地位,提供硬件、软件、服务和咨询。

Pitneybowes有很多邮政方面的设备,例如大型信封封装机,能将打印好的一大卷纸,自动切割、折叠、装进信封中,并自动封口。在这个过程中,他还可以选择塞广告进去。处理速度可以达到每小时22000个信封。这样一台设备,它有两个问题:第一个是信装重了,第二个是出现机械故障后,把某些信件弄烂了然后丢弃了。为了应对这个问题,打印信件时打印一个连续的序列号,同时在设备最后加装一个机器视觉系统。通过识别序列号,来确认是否装重,以及确认所有发出去的信件ID。

因此,需要一个计算机软件,能自动识别信封上的序列号、邮编号码。将这些信息记录下来,存储下来,作为信件发送的一种履历。同时,为了满足日本市场非常特殊的需求,还需要识别日本邮编条码,放到数据库中去;另外,日语中还有一些尊称是信封上必须要加的(例如人名后加“  様”),软件还要能确认这个事情。

这就是我工作后,所做的第一个工作。施俊、郑敏东和我三个人开发,我主要做其中的算法。从2006年4月开始,一直做到2008年底,做了大约两年半时间。开发出了客户满意的算法。其中,2007年7月到2008年9月,这段时间我在法视特日本总公司工作,主要是算法和软件调试。我住在公司为我们租的房子里(两个人一套房子),为了省钱自己买菜做饭,中午也带饭。

从学术上来说,字符识别已经是比较成熟的技术。但是,机器视觉中的字符识别有其特殊性:【1】用户需要的就是图像中的一串字符串,其他的不想要。识别是一个方面,另一个方面就是把用户需要的字符串找到并发给用户,所以定位就是一个重要的问题;【2】速度要非常快,以满足高速设备的需求;例如前面说的这台信封封装设备,每小时22000枚信封,也就是每秒6.2枚信封;给图像处理的时间大约只有50毫秒;【3】准确性高,算法的识别率要特别高,高到每小时最多出2,3次识别错误。也就是说最多7000个信封才能有一个识别错误的(上面的任何一个数字识别错了都算错误)。假设每个信封上有十个数字,从概率上讲识别率必须达到99.99%以上。【4】字体种类多,且不可预知;客户要用什么字体,使用设备的人是不知道的,别人用什么字体,他都得检查。【5】软件要使用简单,因为设备的操作者有些连电脑都不大会用。

一开始我做的时候,考虑的都是类似于神经网络、SVM等比较流行的智能型算法,但是后来我发现这些算法在机器视觉行业中使用起来存在以下难点:对最终用户的要求非常高,选样本、训练等基本不可接受,除非是字体非常固定的场合,开发者能将这些过程做好。如果希望最终用户做这些事情,几乎不可能。

所以,我最后使用的实际上是非常简单的模板匹配算法,再加上对特殊字符的特殊处理。在做的过程中,主要考虑以下问题:

【1】用户设参数简单,最好是用户通过简单、机械的鼠标操作来设置参数;

【2】让用户在不知不觉中就告诉我们很多信息;

【3】尽量减少参数,尤其是用户不理解的参数;

这个项目最后算是成功了,到目前为止,卖出去近九十套了吧。伴随着这个项目的成功,开发出了适合机器视觉领域的字符识别库,可以根据用户设定的字符模板,识别数字、字母;还能识别条形码、日本邮编条形码等。更重要的是,在开发过程中形成了一套底层核心算法、应用程序开发模式。为以后的开发奠定了基础。

4.  Alcon与半导体检查

2006年-2008年

外观检查算法竞赛(Algorithm Contest)是日本精密工业协会图像应用技术专门委员会组织的一项比赛,缩写为Alcon。

为了促进基于图像的外观检查技术的发展,日本精密工学会图像应用技术专业委员会与研究人员和技术人员一起,推进着通用外观检查图像数据库的建设。作为重要的一部分,图像应用技术专业委员会从2001年开始组织外观检查算法竞赛。竞赛以实际应用为背景,使用实际制造现场产生的图像作为比赛的对象,逐渐广为人知。每年7月公开题目和样本图像,7月底前接受报名,9月中下旬提交结果:程序可执行文件、使用说明和简单的算法说明。十一月初得到比赛结果,12月初日本图像展进行的同时,会有全国性的学术交流会,在这个会上对前三名颁奖并有5分钟的演讲;并且参加学术交流会的POST交流会。

我从2006年起到2008年,连续三年参加了Alcon。这些事情都是在业余时间进行的。

2006年获得了第三名,2007年和2008年,都获得了第一名。2009年起,由于工作越来越忙,没有精力参加此项比赛,所以渐渐退出了。有意思的是,我参加并获奖的这三年,题目都是围绕“半导体上随机模式显著缺陷”的,

2006年 《随机模式图像上显著缺陷的检查》,

2007年 《半导体模式上显著缺陷的检查》

2008年 《半导体模式上缺陷的分类》

这里有三个关键词:【半导体】指出了应用范围是半导体领域,测试的图像也都是来自半导体领域的;【随机模式】指出算法预先并不知道正确的可参考的“模式”,缺陷是位于任意可能的、随机的半导体上模式上的,所以预先并不知道什么是半导体自身线路花纹的图像,什么是缺陷;尽管如此,当肉眼观察缺陷时,绝大多数都可以明显的辨识出来。【显著缺陷】缺陷是相对显著的。这些题目和相应的图像是一家名叫 东丽(Toray)的公司提供的。

问题的难点主要体现在【随机模式】上。实际应用中,对这类问题目前一般的做法是,检查的都是具体的一类相似对象,所以可以取得多幅“正确”的图像样本(或者可以得到一些正确样本和一些错误样本),作为缺陷检查的依据对其它对象的图像进行检查。这个一般的称为“Pattern检查问题”。对这“Pattern检查问题”,一般的说,也是特别难的问题。 对于没有样本作为依据的“随机模式”上缺陷检查,则更为困难,目前只能作为一个学术问题来研讨。所以Alcon连续三年将此课题作为比赛题目。

从参赛程序的测试结果来看,整体上大家的结果都不好,尤其是2008年的缺陷分类(检查缺陷并将缺陷分为四类),最好的结果是我的程序,正确率(检出位置和分类结果同时正确)差不多只有50%过一点。

我的检查和分类算法的思路是这样的:观察和分析图像,总结缺陷的特点,分析大脑识别图像中缺陷的根源。以此为依据,将缺陷分为几类,每一类设计不同的算法来检测,当缺陷检测出来的时候,分类就自然完成了。

日本的这个比赛组织的非常好,尤其可贵的是坚持了很多年,极大的促进了产、学、研的联合。对中国的产、学、研都有非常大的借鉴价值。

5. 标签检查

2009年-2010年

字符识别项目完成后不久,2008年底我接手了标签检查设备的开发。

这是一家日本医疗耗材生产公司在中国的子公司。该公司几乎所有的产品上都要贴带有产品名称、使用说明、生产日期和使用期限的标签,并且每个标签上都会有一个序列号。由于内容每天都在变化(生产日期和使用期限),每一批次的产量很小,不可能使用类似于激光打印机这种方式,所以只能使用纸带式打印机。这种打印机,打印比较随意,出现缺陷的概率比较大。有污渍、划伤、漏印等,导致标签内容无法识别;也可能出现整个批次编号错误、或者混入其他批次标签的情况。另一方面,作为一家医疗企业,该公司对标签的印刷品质要求比较高,因此需要较为严格的检查。

在使用机器视觉检查设备前,都是靠人工目视检查,每台打印机前坐一个女工,一边打印一边检查,发现问题则做出处理,比如说撕掉有问题的标签。但是,这样有下面几个问题:

【1】       品管部门的高品质要求很难得到实际的贯彻:

a)         打印速度一秒多一张,在这个时间内,无法对标签做出仔细的检查,只能注意到一些非常明显的缺陷;例如背景部分出现的蹭脏划伤等宏观缺陷容易看到;

b)        通过我的观察,很多时候他们发现缺陷的原因,并不是直接看到标签上的缺陷,而是依据其它更直接的外部因素。比如说,在更换打印纸带时容易出缺陷,所以就仔细看几张;一大卷标签可能是由几部分粘接起来的,在粘接的部分容易出现缺陷,他们也会特别注意;

c)        一大堆字符中出现的多余或者缺损缺陷,目视检查员很难发现;而这些缺陷,可能会影响内容的识别,导致很大的问题;

【2】目视检查员非常辛苦: 长时间盯着标签看,非常辛苦,容易疲劳;

【3】随着人力成本的上升,目视检查员的成本上升,希望用自动化设备替代目视检查员;

这个项目是我第一个完全负责的项目,前面一个字符识别项目,我只需要根据其他同事整理出来的客户需求开发算法就可以,并不对应客户和客户沟通。这个项目我需要所有与客户沟通的是事情都要我来负责。在这个项目中,我负责整个项目的客户对应和客户沟通,同时对应算法开发。软件由施俊来开发,标签卷取设备委托第三方开发,PLC和电路由陈超负责。

根据客户的需求,标签检查系统应该具有以下的功能:

【1】每个品种,预先登陆标准的良品,称为Master,以它为标准检查标签;Master设定参数;

【2】根据Master设定,每个批次的前几张具有学习功能,学习本批次的特点,经过用户确认后作为本批次检查依据。在学习过程中,通过字符识别、条码识别来确认学习品上面的使用期限、批号和使用期限是否准确。

【3】使用学习结果检查该批次的其它标签:包括文字部分、条码部分和背景部分。

从算法角度讲,这个项目的内容包括:

【1】可变字符识别与检查(OCR/OCV);

【2】可变条码识别与检查;

【3】固定不变内容的比较检查;

【4】背景部分的检查;

显然,这要比前几年所做的,单纯的字符识别要难很多。字符识别只能算它的一个小问题。

《可变字符识别与检查》和 《可变条码识别》恰好就是我前几年做的字符识别相关,直接套用就可以。《条码缺陷检查》是在做这个项目的过程中解决的。首先,依据这个特殊客户的要求,推广到一般性的客户对条码检查的要求;然后,对这个一般性的条码检查问题的条件做出假设,假设越弱越好,假设越弱做出来的算法的一般性越好。然后,在这个相对弱的假设下做出解决问题的算法。最后,在这个特殊客户的需求中验证算法。这是整个算法开发的思路。

《固定不变内容的比较检查》本来是相对简单的问题,在各种印刷检查中普遍使用这种技术。但是,这个项目中最难点就在这个地方。问题难点的根源是其打印方式,纸带式打印机的线速度不是恒定的,而是可变的,当线速度较大时,打印出来的内容将被压扁,反之,打印出来的内容将被拉长。因此,虽然从内容名义上是可变的,但是实际上打印出来的形状却是不断变化的。客户的要求是,轻微的变形算法要能直接忽略,但是较大的变形要能剪出来。所以常规的基于简单差分的检查方法就无法直接使用,因为会导致非常多的过检出,只能采取更加智能的方式。想了很多办法,基本达到了客户的需求。

《背景检查》也是非常复杂的,由于涉及客户的信息就不在这里细说。

整个算法就是将上述这几部分算法无缝衔接来实现的,最终实现了对这种内容可变、固定印刷内容有变形的、套印标签的全面检查。开发出来的设备达到了客户的目的,不过相应的开发时间非常长(前后大约有两年时间)。

在这个项目开发过程中,我个人的收获如下:独立做项目的经验、与客户沟通的经验;完整设备开发的经验;成功开发出了一般性的条码缺陷检查算法;比较智能的Pattern检查方法;利用这个经验,在此期间完成了三个稍微简单一些的项目。

6.液晶点灯检查

2006年-2011年 起航

随着TFT-FPD(Thin Film Transistor-Flat Panel Display)技术的普及,平板显示器已经彻底替代CRT显示器技术。平板显示的种类很多,按显示媒质和工作原理分,有液晶显示(LCD,)、等离子显示(PDP)、电致发光显示(ELD)、有机电致发光显示(OLED)、场发射显示(FED)、投影显示等。目前流行的主要是液晶显示器(LCD, Liquid Crystal Display)       FPD显示器的生产主要集中在东亚,日本、韩国、中国(大陆和台湾)。

在生产过程中,由于工艺的问题,面板上会有一些缺陷。这些缺陷的存在,会影响显示屏的视觉效果。这些缺陷,包括点状缺陷(面板上有些点不随着内容的变化而变化,始终显示亮或者暗)、线状缺陷(面板上有些水平线和垂直线不随着内容的变化而变化,始终显示亮或者暗)和Mura(本身随着内容的变化而变化,但是显示偏暗或者偏亮,是面板上的低对比度缺陷)。因此,在面板生产出来后,需要点灯然后检查显示是否正常。这个一开始主要是人工目视来检查,但是随着面板产量越来越大、人力成本越来越高、面板也越来越大,业界逐渐使用机器视觉系统(AOI)来辅助目视检查。

此类AOI系统,日本、韩国应用较早,中国大陆目前也逐渐使用。因为产业上有这样的需求,所以日本、韩国和台湾的相关大学和研究机构对相关问题进行了研究。由于点、线缺陷是明确的,容易检出,而Mura的对比度较低,因此相关研究主要集中的Mura的检查上。

Mura不是明确意义上的“坏点”,不同的人感觉可能不同。Mura是面板上低对比度缺陷,是面板上低对比度的不均匀性。Mura检查就是要把人能感觉到的低对比度视觉差异寻找出来,并且定量化。所以,对Mura检查来说,一个根本问题就是,人能够感觉到什么样的视觉差异的极限是什么?这就是所谓的最小可觉差 (Just-Noticeable difference, JND)。

来自为知笔记(Wiz)

时间: 2024-11-02 18:35:05

我的十年图像生涯的相关文章

《我的十年图像生涯》—王郑耀(西安交通大学)

最近看王郑耀的<我的十年图像生涯>颇有感悟,在此把他的资料总结下 参考: 1.王郑耀<我的十年图像生涯>博客 链接——https://www.cnblogs.com/jsxyhelu/p/7054573.html 里边有自己这十年的经历: 2.王郑耀<数字图像的边缘检测>本科论文 链接——https://max.book118.com/html/2014/1119/10370798.shtm 里边是他自己本科毕设做的方向,主要总结有15种边缘检测算子: 3.王郑耀<

自制操作系统(十) 图像叠加处理

2016.07.12 参考书籍:<30天自制操作系统>.<自己动手写操作系统> qq:992591601  欢迎交流 图像叠加处理的原理很简单,就是给图像分层,从低下往上面画,便可以实现叠加的效果.例如,屏幕背景+一个窗口+鼠标的情况. 例如下面的情形: 计算机桌面上有三个窗口程序,A.B.C.B位于A之上,C位于B之上.要实现这种效果,只需要,先画A(盖住了桌面一部分).再画B(盖住了A和桌面一部分).再画C(盖住了B和桌面一部分).然后每隔一定时间刷新画面即可. 为此引入一个图

OpenCV笔记(十)——图像金字塔

图像金字塔(Image Pyramids)可以用来处理图像的缩放. 有两种广为使用的图像金字塔:高斯金字塔和拉普拉斯金字塔. 这里介绍高斯金字塔. 高斯金字塔有两种操作:upsample和downsample,可以理解为图像的放大和缩小. 以下图为例: 图像如果downsample,则col和row均变成之前的1/2,图像的面积也为之前的1/4.等价于金字塔的层数升高一层,面积为先前的四分之一. 如果是upsample,则col和row均是之前的2倍,则图像面积为之前的4倍.等价于金字塔下降一层

美好的十年工程师生涯(转载)

首先申明  此文章是我转载过来,以便以后更好的激励自己. http://bbs.21ic.com/icview-623676-1-1.html原文地址       再过几天就是我从业十年的纪念日啦,回首这过去的十年,个中辛酸和快乐只有经历过后才有切肤的体会,有加班的烦劳,有择业的困惑,有面试的尴尬,当然,也有成功的喜悦,但我很庆幸,我用了十年的时间做好了自己的职业定位,也具备了一定的综合实力.这是并不漫长的十年,确是我的生命历程中最美好的十 年,我觉得很值.很想和业内的朋友作分享,如果能消除你初

iOS-Core-Animation之十四----图像IO

*潜伏期值得思考* - 凯文 帕萨特 在第13章"高效绘图"中,我们研究了和Core Graphics绘图相关的性能问题,以及如何修复.和绘图性能相关紧密相关的是图像性能.在这一章中,我们将研究如何优化从闪存驱动器或者网络中加载和显示图片. ##加载和潜伏 绘图实际消耗的时间通常并不是影响性能的因素.图片消耗很大一部分内存,而且不太可能把需要显示的图片都保留在内存中,所以需要在应用运行的时候周期性地加载和卸载图片. 图片文件加载的速度被CPU和IO(输入/输出)同时影响.iOS设备中的

caffe学习笔记(十)图像数据转换为db(leveldb/lmdb)文件

在深度学习的实际应用中,我们经常用到的原始数据是图片文件,如jpg,jpeg,png,tif等格式的,而且有可能图片的大小还不一致.而在caffe中经常使用的数据类型是lmdb或leveldb,因此就产生了这样的一个问题:如何从原始图片文件转换成caffe中能够运行的db(leveldb/lmdb)文件? 在caffe中,作者为我们提供了这样一个文件:convert_imageset.cpp,存放在根目录下的tools文件夹下.编译之后,生成对应的可执行文件放在 buile/tools/ 下面,

上班的第四百七十天——开始游戏生涯了

今天正式进军游戏行业了,感觉是很累,但是真心觉得有好多东西学,挺开心的,终于可以向中级程序员迈进了. 先按照昨天的计划,把VS2010常用的快捷键记录下来,然后能够较为轻松地浏览代码后,就叫锋哥--服务器主程,分配了一些简单的任务给我,让我由一个点发散开来熟悉代码. 锋哥给了我两个bug,一个是消耗物品后短时间内提升角色的各种属性值,其中有个属性值没有达到预期那样,我的任务就是将它改过来. 说实话,真心觉得这个任务简单得不能再简单了.贪心的我就直接在VS里面搜"苹果"(该消耗品叫&qu

VB API 之 第十课 图像编程(三)

首先绘制多边形的API函数有: Polygon();   //描绘一个多边形,由两点或三点的任意系列构成 polyPolygon();   //用当前选定的画笔绘画两个或多个多边形 PolyPolyline();   //用当前选定的画笔描绘两个或多个多边形 首先来看Polygon的函数原型 Private Declare Function Polygon Lib "gdi32" Alias "Polygon" (ByVal hdc As Long, lpPoint

游戏编程十年总结(上)

自敲第一行代码起,已经十年多了,今天既不是十年整的日子,也不是一个有特定意义的日子,本来像这种大总结的文章,当择良辰吉日,斋戒沐浴三日,方可动笔.一开始计划是写一篇五年总结的,但各种原因一拖再拖,于是就变成了十年总结.光阴似箭,时不我待,转眼已经在奔三的路上了,离大叔的称呼很近了,但离大神的称呼还很远,在此谨以此文总结反思这十年技术生涯的点滴,与诸君共勉. 编程之前 大概是读初一的时候,家中有幸让我得到了一台二手电脑,那时的心情比现在让我得到一堆苹果电脑更加兴奋.但这是一台不能连网,也没有任何游