解释
你们都玩过拼图游戏,你拿到一堆图像的碎片,你需要把它们正确的拼接到一起成一个真的图像。问题是,你是如何做的?如何把相同的原理用到计算机程序上好让计算机可以玩拼图?如果计算机可以玩拼图,为什么我们不把真是生活里的图像给计算机让他拼成一个整体?如果计算机可以把几张自然图像拼成一个,那么把很多的建筑图片或者任何结构的图片拿来让计算机生成3D模型呢?
回到最基本的问题,如何把碎片拼成一整张图片?
回答是,我们找特定的模式或者特定的特征,这些特征是唯一的,可以被简单的跟踪的,可以被简单的对比的,如果我们找到这个特性的定义,我们会发现很难用语言表达,但是我们就知道它就是它,如果有人让你指出一个好的特性,可以在若干张图片里对比,你可以指出它,即便是小孩子也可以玩这种游戏,我们在图像里搜索这种特性,我们找到它们,我们在其他图像里找到相同的特征,我们把他们拼在一起,就成了(在拼图游戏里,我们更多的看连续的和不同的图像)所有这些能力是我们固有的天性。
所以我们的基本问题是,这些特征是什么?
很难说明人类是怎么找这些特征的,这是在我们大脑里设计好的,但是如果我们仔细看一些图片来找不同的模式,我们会发现一些有意思的事情,比如下面的图片:
图片很简单,在图片上部,有6个小图片。让你在原图里找到这些小图片的位置,你能找到几个?
A和B是平面,他们在大量区域都有,所以很难找到确切位置。
C和D要简单得多,他们是建筑的边缘,你可以找到大概的位置,但是找到确切位置仍然很难,这是因为,沿着边缘,还是长得都一样,所以边缘要比平面来说是更好的特性,但是还不够好。
最后,E和F是建筑的角,他们可以很容易找出来,因为在角,它看上去很不一样,所以它们是好的特性。所以现在我们用更近简单的来说明:
和上面一样,蓝色的方块是平面区域,很难追踪,不管你怎么挪动蓝方块,看上去都一样,对于黑方块,他是边缘,如果你把它竖着挪(梯度方向),它会变化,如果沿着边缘挪,那就都一样了,对于红方块,它是角,当你挪这个,它就不一样,说明他是唯一的,所以基本上,角对一个图像来说是好的特性,(不仅仅是角,有时候小块也是好特性)
所以现在我们回答我们的问题,“什么是特征”,但是另一个问题出现了,我们怎么找到它们?或者说我们怎么找到角,我们仍然按直觉来回答,查找图像的区域,当我们在它周围的区域移动时有最大变化的。找到这些图像特征就叫做特征检测。
我们找到了图像的特征(假设我们找到了),当你找到以后,你应该在另一个图像里找同样的,我们在特征周围拿一个区域,我们用我们自己的语言描述它,如“上面是蓝天,下面是建筑物,在建筑物上有玻璃”你在别的图像上找同样的区域。基本上你描述了特征,类似的,计算机也应该描述特征周围的区域这样他在其他图像上才能找到。这种描述就叫做特征描述。当你有了特征和特征描述,你可以在所有图片里找到同样的特征,把它们拼接起来。