早期:

阈值法,大于阈值1,小于则0.阈值的选取重要;也可以局部阈值,图像进行划分成多个区域,多个阈值。

基于特定理论

1.均值移动
核心思想:找到概率密度梯度为零的采样点,并以此作为特征空间聚类的模式点 ------------梯度为0的位置是变化比较剧烈的位置

引入:类似的思路
估计密度最大的位置:

  1. 首先是随机选取一个中心点 ;
  2. 然后计算该中心点对应的圆的邻域内的点的均值点;
  3. 然后将中心点改成此时的均值点上,继续以这个中心点为圆心,重复第2步,直到中心点和均值点重合。
    在这个迭代的过程中,就可以逐步找到密度最大的位置。(不一定可以找到,可能只能收敛到局部密度最大的位置。)

非参数的密度估计:

不通过模型和参数,直接通过局部邻域样本的密度、个数、强度等来估计密度。

参数化的密度估计:

假设点的分布符合某个模型如高斯模型。则估算模型中对应的参数。

java栅格切图_java栅格切图

参数化和非参数化的选择:
如果目前已知的样本可以很好反映数据的分布情况,则非参数化比较好
如果采样的样本无法直接反映,则参数化

如果假设的分布确实符合真实分布,则参数化
如果设定的分布不符合,即使估计了,但是仍无法反映。则试试非参。

均值移动采用非参数化-基于核密度梯度的估计

核函数密度:落在核的局部邻域内值的平均。

java栅格切图_邻域_02

举例三种核函数:3是高斯核函数

java栅格切图_邻域_03

核密度梯度

java栅格切图_邻域_04

java栅格切图_卷积_05


可以得到

java栅格切图_java栅格切图_06

java栅格切图_参数化_07

找核密度加权的均值,不断移动,最终找到密度最大的位置(可以设定阈值)。
算法流程: (1)计算m(x); x指的是上一个位置的均值位置。
(2)如果|| m(x) - x||小于一个给定的阈值,结束循环;否则,将my(x)赋给x,继续执行(1)。

接下来就是利用上述的均值移动方法进行聚类,来实现图像分割:

流程

首先根据均值移动的方法得到N个收敛的中心点;
第二步,把上述的收敛点距离小于0.5的点合并在一个簇里,得到m个簇。
第三步,整个图像中,在同一个簇内的就划分在同一个类。
最后一步就是去除掉较小的簇,可能是异常点。或者融合进去附近的簇。

有点像K-means,K-means开始是随机选取K个点,然后离K个点最近的属于同一类,然后计算各个类的中心,再重新计算中心点;再重复上述分类,再计算,直到中心点不再移动。

深度学习方法

FCN 全卷积

先卷积下采样,在卷积上采样。

java栅格切图_邻域_08


上采样的方法:卷积核大于特征图,绿色的代表卷积后的图像。

java栅格切图_卷积_09

作者发现,如果一味卷积之后,后面上采样的时候,其实信息很多丢失了,所以采用了skip。会把后面的几层的特征图也加进去最后的结果进行上采样。

java栅格切图_参数化_10

下面就依次是加了后几层的效果可以看出,加了之后分割效果更好了。

java栅格切图_java栅格切图_11

SegNet

采用了编码和解码的结构,特殊的点在下和上采样,其下采样(最大池化)的时候会记录对应的索引,然后在上采样的时候返回到对应的索引。

java栅格切图_卷积_12


java栅格切图_参数化_13


下面是FCN和SegNet的对比:

java栅格切图_邻域_14

Deeplab

先使用卷积神经网络,再使用条件随机场CRF,最后得到分割图像。

java栅格切图_卷积_15

值得注意的点:

卷积方式使得信息减少,右边的卷积的间隔变小,虽然保存了更多的信息,但是卷积的感受野变小了。

java栅格切图_java栅格切图_16


解决方案是:空洞卷积。

java栅格切图_java栅格切图_17