数字图像处理笔记——图像分割(Image Segmentation)

图像分割

区域生长

图像第一种算法我们称为区域生长(region growing)

其主要思路就是从原始图像中选取几个重要的点,然后从这些点分别往外扩展,如果周围的像素与其的像素差小于某个阈值,那么将其置1(白色),并继续从这个点向外延展,直到不满足条件,其他点置0(黑色)。在matlab中我们可以用grayconnected这个函数来实现这个功能

如下图是利用这个算法,在图像中随便选取一点后得到的结果。从图中可见这个分割算法结果并不是很理想,实际上这个算法对点的选取要求很高,如果点没选好那么结果将会很差

区域分割合并

除了上一中算法我们还可以利用四叉树的方法对图像进行分割,之后分别对四个区域进行某种条件的判决,如果不满足该条件,则将这块区域进行更进一步的划分,直到算法收敛。之后我们可以将图像中仍不满足条件的块置0,其他置1

聚类

第三种算法叫做k-means聚类算法,意思是我们将每个像素放在色彩空间来看并将其分为不同的类

大致算法思路是选取几个重要的点,之后判断各个点在色彩空间中到这些点的距离,根据距离来对他们进行分类,之后更新这个中心点直到算法收敛。我们可以看出这个算法中对初始点的选取也是非常重要,在实际操作中我们往往是多次随机取点,然后选取效果最好的一次,这里的效果是利用类之内的方差来衡量

如下图的例子我们可以利用以上算法来对图像中的点进行自动分类

超像素

我们可以从上图的结果看到图像对颜色的划分确实效果不错,但是在空间上却散落成了很多小的块。这是由于在该算法中没有利用空间相关性。为了解决这个问题,我们有一个改良的算法叫做超像素,超像素是一块拥有相近颜色的区域块。

具体该算法如下:现在图像中等间距取一定数量的点,这些点的数目与你想要划分的块相关,并将这些点进行微调,之后对一定区域内的像素进行“距离”判断,之后类似k-means算法进行步骤的重复即可。

这个算法中的“距离”就是其与k-means算法不同的地方,这个距离D不仅考虑了在色彩空间上的距离,还考虑了在空域上的距离。其中的c与s可以用来调整空域距离与色彩空间距离占得比重来对二者进行权衡

以下是利用超像素分割的结果

图割算法

第四个分割算法叫图割算法。其主要是能够对图像进行前景和背景的分割

其主要思路是设置两个终端(前景与后景),然后将像素之间与像素与终端之间的连边赋予权重。然后找到一条权重和最小的分割方法将图像分为前景和后景

那么这些边的权重应该如何选取呢?我们先看相邻像素之间的权重,我们可以直观的理解为如果像素的值相近,那么代表这个地方不是边界,那么切割的代价非常高;如果像素的值相差非常远,那么这个位置可以理解为存在边界,切割代价就很低

那么像素与终端之间的权重呢?我们可以通过初始化选取处在前景的像素与处在后景的像素,再来判断图中任意一个像素点位于前景/后景的概率值为多少,根据这个概率值我们可以求出对应边的权重

我们在matlab中也存在工具箱来实现这个算法,我们可以看到matlab中这个算法实际上是基于超像素而不是像素来进行图割的,因此很大程度上该算法结果如何很大程度上取决于超像素对边界划分的结果,下图就是一个超像素划分不是十分理想的例子。当然这样做的好处就是速度较快,我们也可以让图割算法基于像素来做来获得更好的效果

猜你喜欢

转载自blog.csdn.net/shanwenkang/article/details/84894356