图像分割 Image Segmentation

图像分割 Image Segmentation

图像分割是指将一幅图像划分成多个不重叠的区域或像素集合的过程。其目标是将图像中的每个像素分配到不同的类别或对象中,从而实现对图像的语义理解和区域识别。

图像分割在计算机视觉领域中具有广泛的应用,包括目标检测、图像分析、图像编辑和机器人视觉等。通过对图像进行分割,可以提取出感兴趣的目标区域,进而实现更高级别的图像分析和理解。

图像分割可以基于不同的标准和方法进行,下面列举几种常见的图像分割方法:

1、基于阈值:

这是最简单的图像分割方法之一,通过设定一个或多个阈值,将图像的像素根据其灰度值颜色信息分为不同的区域。

阈值法特别适用于目标和背景占据不同灰度级范围的图。

图像若只有目标和背景两大类,那么只需要选取一个阈值进行分割,此方法成为单阈值分割;但是如果图像中有多个目标需要提取,单一阈值的分割就会出现作物,在这种情况下就需要选取多个阈值将每个目标分隔开,这种分割方法相应的成为多阈值分割。下图即为对数字的一种阈值分割方法:
对数字的一种阈值分割方法
阀值分割方法的优缺点:
优点 :简单直观、计算效率高、可解释性强。
缺点 :对光照和噪声敏感、单一阈值限制、分割结果不精确。

2、基于边缘检测:

基于边缘检测的图像分割算法试图通过检测包含不同区域的边缘来解决分割问题。通常不同区域的边界上像素的灰度值变化比较剧烈,如果将图片从空间域通过傅里叶变换到频率域,边缘就对应着高频部分,这是一种非常简单的边缘检测算法。

边缘检测技术通常可以按照处理的技术分为串行边缘检测和并行边缘检测。串行边缘检测是要想确定当前像素点是否属于检测边缘上的一点,取决于先前像素的验证结果。并行边缘检测是一个像素点是否属于检测边缘高尚的一点取决于当前正在检测的像素点以及与该像素点的一些临近像素点。

最简单的边缘检测方法是并行微分算子法,它利用相邻区域的像素值不连续的性质,采用一阶或者二阶导数来检测边缘点。近年来还提出了基于曲面拟合的方法、基于边界曲线拟合的方法、基于反应-扩散方程的方法、串行边界查找、基于变形模型的方法。下图为不同边缘检测算法示例图:
边缘检测
边缘检测的优缺点:
优点:目标定位准确、提取图像结构信息、对图像灰度和光照变化鲁棒、计算效率较高。
缺点:噪声敏感、边缘连接问题、参数选择困难、无法处理细节和纹理。
(特别是最后两个缺点,边缘检测只能产生边缘点,而非完整意义上的图像分割过程。也就是说,在边缘点信息获取到之后还需要后续的处理或者其他相关算法相结合才能完成分割任务。)

在往后的研究当中,用于提取初始边缘点的自适应阈值选取、用于图像的层次分割的更大区域的选取以及如何确认重要边缘以去除假边缘将成为最主要的研究对象。

3、基于区域生长:

区域生长算法(region growing)是一种经典的基于区域的分割算法。首先在待分割区域选取一个种子生长点,将与种子有相同或相似性质的邻域像素合并到生长的区域中,并作为新的种子点重复以上步骤直至没有新的像素点加入则区域生长完成。该算法过程中的关键问题:
选择合适的生长点、确定相似性准则即生长准则、确定停止生长条件

区域生长法的优点是思路简单,能提供良好的边界信息和分割结果。但是该方法空间和时间的开销较大,耗费资源多且运行效率较低,并且需要人工设定种子点,对噪声的敏感可能会导致空洞和过分割现象。

算法步骤:

  1. 鼠标点击选取生长点
  2. 3*3 8-邻域生长
  3. 生长准则:图像与生长点灰度差小于阈值
  4. 生长点压入栈中,直到栈中没有元素时停止
I=imread('mountain.png');%读入图像

if isinteger(I)
    I=im2double(I);
end
I = rgb2gray(I);

figure 
imshow(I)
[M,N]=size(I);
[y,x]=getpts; %单击取点后,按enter结束
x1=round(x);
y1=round(y);
seed=I(x1,y1); %获取中心像素灰度值

J=zeros(M,N);
J(x1,y1)=1;

count=1; %待处理点个数
threshold=0.15;
while count>0
    count=0;
    for i=1:M %遍历整幅图像
    for j=1:N
        if J(i,j)==1 %点在“栈”内
        if (i-1)>1&(i+1)<M&(j-1)>1&(j+1)<N %3*3邻域在图像范围内
            for u=-1:1 %8-邻域生长
            for v=-1:1
                if J(i+u,j+v)==0&abs(I(i+u,j+v)-seed)<=threshold
                    J(i+u,j+v)=1;
                    count=count+1;  %记录此次新生长的点个数
                end
            end
            end
        end
        end
    end
    end
end

subplot(1,2,1),imshow(I);
title("original image")
subplot(1,2,2),imshow(J);
title("segmented image")

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、基于图割:

图形切割应用于计算机视觉领域用来有效的解决各种低级计算机视觉问题,例如图像平滑、立体应对问题、图像分割等等。此类方法把图像分割问题与图的最小割问题相关联,在计算机视觉的很多类似的问题中,最小能量方案对应解决方案的最大后验估计。

GrabCut是对Graph Cut的改进版,是迭代的Graph Cut。该算法利用了图像中的纹理(颜色)信息和边界(反差)信息,只要少量的用户交互操作即可得到比较好的分割结果。
优点:

  1. 只需要在目标外面画一个框,把目标框住,它就可以实现良好的分割效果;
    在这里插入图片描述

  2. 增加额外的用户交互(由用户指定一些像素属于目标),对实现的效果进行优化以得到更好的效果;
    在这里插入图片描述

  3. 它的Border Matting技术会使目标分割边界更加自然和完美。
    在这里插入图片描述
    在这里插入图片描述
    GrabCut同时存在这一些缺点:如果背景比较复杂或者背景和目标相似度很大,那分割的效果不太好;由于时迭代的GraphCut,所以速度较慢。

5、基于深度学习:

近年来,深度学习方法在图像分割任务上取得了巨大的成功。特别是基于卷积神经网络(CNN)的语义分割模型,如U-Net、Mask R-CNN和DeepLab等,能够对图像进行像素级别的精确分割。

基于深度学习的图像分割算法有很多,以下是一些常见的算法:

  1. FCN(Fully Convolutional Networks):FCN是深度学习图像分割的先驱之一,它将传统的全连接层替换为全卷积层,使得网络可以接受任意尺寸的输入图像并输出相同尺寸的分割结果。

  2. U-Net:U-Net是一种经典的图像分割网络,它由一个下采样(编码器)和一个上采样(解码器)部分组成。编码器用于提取图像的高级特征,解码器则将特征映射恢复到原始图像尺寸,以得到精细的分割结果。

  3. DeepLab:DeepLab是一种基于空洞卷积(Dilated Convolution)的图像分割算法。空洞卷积可以增加感受野的范围,帮助网络捕捉更大范围的上下文信息,并改善分割结果的细节。

  4. SegNet:SegNet是一种轻量级的图像分割网络,它通过使用反卷积层进行上采样,并结合池化层的索引来实现高分辨率的分割结果。

  5. Mask R-CNN:Mask R-CNN是一种基于区域提议网络(Region Proposal Network)的图像分割算法。它在目标检测的基础上增加了一个分割分支,用于生成每个检测到的目标的精确分割掩码。

  6. PSPNet(Pyramid Scene Parsing Network):PSPNet使用金字塔池化(Pyramid Pooling)来捕捉不同尺度的上下文信息,并将其与卷积特征进行融合,从而改善分割结果的细节和准确性。

这些算法只是深度学习图像分割领域的一小部分,还有其他许多算法和改进版本。选择适合特定任务和数据集的算法通常取决于具体需求和限制条件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值