Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91014
  • 博文数量: 25
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 221
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-08 16:03
个人简介

一万年太久,只争朝夕

文章分类
文章存档

2016年(4)

2015年(19)

2014年(2)

我的朋友

分类: Windows平台

2015-02-10 22:38:53

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倍。






阅读(12871) | 评论(0) | 转发(0) |
0

上一篇:nand方案分区修改方法

下一篇:裸眼3D概述

给主人留下些什么吧!~~