如何使用OpenCV对物体进行搜索检测与识别( 二 )


选择性搜索对象识别
什么是选择性搜索?
选择性搜索是用于对象检测的区域提议算法 。它设计为快速,具有很高的召回率 。它基于根据颜色,纹理,大小和形状兼容性计算相似区域的分层分组 。
选择性搜索首先使用和 基于图形的分割方法,根据像素的强度对图像进行过度分割 。算法的输出如下所示 。右侧的图像包含使用纯色表示的分段区域 。
中使用分段部分作为区域提案吗?答案是否定的,我们不能这样做有两个原因:

如何使用OpenCV对物体进行搜索检测与识别

文章插图
原始图像中的大多数实际对象包含2个或更多分段部分
使用该方法不能产生用于封闭物体的区域建议,例如由杯子覆盖的板或装有咖啡的杯子
如果我们试图通过进一步合并彼此相似的相邻区域来解决第一个问题,那么我们将最终得到一个覆盖两个对象的分段区域 。
完美的细分不是我们的目标 。我们只想预测许多区域提案,使得其中一些提案应与实际对象具有非常高的重叠 。
选择性搜索使用来自和方法的调查作为初始种子 。一个过度注释的图像看起来像这样 。
选择性搜索算法将这些过量作为初始输入并执行以下步骤
将与分段部件对应的所有边界框添加到区域提案列表中
根据相似性对相邻段进行分组
转到第1步
在每次迭代中,形成更大的段并将其添加到区域提议列表中 。因此,我们以自下而上的方式创建从较小的细分市场到较大细分市场的区域提案 。这就是我们所说的使用和的计划来计算“分层”分段 。
此图显示了分层分段过程的初始,中间和最后一步 。
相似
让我们深入探讨如何计算两个区域之间的相似性 。
选择性搜索使用基于颜色,纹理,大小和形状兼容性的4种相似性度量 。
颜色相似
针对图像的每个通道计算25个区间的颜色直方图,并且连接所有通道的直方图以获得颜色描述符,得到25×3 = 75维颜色描述符 。
两个区域的颜色相似性基于直方图交集,可以计算为:
纹理相似性
通过为每个通道提取8个方向的高斯导数来计算纹理特征 。对于每个方向和每个颜色通道,计算10个箱的直方图,得到 = 240维特征描述符 。
还使用直方图交叉来计算两个区域的纹理相似性 。
如何使用OpenCV对物体进行搜索检测与识别

文章插图
大小相似
大小相似性鼓励较小的区域尽早合并 。它确保在图像的所有部分形成所有尺度的区域提议 。如果不考虑该相似性度量,则单个区域将逐个吞噬所有较小的相邻区域,因此仅在该位置处生成多个尺度的区域提议 。大小相似度定义为:
其中大小Size(im)是图像的大小,以像素为单位 。
形状兼容性
形状兼容性衡量两个区域(Ri和Rj)相互适合的程度 。如果R_I适合r_j我们想合并它们以填补空白,如果它们甚至没有相互接触它们就不应该合并 。
形状兼容性定义为:
在哪里大小Size(BBijj)是一个边界框Ri和Rj 。
最终相似性
两个区域之间的最终相似性被定义为前述4个相似性的线性组合 。
结果
中的选择性搜索实现提供了按对象性递减顺序排列的数千个区域提议 。为清楚起见,我们与图像上方的200-250个框共享结果 。一般来说,1000-1200个提案足以获得所有正确的区域提案
让我们来看看我们如何在中使用基于选择性搜索的分段 。
选择性搜索:C ++
下面的代码是使用进行选择性搜索的C ++教程 。请仔细阅读评论以了解代码 。