Rcnn:选择性搜索

selective search实现步骤

  1. 使用一种图分割手段,将图像分割成小区域 (2k~3k 个)
  2. 查看现有小区域,按照相似度合并规则合并可能性最高的相邻两个区域。重复直到整张图像合并成一个区域位置
  3. 输出所有曾经存在过的区域,所谓候选区域
图像分割

http://cs.brown.edu/~pff/papers/seg-ijcv.pdf是2004年由Felzenszwalb发表在IJCV上的一篇文章。主要介绍了基于图表示的图像分割。并且提出了一种基于贪心选择的图像分割方法,此方法能够考虑到全局特征。根据距离度量方式的不同,此算法有两种具体的实现形式。结果表明算法的运行时间接近于线性(相对于图中边的个数来说)。此算法的更重要的特性在于,在特征变化较小的情况下,对细节的重视性大于特征变化较大时的情况

算法的C++实现
算法的python实现

算法过程

测试图片大小:w:h = 960:640

  1. 分割成小区域

Felzenszwalb算法直接调用的是skimage中的实现

img = io.imread('./image/breakfast.jpg')
#img = io.imread('1.png')

# perform selective search
im_mask = skimage.segmentation.felzenszwalb(
    skimage.util.img_as_float(img), scale=500, sigma=0.9,
    min_size=10)

skimage.util.img_as_float(img)会将图片像素值从int8转换成float32,扩大像素值的数字表示范围,能够表示更多的颜色。
例如在上述实现中,(640, 960, 3)的原图像,经过分割函数felzenszwalb的处理,输出大小为(640, 960)的im_mask,像素值的范围是[0,385]而不是[0, 255]

在这里插入图片描述

在im_mask中,同一块颜色值用同一个像素值表示,总共386个不同的颜色区域;合并相同像素值之后,可以得到386个物体区域;下图是386个颜色区域的个数(大小)统计,和相同颜色区域合并后得到的box图

在这里插入图片描述

  1. 合并区域

遍历以上所有box框,得到每一个rect box框区域对应的相邻区域,邻居的数据存储结构为

(a,b)
(a,c)
(a,g)
(b,e)
(b,f)
...

计算方法也比较简单,查看两个框是否有交集即可

def _extract_neighbours(regions):

    def intersect(a, b):
        if (a["min_x"] < b["min_x"] < a["max_x"]
                and a["min_y"] < b["min_y"] < a["max_y"]) or (
            a["min_x"] < b["max_x"] < a["max_x"]
                and a["min_y"] < b["max_y"] < a["max_y"]) or (
            a["min_x"] < b["min_x"] < a["max_x"]
                and a["min_y"] < b["max_y"] < a["max_y"]) or (
            a["min_x"] < b["max_x"] < a["max_x"]
                and a["min_y"] < b["min_y"] < a["max_y"]):
            return True
        return False

    R = list(regions.items())
    neighbours = []
    for cur, a in enumerate(R[:-1]):
        for b in R[cur + 1:]:
            if intersect(a[1], b[1]):
                neighbours.append((a, b))

    return neighbours

如果两个区域有交叉,则分别计算两个交叉区域图形的颜色相似度,纹理相似度,大小像素点和形状相似度,四个相似度按照一定的比重计算,得到最终两个交叉区域是否合并,合并后的结果为

finally

如此就得到了,最总我们需要截取的区域

参考文档

https://github.com/AlpacaDB/selectivesearch
https://blog.csdn.net/aiaiai010101/article/details/64128380
https://zhuanlan.zhihu.com/p/52379393
https://zhuanlan.zhihu.com/p/36184131
https://learnopencv.com/selective-search-for-object-detection-cpp-python/
https://blog.51cto.com/spikeking/1388049
https://blog.csdn.net/weixin_39679367/article/details/81015238

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值