前言
本文处于本人的好奇,尽管算法有些过时,当还是想了解算法大体是如何工作的。
选择性搜索算法
在RCNN中提取预选框,可这是怎么实现的呢,直接上代码。
# -*- coding: utf-8 -*-
import skimage.io
import skimage.transform
import skimage.util
from skimage import segmentation, util, color, feature, io
from matplotlib import patches
import matplotlib.pyplot as plt
import numpy as np
import numpy
def _generate_segments(im_orig, scale, sigma, min_size):
"""
合并Felzenswalb掩码作为图像的第四通道
"""
im_mask = segmentation.felzenszwalb(
util.img_as_float(im_orig), scale=scale, sigma=sigma, min_size=min_size)
# merge mask channel to the image as a 4th channel
im_mask_ = np.zeros(im_orig.shape[:2])[:, :, np.newaxis] # (424, 640, 1)
im_orig = np.append(im_orig, im_mask_, axis=2) # shape(424, 640, 4)
#plt.imshow(im_orig[:, :, :3].astype(np.int))
#plt.show()
im_orig[:, :, 3] = im_mask
plt.imshow(im_orig[:, :, 3].astype(np.int))
plt.show()
#plt.imshow(im_orig.astype(np.int)) 输入四通道的图像
#plt.show()
return im_orig
def _sim_colour(r1, r2):
"""
计算颜色相似度的总和
"""
return sum([min(a, b) for a, b in zip(r1["hist_c"], r2["hist_c"])])
def _sim_texture(r1, r2):
"""
计算纹理相似度的和
"""
return sum([min(a, b) for a, b in zip(r1["hist_t"], r2["hist_t"])])
def _sim_size(r1, r2, imsize):
"""
calculate the size similarity over the image
"""
return 1.0 - (r1["size"] + r2["size"]) / imsize
def _sim_fill(r1, r2, imsize):
"""
计算填充相似度
"""
bbsize = (
(max(r1["max_x"], r2["max_x"]) - min(r1["min_x"], r2["min_x"]))
* (max(r1["max_y"], r2["max_y"]) - min(r1["min_y"], r2["min_y"]))
)
return 1.0 - (bbsize - r1["size"] - r2["size"]) / imsize
def _calc_sim(r1, r2, imsize):
sim_colour = _sim_colour(r1, r2)
sim_texture = _sim_texture(r1, r2)
sim_size = _sim_size(r1, r2, imsize)
sim_fill = _sim_fill(r1, r2, imsize)
return