图像处理与计算机视觉基础,经典以及最近发展
By xdyang(杨晓冬 xdyang.ustc@gmail.com)
一、 绪论
1. 为什么要写这篇文章
从 2002 年到现在,接触图像快十年了。虽然没有做出什么很出色的工作,不过在这个领域摸爬滚打了十年之后,发现自己对图像处
理和计算机视觉的感情越来越深厚。下班之后看看相关的书籍和文献是一件很惬意的事情。平常的一大业余爱好就是收集一些相关的文
章,尤其是经典的文章,到现在我的电脑里面已经有了几十 G 的文章。写这个文档的想法源于我前一段时间整理文献时的一个突发奇想,
既然有这个多文献,何不整理出其中的经典,抓住重点来阅读,同时也可以共享给大家。于是当时即兴写了一个《图像处理与计算机视
觉中的经典论文》。现在来看,那个文档写得很一般,所共享的论文也非常之有限。就算如此,还是得到了一些网友的夸奖,心里感激
不尽。因此,一直想下定决心把这个工作给完善,力求做到尽量全面。
本文是对现有的图像处理和计算机视觉的经典书籍(后面会有推荐)的一个补充。一般的图像处理书籍都是介绍性的介绍某个方法,
在每个领域内都会引用几十上百篇参考文献。有时候想深入研究这个领域的时候却发现文献太多,不知如何选择。但实际上在每个领域
都有那么三五篇抑或更多是非读不可的经典文献。这些文献除了提出了很经典的算法,同时他们的 Introduction 和 Related work 也是对所
在的领域很好的总结。读通了这几篇文献也就等于深入了解了这个领域,比单纯的看书收获要多很多。写本文的目的就是想把自己所了
解到的各个领域的经典文章整理出来,不用迷失在参考文献的汪洋大海里。
2. 图像处理和计算机视觉的分类
按照当前流行的分类方法,可以分为以下三部分:
A.图像处理:对输入的图像做某种变换,输出仍然是图像,基本不涉及或者很少涉及图像内容的分析。比较典型的有图像变换,图像增
强,图像去噪,图像压缩,图像恢复,二值图像处理等等。基于阈值的图像分割也属于图像处理的范畴。一般处理的是单幅图像。
B.图像分析:对图像的内容进行分析,提取有意义的特征,以便于后续的处理。处理的仍然是单幅图像。
C.计算机视觉:对图像分析得到的特征进行分析,提取场景的语义表示,让计算机具有人眼和人脑的能力。这时处理的是多幅图像或者
序列图像,当然也包括部分单幅图像。
关于图像处理,图像分析和计算机视觉的划分并没有一个很统一的标准。一般的来说,图像处理的书籍总会或多或少的介绍一些图像
分析和计算机视觉的知识,比如冈萨雷斯的数字图像处理。而计算机视觉的书籍基本上都会包括图像处理和图像分析,只是不会介绍的
太详细。其实图像处理,图像分析和计算机视觉都可以纳入到计算机视觉的范畴:图像处理->低层视觉(low level vision),图像分析->
中间层视觉(middle level vision),计算机视觉->高层视觉(high level vision)。这是一般的计算机视觉或者机器视觉的划分方法。在本
文中,仍然按照传统的方法把这个领域划分为图像处理,图像分析和计算机视觉。
3. 图像处理和计算机视觉开源库以及编程语言选择
目前在图像处理中有两种最重要的语言:c/c++和 matlab。它们各有优点:c/c++比较适合大型的工程,效率较高,而且容易转成硬件
语言,是工业界的默认语言之一。而 matlab 实现起来比较方便,适用于算法的快速验证,而且 matlab 有成熟的工具箱可以使用,比如图
像处理工具箱,信号处理工具箱。它们有一个共同的特点:开源的资源非常多。在学术界 matlab 使用的非常多,很多作者给出的源代码
都是 matlab 版本。最近由于 OpenCV 的兴起和不断完善,c/c++在图像处理中的作用越来越大。总的来说,c/c++和 matlab 都必须掌握,
最好是精通,当然侧重在 c/c++上对找工作会有很大帮助。