在本文中,我将讨论使用OpenCV进行图像特征检测、描述和特征匹配的各种算法。
首先,让我们看看什么是计算机视觉,OpenCV是一个开源计算机视觉库。
当人类看到这张图片时会发生什么?
他将能够识别图像中的面孔。因此,简单来说,计算机视觉就是让计算机能够像人类一样查看和处理视觉数据。计算机视觉涉及分析图像以产生有用的信息。
什么是特征?
当你看到芒果图像时,如何识别它是芒果?
通过分析颜色、形状和质地,你可以说它是芒果。
用于识别图像的线索称为图像的特征。同样,计算机视觉的功能是检测图像中的各种特征。
我们将讨论OpenCV库中用于检测特征的一些算法。
Harris角点检测算法用于检测输入图像中的角点。该算法有三个主要步骤。
这是该算法的Python实现。
这是另一种角点检测算法。它的工作原理类似于哈里斯角检测。这里唯一的区别是R值的计算。该算法还允许我们找到图像中最好的n个角。
让我们看看Python的实现。
下一个是尺度不变特征变换。
SIFT用于检测角、斑点、圆等。它还用于缩放图像。
考虑这三个图像。尽管它们在颜色、旋转和角度上有所不同,但你知道这是芒果的三种不同图像。计算机如何能够识别这一点?
在这种情况下,Harris角点检测和Shi-Tomasi角点检测算法都失败了。但SIFT算法在这里起着至关重要的作用。它可以从图像中检测特征,而不管其大小和方向。
让我们实现这个算法。
你可以看到图像中有一些线条和圆圈。特征的大小和方向分别用圆圈和圆圈内的线表示。
我们将看到下一个特征检测算法。
SURF算法只是SIFT的升级版。
以下是代码实现:
BLOB代表二进制大对象。它指的是特定二值图像中具有共同属性的一组连接像素或区域。这些区域是OpenCV中的轮廓,具有一些额外的特征,如质心、颜色、面积、均值和覆盖区域中像素值的标准差。
现在,让我们进入特征描述符算法。
特征通常是图像中的不同点,描述符给出特征,因此它描述了所考虑的关键点。它提取该点周围的局部邻域,从而创建局部图像块并计算来自该局部块的特征。
在深度学习出现之前,HoG是对象检测应用中最突出的特征描述符之一。HoG是一种用于计算图像局部中梯度方向出现的技术。
Brief是流行的SIFT描述符的替代品,它们计算速度更快,更紧凑。
让我们看看它的实现。
ORB是一种一次性面部识别算法。它目前正在你的手机和应用程序中使用,例如Google照片,你可以在其中对人进行分组,你看到的图像是根据人分组的。
这个算法不需要任何主要的计算。它不需要GPU。快速而简短。它适用于关键点匹配。图像中不同区域的关键点匹配,如强度变化。
下面是这个算法的实现。
现在,让我们看看特征匹配。
特征匹配就像比较两个图像的特征,这两个图像可能在方向、视角、亮度上不同,甚至大小和颜色也不同。让我们看看它的实现。
当你开始练习时,真正的乐趣就开始了。所以,开始练习这些算法,在实际项目中实现它们,看看其中的乐趣。