码迷,mamicode.com
首页 > 其他好文 > 详细

mean shift 图像分割(二)

时间:2014-08-12 17:28:54      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:mean shift   图像分割   opencv   

Reference:

[1] Mean shift: A robust approach toward feature space analysis, PAMI, 2002

[2] mean shift,非常好的ppt 百度文库链接

[3] Pattern Recognition and Machine Learning, Bishop, 2006,Sec 2.5

[4] Computer Vision Algorithms and Applications, Richard Szeliski, 2010, Sec 5.3

[5] Kernel smoothing,MP Wand, MC Jones ,1994, Chapter 4


mean shift 图像分割 (一)1 总体思想,2 算法步骤

mean shift 图像分割 (二)3 算法原理,4 延伸

mean shift 图像分割 (三)5 非参数密度估计

图像分割—mean shift(OpenCV源码注解)



3 算法原理

3.1 密度估计

    关于密度估计,这里直接使用结论,具体原理,参见第5部分:非参数密度估计。

某一点的密度估计值:

bubuko.com,布布扣

    bubuko.com,布布扣为核函数,一般我们会使用径向对称(radially symmetric)核函数。即:

bubuko.com,布布扣

    其中bubuko.com,布布扣为标准化常数,使得

bubuko.com,布布扣

    bubuko.com,布布扣称为bubuko.com,布布扣的profile,原文介绍了两种bubuko.com,布布扣,对应两种核,这里再补充一种。

    (1)Epanechnikov Kernel

    它的profile如下:

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

可视化效果

    (2)Normal Kernel

    它的profile如下:

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

可视化效果

    (3)Uniform Kernel

    它的profile如下:

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

可视化效果

    3.2密度梯度估计

    3.2.1 梯度方向

    bubuko.com,布布扣处的密度估计:

bubuko.com,布布扣

    则密度梯度估计:

bubuko.com,布布扣

    bubuko.com,布布扣,即这一部分又可以看成是一个核密度估计。

    物理意义梯度方向是各个数据点的方向向量的加权求平均,即上式可以看成

bubuko.com,布布扣

bubuko.com,布布扣

蓝色圈圈—>到黄色圈圈

    例如,我们使用的是Normal Kernel,则

bubuko.com,布布扣

bubuko.com,布布扣

    想象一下几十匹马同时拉一辆车的恢宏场面,每匹马bubuko.com,布布扣都往自己的方向bubuko.com,布布扣拉,不过,距离越bubuko.com,布布扣近的马,其力量bubuko.com,布布扣越大,初中物理告诉我们,结果是合力的方向,如上图的黄色箭头。

    注意:Epanechnikov Kernel求导后实质上就是Uniform Kernel。

    3.2.2 漫漫爬坡路

    虽然,往哪个方向移动知道了,但是移动的步长并不好确定,下面转化一下形式,可以得到自适应步长:

bubuko.com,布布扣

    看起来有点复杂,实际上只是简单的替换。其中bubuko.com,布布扣类比bubuko.com,布布扣bubuko.com,布布扣类比bubuko.com,布布扣

bubuko.com,布布扣

    中间项的物理意义bubuko.com,布布扣处的核bubuko.com,布布扣的密度估计,bubuko.com,布布扣bubuko.com,布布扣求导所得,如果bubuko.com,布布扣用Normal Kernel,则bubuko.com,布布扣的形式和bubuko.com,布布扣相同。

    中间项只是一个数,而最后一项bubuko.com,布布扣就是所谓的mean shift向量,是一个方向向量,对应的就是我们的梯度方向。

    对于某一点bubuko.com,布布扣往梯度方向移动到bubuko.com,布布扣,则新坐标:

bubuko.com,布布扣

    物理意义:很直观,以bubuko.com,布布扣为权值计算重心。

    bubuko.com,布布扣时,我们就到达了模点,由于bubuko.com,布布扣,所以只能是bubuko.com,布布扣。不过想要一步登天,很难,除非你出生很好,就落在模点,大多数数据点,还是得老老实实,一步一个脚印爬上去。还是设bubuko.com,布布扣爬过的脚印依次bubuko.com,布布扣bubuko.com,布布扣,则脚印公式:

    bubuko.com,布布扣

    3.3.3 自适应步长

bubuko.com,布布扣

    可以看出步长bubuko.com,布布扣bubuko.com,布布扣成反比,还是以Normal Kernel为例,越靠近模点,步长越小,反之越大。

    原文证明了,只要bubuko.com,布布扣是凸函数,bubuko.com,布布扣单调递减(bubuko.com,布布扣可以不是哦),那么就能保证它总能收敛到模点,并且bubuko.com,布布扣是单调递增的(我没看……)。只要步履不停,我们总会遇见,多么美好的世界啊,求遇见。

    3.3 图像分割领域的具体化

    本质上,mean shift解决任何问题,都是转化成密度估计问题。但具体问题还得具体分析。对于图像它有两种信息,坐标和颜色,前者为spatial 空间bubuko.com,布布扣后者为range空间,对于单通道图片即灰度值,对于彩色图片即bubuko.com,布布扣或者效果更好的bubuko.com,布布扣等。二者是截然不同的属性,决定了不能等同视之。因此,我们使用多元核密度估计(multivariate kernel)。设spatial有2维,range空间,设为bubuko.com,布布扣维。

    一元核:

bubuko.com,布布扣

bubuko.com,布布扣

    bubuko.com,布布扣

    图像分割中使用的多元核:

bubuko.com,布布扣

bubuko.com,布布扣 bubuko.com,布布扣

bubuko.com,布布扣

滤波的结果

    物理意义bubuko.com,布布扣分别为坐标空间核和颜色空间核的带宽(bandwidth)/尺度,我说不清,看结果吧。

    3.4回首OpenCV实现

    第二步,重心计算公式

bubuko.com,布布扣

    我们是对以bubuko.com,布布扣为中心bubuko.com,布布扣为边长的区域求重心,其实本应该是:

bubuko.com,布布扣

    bubuko.com,布布扣用的是Uniform Kernel,也就是说bubuko.com,布布扣用的是Epanechnikov Kernel

bubuko.com,布布扣

    此时,距离筛选是由核函数实现的,因此我们是对图像中所有的数据点bubuko.com,布布扣计算重心,而不是落在bubuko.com,布布扣为中心,bubuko.com,布布扣为边长的区域内的点求重心。

    OpenCV的实现中, bubuko.com,布布扣并不是圆形的,为了循环时程序实现的方便,就用方形近似,但bubuko.com,布布扣是严格的球体。

    不过方形的也可以写成核函数形式:

bubuko.com,布布扣

bubuko.com,布布扣

    此外,Normal Kernel 的平滑效果固然好,但是计算量大,所以主要还是用Uniform Kernel。原文说大部分场合,Uniform Kernel和Normal Kernel就能取得很好的效果。

    4延伸

    不写了,已经写得太多了……这次就只挖个坑,日后再跳

    带宽选择

    图像分割的带宽一般是自己调整看效果,最优带宽也能也求出来?不过,我倒想看看自适应带宽。最优带宽值看原文吧。

    Mode prune

bubuko.com,布布扣

    对于鞍点等会产生一些虚假的模点,如上图,红色线上的点可能就跑到鞍点去了,去除办法:将模点的坐标稍作移动,再从移动后的位置继续爬,如果还能爬到原来模点的位置,那就保留,否则踢掉。恩,是你的跑不了,不是你的撒手就跑。

    与双边滤波的关联

    可以看做死板的mean shift 参见[4]的5.2.1

    与分水岭分割

    逆过程,从山峰开始找山谷,参见[4]的Sec5.2.1

    补充阅读

    图像分割加速:原文提到了一种加速方法,先随机选取一部分点作为先头部队,让它们去找模点,找的过程中就会开辟出很多到模点的道路,然后呢,让其余的点插到离它最近的路走过去就好了。此外,还有层级分割的方法,OpenCV的实现应该就是其中一种实现。

    A topological approach to hierarchical segmentation using mean shift. CVPR 2007

    目标跟踪:Kernel-Based Object Tracking, PAMI 03

bubuko.com,布布扣

mean shift 图像分割(二),布布扣,bubuko.com

mean shift 图像分割(二)

标签:mean shift   图像分割   opencv   

原文地址:http://blog.csdn.net/ttransposition/article/details/38514271

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!