特征描述子
特征描述子是一串简短的数字——也就是一个向量——它概括了某个有趣的点周围那一小块图像看起来是什么样子,好让计算机能在另一张图里再次认出同一个点。可以把它想成照片中某个位置的“指纹”。摄像头并不能像你那样理解“这扇窗户的拐角”;它的做法是抓取拐角周围那一小片像素邻域,测量那里明暗与边缘的图案,再把它浓缩成大约 128 个或 256 个数字。两块看起来相似的区域,会得到几乎相同的数字,即便这两张图是从略微不同的角度、或在不同光照下拍的。
把一小块图像压缩成一个紧凑而稳定的向量,目的在于“匹配”。当机器人从两个视角看同一个场景,或看视频中的两帧画面时,它想知道:图 A 中的哪个点,和图 B 中的某个点,对应的是同一个真实物理位置。直接逐像素比较整块区域既慢,又会在光照或角度一变就失效。改成比较描述子就很快——你只需测量两串数字有多接近——而一个设计良好的描述子,即使那块区域被旋转、缩放、调亮,或从新角度去看,它也大致保持不变。正是这种稳健性,让匹配能够熬过真实世界的种种杂乱。
描述子只在精心挑选出的关键点上计算,通常是拐角以及其他显眼、容易再次找到的位置,而不是在每一个像素上都算。经典的人工设计描述子包括 SIFT、SURF、ORB 和 BRIEF;较新的系统则用神经网络从数据中自动学出描述子。无论哪种方式,匹配好的描述子都会成为更大任务的原始黏合剂:把多张照片拼成全景图、追踪摄像头如何移动,以及为一处空间构建三维地图。
要把两张有重叠的照片拼成全景图,软件会在每张图里找出拐角,为每个拐角算一个描述子,再把描述子几乎完全一样的拐角配成对——这些配对就揭示了两张照片该如何对齐。
匹配描述子,能告诉软件两张图里哪些点是同一个点。
描述子描述的是关键点“长什么样”;而关键点检测器决定的是这些有趣的点“在哪里”。它们是配成一对、各司其职的两个独立步骤。