超像素分割(Slic算法)——个人梳理

一、使用背景

        我在进行乳腺癌图像识别的学校项目中,参考了山东大学的硕士论文,并希望加以简化复现,此论文会在文末附上。项目要求我们需要对乳腺癌图片进行分类(无肿瘤,良性肿瘤,恶性肿瘤),参照论文所说,我们需要将乳腺图片分割成以超像素为单位的像素块,并以每一个超像素块为单位进行后续操作,在此我整理一下我在使用slic算法来进行超像素分割的一些经验感受,以便后来复盘回溯。

二、Slic算法

(1)基础知识

1、此代码中涉及到了一个与RGB不同的颜色模型,LAB------Lab颜色模型是由CIE(国际照明委员会)制定的一种色彩模式。自然界中任何一点色都可以在Lab空间中表达出来,它的色彩空间比RGB空间还要大。其中L表示亮度,其中的取值范围是[0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是[127,-128];b表示从黄色到蓝色的范围,取值范围是[127,-128]。

2、超像素:以个人理解是一群具有相似特征(颜色,纹理,有较近的距离)的像素点,聚合成一起形成一个像素块,将整张图片进行分割,以便后期使用。

(2)算法以及伪代码解析

/∗ Initialization ∗/

Initialize cluster centers Ck = [lk , ak , bk , xk , yk ]T 
by sampling pixels at regular grid steps S.
Move cluster centers to the lowest gradient position in a 3 × 3 neighborhood.
Set label l(i) = −1 for each pixel i. Set distance d(i) = ∞ for each pixel i.

repeat
/∗ Assignment ∗/
for each cluster center Ck do
    for each pixel i in a 2S × 2S region around Ck do
        Compute the distance D between Ck and i.
        if D < d(i) then
            set d(i) = D
            set l(i) = k
        end if
    end for
end for


/∗ Update ∗/

Compute new cluster centers. Compute residual error E.
until E ≤ threshold

1、首先在需要处理的图片上选取聚类中心,每两个相邻初始聚类中心的距离近似S。其中需要自己确定需要的超像素数目K,被处理图片的所有像素点为N,S=\sqrt{N/K}

2、移动初始聚类中心到以它为中心的3×3范围中梯度最小的地方,成为新的聚类中心。

3、以下开始循环,为每一个聚类中心周围(搜索范围在2S×2S,但是最终超像素范围是S×S)中进行搜索遍历,并打上标签(例如以第一个超像素为中心搜索出来的点都包含在第一个超像素中)

4、进行分类条件距离如下图所示

超像素分割(Slic算法)——个人梳理_第1张图片

在这里插入图片描述

       d_lab是当前聚类中心点与当前遍历像素的色彩距离,d_xy是当前聚类中心点与当前遍历像素空间距离 ,D‘是最终判断当前遍历像素能否和当前聚类中心打上相同标签的距离(D’与当前像素到前一个聚类中心的距离作比较,若是小于则当前像素标签更新到现在的超像素中,否则仍属于上一个超像素范围)。其中m决定超像素的紧凑程度,m越小,超像素越贴合图像边缘,m越大,超像素越趋近于独立的四边形,一般m的取值范围在[1,40]之间。

5、在一次遍历后,还需要重新计算聚类中心,选取当前超像素块中D'值最小的像素点作为新的聚类中心点。

6、迭代4,5步,直到最后聚类中心趋近于不变,最后停止(一般迭代10就可以获得较好效果)。

7、在最后,有较小的超像素,就会合并到周围较大的超像素中去。

(3)个人思考

1、为什么超像素是十分不规整的,并且最后得到的分割后的图片产生的超像素个数会与当初设定的个数K有出入?

答:因为在每次迭代过程中,像素被打成属于某个超像素标签是基于D’的大小,一个像素和很可能被许多超像素遍历到,但只能属于一个超像素,即进行比较取D‘较小的划分,那么综合下来就是不规整的了。

2、在分割出超像素后,需要如何去进行下一步操作呢?

答:如果需要对超像素进行颜色特征提取,纹理特征提取等都需要逐像素进行,在算法的实现过程中会明确得到一个超像素中有哪些像素,比如每一个像素都会有l,a,b等属性,就可以计算一个超像素的颜色特征。

三、代码与运行结果

代码:SLIC算法分割超像素原理及Python实现 | 卡瓦邦噶!

图片来源:数据集|阿里·法米 (cu.edu.eg)

实现效果:

超像素分割(Slic算法)——个人梳理_第2张图片

                                                   未经处理的恶性肿瘤图片                       

超像素分割(Slic算法)——个人梳理_第3张图片

                                               k=200,m=30的经slic分割后的图片

欢迎大家指正讨论,本人不胜感激!!!!!

 参考论文:[1]叶碧. 乳腺超声图像处理技术的研究与应用[D].山东大学,2016.

                      乳腺超声图像处理技术的研究与应用 - 中国知网 (cnki.net)

你可能感兴趣的:(python,算法,图像处理,聚类)