图像分割 Image Segmentation

慈云数据 8个月前 (03-13) 技术支持 88 0

图像分割 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)1&(j+1)
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon