计算机眼里的图像
图像一直以直观著称,一张图像包含的信息很多,所谓一图胜千言,对于人类来说,理解图像很方便,几乎是一眼就能理解图像表达的意思,科学研究表明这是因为人的大脑有一套注意力集中机制,对于图像中的海量信息,人脑能快速地找到其中最重要的信息。但是,计算机该如何去理解?这就涉及到了计算机视觉的知识,本专栏就是来描述计算机视觉。
计算机视觉的起源
1982年《视觉》(Marr,1982)一书的问世,标志着计算机视觉这门学科的诞生。此后,计算机视觉经历了四个阶段,第一个阶段,马尔计算视觉;第二个阶段,主动和目的视觉;第三阶段,多视几何和分层三维重建;第四个阶段,基于学习的视觉。四个阶段算然是依次进行的,但不能说哪一个好,哪一个不好,只是后者比前者更加顺应当时的时代。
马尔计算视觉
马尔计算视觉的主要思想是大脑可以快速完成三维重建,马尔认为,三维重建是可以完全靠计算来实现。他认为图象是物理实体在视网膜上的投影,所以理解了物理信息,就可以理解图像信息。简而言之,其计算机视觉计算理论就是要“挖掘物体的物理属性来完成对应的视觉问题”。其意义完在于,如果简单地从数学角度出发,很多图像具有歧义性。
主动和目的视觉
马尔视觉的泛化性不够理性,很难在工业界实现,可以想象,由计算机对任何物体做三维重建是多么困难。美国的R.Bajcsy教授,提出了主动视觉的概念,主要思想视觉要有目的性,例如在一张百人合影里面,人能轻松地找到自己的位置,或者自己好友的位置,而对其他人“视而不见”。三维重建并非视觉的目的,找到想看到的图像才是根本目的。
多视几何和分层三维重建
随着主动视觉昙花一现,多视几何走向繁荣,多视几何的代表性人物有法国的O.Faugeras、美国的R.Hartely和英国的A.Zisserman等。多视几何的目的是增加三维重建算法的效率和精度,使其能真正落地。三维重建就是从图像中选取合适的图像集,然后对拍摄位置信息进行标定并重建出场景的三维结构。
基于学习的视觉
基于学习的视觉是本书的主要内容,以机器学习为主要手段,包括流形学习和深度学习两大流派。
流形学习时域2000年,但是在后面的研究中发现,多数情况下流形学习的结果还不如传统的降维方法,如主成分分析和线性判别分析等。
深度学习虽然是近几年才火起来的,但是其效果非常好,并且模型层出不穷。深度学习更像是实践科学,和前几个阶段不同,并非有很完善的理论支持。往往在不停的尝试中,模型得到改善。在静态物体识别中,卷积神经网络已经超过人类的准确度。
计算及视觉的难点
计算机视觉的难点有两点:三维重建和鲁棒性。
三维重建之所以对人类来说非常简单,主要是因为人本身就生活在三维世界中,而计算机却是一个二维“生物”。就像我们去构建四维世界的东西,就会觉得非常困难,根本无从下手。对于计算机来说,完成三维世界的图像构建,对于他来说,无疑是降维打击。所以这才需要人类的帮助,让计算机能够识别图像。
鲁棒性的问题简单地说就是先验知识和注意机制问题。对于人来说,即使只是轮廓,或者很模糊的照片,也能大致猜测出图片的内容。但是计算机就不行,他对图像的识别都有很严格的限制,改变颜色,形状。模糊程度等,都会让计算机识别精度下降。这就是鲁棒性问题。
专栏研究方向
在介绍这篇专栏前,我先解释一下,博主之前一直在更新人工智能算法专栏,由于人工智能算法涉及到的面很广,知识面太过复杂,其中,就包含了深度学习,所以,博主打算出一期计算机视觉的专栏,先介绍一下,这样学习人工智能算法会简单很多。博主更新完计算机视觉专栏后,会继续更新人工智能算法。在这里给大家说一声抱歉!
计算机视觉主要研究方向有图像识别,目标检测,图像分割,目标跟踪等。
图像识别,也叫图像分类,可以分为i物种级分类,子类分类和实例级分类,主要模型有VGG,GoogleNet,RestNet等,常用的数据库有Minist手写数字,carfil10,cifar100,ImageNet等。
目标检测,拥有识别物体类别,还需要框出物体位置信息,例如智能相机,还能标注出人脸的位置。传统的,我们可以用OpenCV来解决这类问题,但是召回率低。常用的模型有Fast R-CNN,YOLO和SSD等。
图像分割,计算机视觉中最高层次的理解范畴。目标就是把图像分割成具有相似特性的若干个区域,并使他们对因物体的不同部分或不同的物体。常用的模型是全卷积神经网络。
目标跟踪也可以看成连续的目标检测,目的就是在视频中对物体进行连续跟踪。目标跟踪常用在监控系统中。跟踪算法可以被分为生成式和判别式两大类别。深度学习主要用在判别模式上,著名的模型有SO-DLT和FCNT等。不同于目标检测、物体识别等领域深度学习一家独大的形式,深度学习在目标跟踪方向还未能达成垄断地位,其主要难点在于数据缺失和物体快速移动。
提到深度学习相关的计算机视觉,不得不提到最近流行的风格迁移,以及GAN生成式对抗网络。例如现在使用的ZAO就是运用了此技术。
传统图像处理之OpenCV的妙用
OpenCV(Open Source Computer Vision Library)顾名思义就是开源的计算机视觉库,采用C,C++编写,也提供了Python和Matlab等语言的接口,并且在各大操作平台均可使用。OPenCV不只是一个简单的提供了计算机视觉常用的操作,更对其中关键算法进行了优化和提速,从而可以进行多线程处理。
OpenCV安装
pip install opencv-python
如果下载速度太慢,可以考虑使用镜像:
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
OpenCV模块
CUDA-accelerated Computer Vision:CUDA加速模块。 Core functionality:和兴功能模块,包含各种c++操作,接口,矩阵运算。 Image Processing:图像处理模块,包含图像处理四大任务。 Image file reading and writing:图像读取和保存模块。 Video I/O:视频读取和保存模块。 Video Analysis:视频分析模块。 Camera Calibration and 3D Reconstruction:相机校准和3D重建模块。 2D Features Framework:2D功能框架模块。 Objecneural Dection: 目标检测模块。 Deep Network module:深度学习模块 Machine Learning:机器学习模块。 Clustering and Search in Multi-Dimensional Spaces::多维空间模块。 Computational Photography:计算摄影模块。 Images stitching:图像拼接模块。 G-API framework:图论框架模块。 ArUco Marker Detection:ArUco表i==标记检测模块。 Improved Background-Foreground Segmentation Methods:背景,前景分割模块。 Biologically inspired vision models and derivated tools:基于生物的视觉模型和工具模块。 Custom Calibration Pattern for 3D reconstruction:传统模式三维重建模块。