Selective Search

来源:互联网 发布:手机c语言编程软件ios 编辑:程序博客网 时间:2024/06/06 15:36

目标检测的第一步是要做区域提名(Region Proposal),也就是找出可能的感兴趣区域(Region Of Interest, ROI)。

区域提名可能的方法有:

一、滑动窗口。

滑动窗口本质上就是穷举法,利用不同的尺度和长宽比把所有可能的大大小小的块都穷举出来,然后送去识别,识别出来概率大的就留下来。很明显,这样的方法复杂度太高,产生了很多的冗余候选区域,在现实当中不可行。

二、规则块。

在穷举法的基础上进行了一些剪枝,只选用固定的大小和长宽比。这在一些特定的应用场景是很有效的,比如拍照搜题APP小猿搜题中的汉字检测,因为汉字方方正正,长宽比大多比较一致,因此用规则块做区域提名是一种比较合适的选择。但是对于普通的目标检测来说,规则块依然需要访问很多的位置,复杂度高。

三、选择性搜索(Selective Search)

 选择性搜索是一种用于目标检测的区域推荐算法。它的设计速度快,召回率高。它是根据颜色、纹理、大小和形状的兼容性,计算相似区域的层次分组。

候选区域生成

使用了Selective Search方法从一张图像生成约2000-3000个候选区域。基本思路如下:
使用一种过分割手段,将图像分割成小区域
查看现有小区域,合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置
输出所有曾经存在过的区域,所谓候选区域
候选区域生成和后续步骤相对独立,实际可以使用任意算法进行。

合并规则

优先合并以下四种区域:
1.颜色(颜色直方图)相近的
2.纹理(梯度直方图)相近的
3.合并后总面积小的
4.合并后,总面积在其BBOX中所占比例大的

多样化与后处理

为尽可能不遗漏候选区域,上述操作在多个颜色空间中同时进行(RGB,HSV,Lab等)。在一个颜色空间中,使用上述四条规则的不同组合进行合并。所有颜色空间与所有规则的全部结果,在去除重复后,都作为候选区域输出。作者提供了Selective Search的源码,内含较多.p文件和.mex文件,难以细查具体实现。

Selective Search方法python实现案例

#coding:utf-8from __future__ import (    division,    print_function,)import matplotlib.pyplot as pltimport matplotlib.patches as mpatchesimport selectivesearchimport cv2def main():    img = cv2.imread('test.jpg')    # perform selective search    img_lbl, regions = selectivesearch.selective_search(        img, scale=500, sigma=0.9, min_size=10)    candidates = set()    for r in regions:        # excluding same rectangle (with different segments)        if r['rect'] in candidates:            continue        # excluding regions smaller than 2000 pixels        if r['size'] < 2000:            continue        # distorted rects        x, y, w, h = r['rect']        if w / h > 1.2 or h / w > 1.2:            continue        candidates.add(r['rect'])    # draw rectangles on the original image    fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6))    ax.imshow(img)    for x, y, w, h in candidates:        print(x, y, w, h)        rect = mpatches.Rectangle(            (x, y), w, h, fill=False, edgecolor='red', linewidth=1)        ax.add_patch(rect)    plt.show()if __name__ == "__main__":    main()

结果

这里写图片描述

这里写图片描述

链接:http://pan.baidu.com/s/1hrJTRnA 密码:4bvp

原创粉丝点击