Selective Search 演算法
由[Uijlings J R R在2012年的IJCV][1]上提出。 方法以[P. F. Felzenszwalb在2004年的IJCV發表的基於圖的影象分割][2]為基礎,考慮色彩、紋理和尺寸的相似度,輸出所有可能目標的位置,為後續的目標識別提供基礎。
演算法分析
演算法使用[影象分割方法][2]對影象做初始分割,提出分層分組方法(圖1)對分割的結果做篩選和歸併,最終輸出所有可能位置。
step1:計算區域集R裡每個相鄰區域的相似度S={s1,s2,…}
step2:找出相似度最高的兩個區域,將其合併為新集,新增進R
step3:從S中移除所有與step2中有關的子集
step4:計算新集與所有子集的相似度
step5:跳至step2,直至S為空
相似度計算
考慮了顏色、紋理、尺寸和空間交疊這4個引數
顏色相似度
將色彩空間轉為HSV,每個通道下以bins=25計算直方圖,這樣每個區域的顏色直方圖有25*3=75個區間。
對直方圖除以區域尺寸做歸一化後使用下式計算相似度
可以看到,就是簡單的取每個區間最小的值累加。(可以這麼理解:假設兩個直方圖波峰和波谷高度重合,那麼計算下來的值比較大;反之如果波峰和波谷錯開的,那麼累加的值一定比較小。因此這裡提前歸一化很重要)
紋理相似度
論文采用方差為1的高斯分佈在8個方向做梯度統計,然後將統計結果(尺寸與區域大小一致)以bins=10計算直方圖。直方圖區間數為8*3*10=240(使用RGB色彩空間)。
下節的python實現程式碼中將基於高斯的梯度統計換成更簡單的LBP方法
接下來與顏色相似度類似,通過累加每個直方圖區間最小值計算相似度
空間交疊相似度
兩個區域交疊越大相似度越高
def _sim_fill(r1, r2, imsize):
"""
calculate the fill similarity over the image
"""
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
演算法實現
[1]: Uijlings J R R, Sande K E A V D, Gevers T, et al. Selective Search for Object Recognition[J]. International Journal of Computer Vision, 2013, 104(2):154-171.
[2]: P. F. Felzenszwalb and D. P.Huttenlocher. Efficient Graph-Based Image Segmentation. IJCV, 59:167–181, 2004.