近日关于极化SAR数据超像素分割和密度峰值聚类CFSFDP的学习的记录与总结
一、超像素分割
在计算机视觉领域,图像分割(Segmentation)指的是将数字图像细分为多个图像子区域(像素的集合)(也被称作超像素)的过程。超像素由一系列位置相邻且颜色、亮度、纹理等特征相似的像素点组成的小区域。这些小区域大多保留了进一步进行图像分割的有效信息,且一般不会破坏图像中物体的边界信息。
图像分割的结果是图像上子区域的集合(这些子区域的全体覆盖了整个图像),或是从图像中提取的轮廓线的集合(例如边缘检测)。一个子区域中的每个像素在某种特性的度量下或是由计算得出的特性都是相似的,例如颜色、亮度、纹理。邻接区域在某种特性的度量下有很大的不同。
于我而言,主要学习simple linear iterative clustering (SLIC),简单的迭代聚类算法。这个算法和kmeans算法十分相似。对于给定样本,执行步骤如下:
kmeans分类:
1、给定聚类簇数k,初始化聚类中心。
2、计算样本和各聚类中心距离对样本进行分类。并记录分类完成后的各个类簇的数据的均值。
3、比较各个聚类新的均值和重新分类之前的均值,并将聚类的均值更新,重复迭代。直到新旧聚类均值差值小于某个阈值停止迭代。
超像素分类:
1、给定超像素尺寸pixelsize,初始化超像素中心,初始化超像素中心,将m×n个超像素中心大致均匀设置在原图上。例如对于M×N的影像数据,超像素总个数为:m×n;m为超像素中心行数:m=floor(M÷pixelsize);n为超像素中心列数:n=floor(N÷pixelsize);(示意草图:紫色点为超像素中心,当然实际上肯定要密集的多)(目前我认为一定要向下取整,向上取整的话会是计算变得复杂,容易出错)
2、移动超像素中心到邻域3×3梯度最小的位置,可以有效避免超像素中心出于噪声点或者边界位置。
3、遍历每个超像素中心,在超像素中心邻域2pixelsize×2pixelsize的范围内进行扫描,判断邻域内各个数据点相对超像素中心的距离,全部扫描完毕后,对于每一个数据点,将其相对周围超像素中心的距离进行比较,然后将数据点归到最近的超像素中心。
4、计算划归到各个超像素中心的数据点的均值,比较前后均值之差,小于某个阈值就停止迭代。
在我看来,超像素分割的意义在于归化相似的数据,减小数据量,提高程序的效率,使得某些算法得以实现。就比如:
二、基于密度峰值的快速聚类算法(CFSFDP)
CFSFDP算法进行聚类时一般分为以下步骤。
一、确定类中心。
CFSFDP算法进行聚类时首先需要确定类的中心点,其假设簇的聚类中心的局部密度高于其周围数据点的局部密度,并且聚类中心与那些局部密度更高的数据点之间的距离较大。对于一个给定的数据集,CFSFDP算法需要为每个数据点计算两个量化值:数据点的局部密度ρi
和它与局部密度比其高的数据点之间的距离δi
。数据点xi
的局部密度ρi
有两种计算方式:基于截断核的计算方式和基于高斯核的计算方式。使用截断核计算局部密度pl的公式为:
ρi
=:∑χ(δij
-dc
)
其中,
χ
(
x
)
=
{
1
,
x
<
=
0
0
,
x
>
0
χ(x)=\left\{ \begin{array}{c} 1,x<=0 \\ 0 , x>0\end{array}\right.
χ(x)={1,x<=00,x>0,δij
为数据点之间的距离,dc
为截断距离即距离阈值。使用该计算方式得到的数据点的局部密度ρi
通常等于该数据点周围与之距离小于dc
的数据点的个数。因此,可以得出这样的结论:与数据点xi
的距离小于dc
的点越多,得到的局部密度ρi
就越大。使用高斯核计算局部密度ρi
的公式为:
ρi
=:∑e-(δij
/dc
)2
其中,δij
为数据点之间的距离,j为i的值域,dc
为截断距离即距离阈值。使用该计算方式得到的局部密度ρi
仍然满足与数据点xi
的距离小于dc
的点越多,局部密度ρi
就越大的结论。使用截断核计算局部密度和使用高斯核计算局部密度这两种计算方式的区别在于使用截断核计算得到的结果为离散值,而使用高斯核计算得到的结果为连续值。因此,相对而言,使用高斯核计算得到的数据点具有相同的局部密度的概率比使用截断核计算得到的数据点具有相同的局部密度的概率要小,使用高斯核计算局部密度ρi
更方便比较数据点局部密度之间的大小关系。(在数据计算起来很复杂时可以考虑第一种方法更为简单)。数据点之间的距离δi
。是通过计算数据点zi与比该数据点局部密度高的其他数据点的距离得到的,数据点之间的距离院可以根据公式
δ
i
=
{
m
i
n
(
δ
i
j
)
,
存
在
ρ
j
>
ρ
i
m
a
x
(
δ
i
j
)
,
任
意
ρ
j
<
=
ρ
i
δi=\left\{ \begin{array}{c} min(δij),存在ρj>ρi\\ max(δij) , 任意ρj<=ρi\end{array}\right.
δi={min(δij),存在ρj>ρimax(δij),任意ρj<=ρi
计算得到。一般而言,数据点之间的距离δi
为数据点i与比该数据点局部密度ρi
更高的其他数据点的所有距离中的最小值,但对于局部密度ρi
最高的点,数据点之间的距离δi
为其他数据点与之距离的最大值。
个人理解
在影像自动聚类过程中,我们希望达到的目标是图像自动分割成不同的类。那么判断最后分类结果的好坏程度的指标是什么呢?无非就是两个标准:(1)对于划分到同一个类的数据,我们希望这个类内有足够多的数据和他相似度够好。数量不够或是相似度不够好都不行。例如一个类内数据点相似度都很好但数量很少,这既是孤立点,噪声,又或者数量够多但相似度不够好,结果就有很多杂质,区分度不够。(2)对于分到不同类的数据,我们希望类间数据的区分度够大。如果两种不同的类之间区分度不够大,那么这两类本可以合并到一类,作为分类结果来说也是一种很不理想的结果。
那么就提出两个指标来作为选取类中心的标准:局部密度ρi
和表征距离δi
,局部密度用来衡量类内是否有足够多的数据点和他相似,表征距离δi
用来衡量两个类之间是否有足够的区分度。作为类中心,他的局部密度一定足够大,表征距离一定也足够大。
两种数据怎么求。局部密度计算聚类中心和他相似的数据的个数,判断相似度用截断距离dc
来表示,当数据之间差距小于dc
则判断两个数据之间相似,否则不相似。通过局部密度来对数据进行初步划分。局部密度最大的一定是初步划分出来的最大的类。表征距离δi
i既然是来衡量各个类之间的区分度,那在初步划分的类内,各数据点的表征距离一定很小,不同类间表征距离一定很大。类内向局部密度较大的数据点量距,不同类之间向局部密度最大的量距。
取聚类中心的方法可以人工选取,我采用的方法很简单,输入想要分类的个数k,从局部密度最大的里面排序选取10k个数据点,再从这10k个数据点里取k个表征距离最大的数据点作为聚类中心。以此来作为聚类中心
结果:
所选区域:
超像素分类结果:
聚类结果:
二、将剩余数据分类
将剩余的数据分到局部密度比其高且距离最近的聚类里。只需一次,无需迭代。
三、总结
CFSFDP聚类算法在执行过程中最耗时的莫过于将各点相对于全部数据的距离计算出来来求局部密度的步骤,而超像素分类恰好解决了这一问题,在保证合理的情况下,适当增加超像素的尺寸可以有效减少CFSFDP的运算时间,就在计算各数据点相对各点距离一处就可缩短时间为1/pixelsize4也就是说,当pixelsize取三可以缩减时间为大概1/81收益相当可观