SLIC图像超像素分割算法解析

转载自http://blog.chinaunix.net/uid-29431466-id-4831314.html


1 概述

SLIC 即simple linear iterative clustering。分簇的依据是像素之间的颜色相似性与邻近性。其中颜色相
似性的度量因子是lab 颜色空间的L1 范数,颜色邻近性的度量因子是图像二维坐标空间xy。因而综合的度量因子
是[labxy]五维空间。下面所述的距离度量因子由下式计算得到:


对输入的长宽分别为Width 和Height 的二维图像,分别以X 方向xstep 个像素和Y
方向ystep 个像素初始化簇块,得到BlockWidth*BlockHeight 个尺寸为xstep*ystep 的簇,其中BlockWidth =
Width/xstep,BlockHeight=Height/ystep。定义每个xstep*ystep 块内的中心坐标点为簇心,即种子坐标。各个
物理量的描述如下图所示:


320*160 分辨率的图像分割初始化为20*10 个大小为16*16 的簇

算法思路是对种子坐标为中心的2S*2S(或者3S*3S,S 表示簇尺寸)范围内所有像素,求这些像
素到种子坐标像素的距离度量因子dist,相邻簇之间的重叠区域像素按照距离最小的种子编号(BlockIndex)标记。
整幅图像扫描一遍之后,每个像素点都对应一个BlockIndex,相同BlockIndex 的像素属于同一个簇。接下来进入
迭代,对上一次划分的每一个簇,求出每一个簇的labxy 均值,作为新的簇心(种子),按照上述规则重新标记,
当迭代一定次数之后,分簇结果基本不发生改变即划分完成,迭代结束。
迭代部分算法描述如下:
for Iter = 0:iter
    初始化Width*Height 大小的距离度量因子矩阵。
        for BlockIndex=0:num //num = BlockWidth * BlockHeight
            对每个簇心周围2S*2S 范围内的像素分别与当前簇心五维向量求距离度量因子,并将此度量因子与初
            始值比较,若比初始值小,则更新当前的度量因子,并将当前处理像素标记更新为当前簇号 Label[i*Width+j] = BlockIndex; 
       end //根据上述更新的簇心标记Label矩阵计算新的簇心(种子坐标) 
       for Block = 0 :num 
           for i=0:Height-1 
               for j=0:Width-1 
                   对图像从头到尾扫描一遍,重新计算簇心坐标。根据上一步已经更新的标记。将同样标记的像素的labxy五维向量分别累加起来,                       然后根据各个标记的数量求出均值,便可以计算出新的总共num个簇心的五维向量。
               end 
           end 
       end
 end
    这便是原始算法的实现方法。上述实现方法精度高,问题在于每一轮迭代必须对整幅图像进行操作,遍历整幅图像对于实时视频处理来说,带宽太高,因此考虑将上述实现方法改为每次处理3*BlockWidth行的方式,可将带宽降低BlockHeight/3倍。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值