早期:
阈值法,大于阈值1,小于则0.阈值的选取重要;也可以局部阈值,图像进行划分成多个区域,多个阈值。
基于特定理论
1.均值移动
核心思想:找到概率密度梯度为零的采样点,并以此作为特征空间聚类的模式点 ------------梯度为0的位置是变化比较剧烈的位置
引入:类似的思路
估计密度最大的位置:
- 首先是随机选取一个中心点 ;
- 然后计算该中心点对应的圆的邻域内的点的均值点;
- 然后将中心点改成此时的均值点上,继续以这个中心点为圆心,重复第2步,直到中心点和均值点重合。
在这个迭代的过程中,就可以逐步找到密度最大的位置。(不一定可以找到,可能只能收敛到局部密度最大的位置。)
非参数的密度估计:
不通过模型和参数,直接通过局部邻域样本的密度、个数、强度等来估计密度。
参数化的密度估计:
假设点的分布符合某个模型如高斯模型。则估算模型中对应的参数。
参数化和非参数化的选择:
如果目前已知的样本可以很好反映数据的分布情况,则非参数化比较好
如果采样的样本无法直接反映,则参数化
如果假设的分布确实符合真实分布,则参数化
如果设定的分布不符合,即使估计了,但是仍无法反映。则试试非参。
均值移动采用非参数化-基于核密度梯度的估计
核函数密度:落在核的局部邻域内值的平均。
举例三种核函数:3是高斯核函数
核密度梯度
可以得到
找核密度加权的均值,不断移动,最终找到密度最大的位置(可以设定阈值)。
算法流程: (1)计算m(x); x指的是上一个位置的均值位置。
(2)如果|| m(x) - x||小于一个给定的阈值,结束循环;否则,将my(x)赋给x,继续执行(1)。
接下来就是利用上述的均值移动方法进行聚类,来实现图像分割:
流程
首先根据均值移动的方法得到N个收敛的中心点;
第二步,把上述的收敛点距离小于0.5的点合并在一个簇里,得到m个簇。
第三步,整个图像中,在同一个簇内的就划分在同一个类。
最后一步就是去除掉较小的簇,可能是异常点。或者融合进去附近的簇。
有点像K-means,K-means开始是随机选取K个点,然后离K个点最近的属于同一类,然后计算各个类的中心,再重新计算中心点;再重复上述分类,再计算,直到中心点不再移动。
深度学习方法
FCN 全卷积
先卷积下采样,在卷积上采样。
上采样的方法:卷积核大于特征图,绿色的代表卷积后的图像。
作者发现,如果一味卷积之后,后面上采样的时候,其实信息很多丢失了,所以采用了skip。会把后面的几层的特征图也加进去最后的结果进行上采样。
下面就依次是加了后几层的效果可以看出,加了之后分割效果更好了。
SegNet
采用了编码和解码的结构,特殊的点在下和上采样,其下采样(最大池化)的时候会记录对应的索引,然后在上采样的时候返回到对应的索引。
下面是FCN和SegNet的对比:
Deeplab
先使用卷积神经网络,再使用条件随机场CRF,最后得到分割图像。
值得注意的点:
卷积方式使得信息减少,右边的卷积的间隔变小,虽然保存了更多的信息,但是卷积的感受野变小了。
解决方案是:空洞卷积。