SLIC超像素
来源:互联网 发布:汕头峡山淘宝拍摄 编辑:程序博客网 时间:2024/06/05 05:40
最近,做图像分割,了解到了SLIC,即简单线性迭代聚类。其实是将K-means的思想应用到了超像素的生成中。
http://ivrl.epfl.ch/supplementary_material/RK_SLICSuperpixels/index.html
介绍SLIC算法的论文,以及源码。
https://www.researchgate.net/publication/225069465_SLIC_Superpixels_Compared_to_State-of-the-Art_Superpixel_Methods
可在上面的链接下载论文
算法流程
首先,根据一定的步长,均匀散布种子点;为了不让种子点散落在分割的边界,所以求解其在3×3邻域内的最小梯度,然后重置种子点;同时,将每个像素点标记为-1,距离为无穷大;
之后,采用的是K-means的思想。对于每一个中,在2S×2S的区域内进行搜索,计算该点到该区域内每个像素点的距离,如果距离小于下一个种子点到它的距离,则更新该类的距离值和该点的标记值;
之后,不断循环迭代,直到误差很小,或者不再改变,则退出循环,由于会产生一些孤立的超像素,所以,文中还有后处理的部分,增强超像素的连接性。
由于本人的分割算法还在尝试的阶段,如果使用C++进行编程,则调试起来比较麻烦,所以,我将其C++代码,改写成python,而且使用了openCV,这样使用起来更为方便,快捷。
代码中显示算法流程的部分:
def DoSuperpixelSegmentation_ForGivenSuperpixelSize(self): self.STEP = int(float(self.superpixelsize)**(0.5) + 0.5) if(1): self.DoRGBtoLABConversion() else: for i in range(self.sz): self.m_lvec[0][i] = self.ubuff[0][i] >> 16 & 0xff self.m_avec[0][i] = self.ubuff[0][i] >> 8 & 0xff self.m_bvec[0][i] = self.ubuff[0][i] & 0xff perturbseeds = True if(perturbseeds): edgemag = self.DetectLabEdges() self.GetLABXYSeeds_ForGivenStepSize(perturbseeds, edgemag) self.PerformSuperpixelSLIC(edgemag) self.numlabels = self.kseedsl.shape[1] self.EnforceLabelConnectivity() ## 后处理,连接增强 for i in range(self.sz): self.klabel[0][i] = self.nlabel[0][i] ## 将旧的标号替换
完整代码,可在:
http://download.csdn.net/my
下载
运行结果:
阅读全文
0 0
- SLIC超像素分割
- SLIC超像素分割
- SLIC超像素
- SLIC算法 超像素 superpixel
- SLIC超像素生成算法
- SLIC超像素分割详解
- SLIC超像素分割详解
- SLIC超像素分割算法
- SLIC超像素(superpixel)算法
- VLFeat SLIC超像素分割(Cpp版)
- SLIC图像超像素分割算法解析
- SLIC超像素(superpixel)算法
- SLIC超像素(superpixel)算法
- VLFeat SLIC超像素分割(Cpp版)
- SLIC超像素(superpixel)算法
- SLIC图像超像素分割算法解析
- SLIC超像素分割详解(一):简介
- SLIC超像素分割详解(二):关键代码分析
- Linux 学习路程(4)安装g++
- AndroidStuido提示Git命令找不到问题解决
- 用java写出第一个窗口
- Java中BeanUtils插件的安装和基本使用
- c#在dataGridView中增加一列并赋值
- SLIC超像素
- layui学习笔记
- 栈的应用3--进制转换
- 信号和槽
- Linux内存管理之物理页面分配
- Spring Cache-缓存概述及使用
- 安装源代码版本php7
- 洛谷 P1522 牛的旅行 Cow Tours(Floyd, 并查集)
- js快速排序