Selective Search(选择性搜索)算法

  • 在目标检测中,这个算法,可以启发式地搜索出可能包含物体的区域,而不用随机盲目地找很多个方框。
  • 最简单的目标检测
  • 我们的思路是先搞出一些小的方框(不一定是方块,但一定是连在一起的区域),然后不断的合并

一、图像分割

  • 为了方便合并,我们先处理出一些小的区域
  • 我们这里用​​felzenszwalb​​的图像分割算法
  • 简单的来说这个算法就是对图像做一个简单的聚类,什么样的聚类又快又简单呢?----最小生成树!
  • ​skimage.segmentation.felzenszwalb​​​是​​python​​​对应的​​API​

二、计算相似度

  • 计算相似度,把相似度高且邻近的块合并
  • 为了保证多样性,这个算法涉及多种相似度,然后把各个相似度直接加起来(当然是带加权的)
  • 多样性还考虑了多种样色空间,如RGB,HSV,灰度等

颜色相似度

  • 为了让各个大小的区域都能比较,我们求出每个区域每个颜色通道的25 bins直方图,这样每个区域就能得到一个75维的向量Selective Search(选择性搜索)算法学习_相似度
  • 向量要归一化,就是和为1
  • 相似度公式为
  • Selective Search(选择性搜索)算法学习_ci_02
  • 这样两个区域在很相似的情况下得到的最大值也只有1
  • 两个区域合并时公式为
  • Selective Search(选择性搜索)算法学习_计算机视觉_03

纹理相似度

  • 计算纹理梯度,然后做成直方图,相似度和合并公式和上面相同
  • 计算纹理梯度的方法:
  • SIFT特征
  • 论文中的方法
  • LBP
  • 较简单的方法
  • 对于每个像素,比较一周的像素(可设定半径值),若大则为1,小则为0,最后合在一起为一个为一个二进制数,再转成十进制数即可

优先合并小区域

  • 毕竟启发式合并
  • 相似度公式
  • Selective Search(选择性搜索)算法学习_ci_04
  • ​size(im)​​是总图像大小

区域距离合适度

  • 假设有1,2,3区域依次相隔,但是1和3很相似而2不相似,这样就会形成断崖
  • 相似度公式
  • Selective Search(选择性搜索)算法学习_目标检测_05
  • ​BB_{ij}​​是区域i和j合并之后的区域

总相似度

  • 最后几个相似度带权合并就行

三、合并

  • 统计每个区域的有交集区域,并统计相似度
  • 然后每次把相似度最高的两个区域合并,直到没有区域相交