计算机视觉导论

xeonds

2021.09.24 01:15:27

导论课,主要就是介绍大致的思想,不会涉及太深的数学。关于计算机视觉领域更是如此,一上来就公式糊脸反而会掩盖其本质。

在开始之前,我想先确定一下这门科学的内容和境界线:

计算机视觉是人工智能(AI) 的一个领域,是指让计算机和系统能够从图像、视频和其他视觉输入中获取有意义的信息,并根据该信息采取行动或提供建议。 如果说人工智能赋予计算机思考的能力,那么计算机视觉就是赋予发现、观察和理解的能力。 计算机视觉的工作原理与人类视觉类似,只不过人类起步更早。

摘自 IBM 《什么是计算机视觉》

它的目的,是让计算机系统从视觉输入中获得有意义的信息,以供后续使用。

而它的研究目的,自然就是这个“获得”。无论是模仿人的方式来获得,还是从数学出发的其他方法,都是研究范围之内。

0x01.计算机所见之梦

摘要里也说了,视觉是人等动物特有的,十分复杂的感知能力。目前对于计算机智能的研究也限制了计算机视觉的发展:更多是通过图形的数值特征进行分析,还做不到/很难做到让计算机去“理解”图形数据。

事实上,现在的电脑并不能看到东西,或者说,它看到的只是一堆数据流。所以,从计算机的角度来说,看到东西/目标检测大致可以等同于数值特征分析。

说到数值分析,首先就要了解图像的数据结构表示。

我们一般把图像看做是一个由像素点(pixel)组成的二维数组,其两个维度分别对应图片长宽。每个像素点则一般由三个字节(也就是3个8位二进制数#)存储,每个字节分别对应其rgb强度信息,其范围是0-255。

为了简化分析,我们先只关注灰度图,也就是每个像素只有一个灰度字节的图。

0x01.推己及人

面对一张灰度图,我们人会怎么做呢?

我们会首先关注那些变化突出的部分。对应到图片上,就是边缘更加锐利的部分。这些就是图像的“特征”。这些特征组合起来,就是计算机有可能能识别出来的,类似于抽象几何图像组合形成的简洁图形。

关于如何处理锐化得到这样的图像,(非严格地讲,)可以使用卷积运算的方法去得到。我们只需要定义一个个的“核”。这个核可以是个3x3的矩阵,每一个单元格定义了对这个单元格的值进行的变换操作(一般是数乘缩放),然后将所有单元格的计算结果相加/平均,将结果作为“核”中心的输出值。通过这种变换,就可以得到一张新的,处理过的图片。

在信号与系统里第一次正式接触到了卷积运算。它的直观理解,就是使用一个函数对另一个函数的每一点进行“采样”,并得到一个以此为输出的新函数作为采样结果。系统函数对应于这里的采样函数,它可以把激励根据系统的特征,变换为特定的输出形式。

就如同上面所说,一种采样方法。