![d2a45202d1dc2439c4f8b308c096c0a1.png](https://i-blog.csdnimg.cn/blog_migrate/6830def5a448bc7087989469a3e0df90.jpeg)
2003 年,任晓峰教授在图像分割技术层面上提出了超像素分割的这一概念,是指具有相似纹理、颜色、亮度等特征的相邻像素构成的有一定视觉意义的不规则像素块。它利用像素之间特征的相似性将像素分组,用少量的超像素代替大量的像素来表达图片特征,很大程度上降低了图像后处理的复杂度,所以通常作为分割算法的预处理步骤。已经证明在深度估算(depth estimation),图像分割(image segmentation),骨架提取(skeletonization),人体模型估计(body modelestimation),目标定位(object localization)等等领域十分有效。常见的超像素分割方法包括: Graph-based、NCut、Turbopixel、Quick-shift、 Graph-cut a、Graph-cut b以及SLIC。
其中SLIC(simple linear iterativeclustering,简单线性迭代聚类)算法是2012年提出,是业内使用最多的一种超像素图像分割算法,下面是它的伪代码:
![d4636cdacd764fe681f7324ebf2c713e.png](https://i-blog.csdnimg.cn/blog_migrate/749816bcba0c286eaadc906caf52df32.jpeg)
开源代码有c++/python版本,也有matlab接口,还有gpu加速版本
算法基于是k-means思路,将图像从RGB颜色空间转换到CIE-Lab颜色空间,对应每个像素的(L,a,b)颜色值和(x,y)坐标组成一个5维向量V[L,a,b,x,y], 然后对5维特征向量构造距离度量标准,对图像像素进行局部聚类的过程。两个像素的相似性即可由它们的向量距离来度量,距离越大,相似性越小。
算法首先生成K个种子点,然后在每个种子点的周围空间里搜索距离该种子点最近的若干像素,将他们归为与该种子点一类,直到所有像素点都归类完毕。然后计算这K个超像素里所有像素点的平均向量值,重新得到K个聚类中心,然后再以这K个中心去搜索其周围与其最为相似的若干像素,所有像素都归类完后重新得到K个超像素,更新聚类中心,再次迭代,如此反复直到收敛。怎么样,是不是感觉很像K-means聚类算法。 该算法接受一个参数K,用于指定生成的超像素数目。设原图有N个像素,则分割后每块超像素大致有N/K个像素,每块超像素的边长大致为S=[N/K]^0.5,开始我们每隔S个像素取一个聚类中心,然后以这个聚类中心的周围2S*2S为其搜索空间,与其最为相似的若干点即在此空间中搜寻。这里有一个问题,为了避免所选的聚类中心是边缘和噪声这样的不合理点,算法做了改进, 在3*3的窗口中将聚类中心移动到梯度最小的区域,梯度定义为:
G(x,y)=[V(x+1,y)-V(x-1,y)]^2+[V(x,y+1)-V(x,y-1)]^2
这样就可以避免上面所说的情况。 因为L,a,b在CIE-Lab颜色空间,L,a,b的大小有限制,而图像尺寸则没有限制,如果图片的尺寸比较大,会造成衡量向量距离时空间距离(x,y)的影响过大,所以需要调制空间距离(x,y)的影响,所以需要对x,y进行normalize。改进向量距离的度量如下:
d_lab=[(Lk-Li)^2+(ak-ai)^2+(bk-bi)^2]^0.5
d_xy=[(Xi-Xk)^2+(Yk-Yi)^2]^0.5
Ds=d_lab+(m/S)*d_xy
m用来调整d_xy的权值,一般为1-20,在算法中设置为10。 最后可能出现一些小的区域d被标记为归属某一块超像素但却与这块超像素没有连接,这就需要把这块小区域d重新归类为与这块小区域d连接的最大的超像素中去,以保证每块超像素的完整。 SLIC优点如下:
- 生成的超像素如同细胞一般紧凑整齐,邻域特征比较容易表达。这样基于像素的方法可以比较容易的改造为基于超像素的方法。
- 不仅可以分割彩色图,也可以兼容分割灰度图。
- 需要设置的参数非常少,默认情况下只需要设置一个预分割的超像素的数量。
- 相比其他的超像素分割方法,SLIC在运行速度、生成超像素的紧凑度、轮廓保持方面都比较理想。
与超像素slic算法类似的解决方案:
![568fb932419087cec7acf27df43155ca.png](https://i-blog.csdnimg.cn/blog_migrate/d50d4cc01937937f233cf4b80c4748a0.jpeg)
- graphsegment(gs04)图分割:
- 论文:《Efficient Graph-Based Image Segmentation》
- 作者:P. Felzenszwalb, D. Huttenlocher
- 发布:International Journal of Computer Vision, Vol. 59, No. 2, September 2004
- 介绍:Graph-Based Segmentation是经典的图像分割算法,其作者Felzenszwalb也是提出DPM(Deformable Parts Model)算法的大牛。Graph-Based Segmentation算法是基于图的贪心聚类算法,实现简单,速度比较快,精度也还行。不过,目前直接用它做分割的应该比较少,很多算法用它作垫脚石,比如Object Propose的开山之作《Segmentation as Selective Search for Object Recognition》就用它来产生过分割(over segmentation)。
- 评价:图分割从原理,从规整性,从结果来看都不能算作超元素。
- Ncut(nc05)
- 论文:Spectral segmentation with multiscale graph decomposition * 作者:T. Cour, F. Benezit, and J. Shi..
- 发布:IEEE Computer Vision and Pattern Recognition (CVPR) 2005, 2005.
- Turbopixel(tp09)
- 论文:《Turbopixels: Fast superpixels using geometric flows》
- 作者:A.Levinshtein, A.Stere, K.Kutulakos, D.Fleet, S.Dickinson, and K.Siddiqi.
- 发布:IEEETransactions on Pattern Analysis and Machine Intelligence (PAMI),2009.
- Quickshift(qs09)
- 论文:Quick shift and kernel methods for mode seeking
- 作者:A. Vedaldi and S. Soatto.
- 发布:European Conference on Computer Vision (ECCV), 2008.
- 介绍:Quickshift算法是一种类似于mean shift算法的快速模式搜索算法,通过将初始数据向量移动到具有更高能级的最近领域模态实现模式搜索。
请看前文:
飘哥:学习图像场景解析的理论和应用(二)场景解析的经典算法分析之gPb-OWT-UCMzhuanlan.zhihu.com![7a84b5e7af59d197e6db84640727e267.png](https://i-blog.csdnimg.cn/blog_migrate/0e57304124a5635b938ad1b2caa76657.jpeg)
![c881da87865827f8c37121a0b3e81af9.png](https://i-blog.csdnimg.cn/blog_migrate/c00dd6acbd4c13e06d7c51580a0e8154.jpeg)