Bootstrap

【MATLAB源码】机器视觉与图像识别技术(2)续—图像分割算法

第一篇文章: 【MATLAB源码】机器视觉与图像识别技术—视觉系统的构成(视频与图像格式转换代码及软件下载)

第二篇文章: 【MATLAB源码】机器视觉与图像识别技术(2)—图像分割基础

文章目录

一、图像分割概述

重述概念,图像分割是计算机视觉中的核心任务,旨在将图像划分为多个具有相似特征的区域。其目的是识别并分离图像中的重要目标,以便进一步分析和处理。常见的图像分割方法包括基于阈值的分割、边缘检测、区域生长、聚类算法、图论方法以及近年来广泛应用的深度学习方法。阈值分割利用像素强度差异,边缘检测识别图像中的边缘,区域生长从种子点扩展相似区域,聚类算法通过像素特征聚类实现分割,图论方法将图像建模为图进行划分,而深度学习方法如U-Net和FCN利用卷积神经网络实现精准分割。图像分割广泛应用于医学影像分析、自动驾驶、遥感图像处理和人脸识别等领域。
基本概念认识:
区域(region)——图像中相邻且具有相似性质的像素点所组成的集合。同一区域内的像素是相邻的,这意味着该区域是一个由像素构成的连通集。

连通(connectedness)——在连通集中,任意两个像素之间存在一条完全由该集合中的元素构成的路径。这意味着同一区域内的任意两个像素点之间至少存在一条连通路径。当前的连通性主要分为8连通和4连通两种形式,分别指示像素之间的邻接关系和连通区域的具体形态。

连通

目的是: 图像分割的目的是将图像空间划分为若干具有实际意义的区域,这些区域对应于图像中的不同物体目标。通过对分割结果的分析和描述,可以更好地理解图像中所包含的信息。

实质是: 图像分割的实质是对像素进行分类的过程,分类的依据可以建立在以下两个方面:(1) 像素间的相似性,即根据像素的相似特征将其归为同一类;(2) 非连续性,即通过检测像素间的差异将其分割开来。

二、传统分割算法介绍

传统的图像分割算法通常依赖于数字图像处理、拓扑学和数学等多方面的理论知识。这些方法尽管在图像分割任务中能够取得较为不错的效果,但相较于近年来迅速发展的深度学习技术,它们的表现稍微差劲一些。具体来说传统的图像分割算法主要包括以下几种:基于阈值的分割方法、阈值插值法、迭代阈值法,分水岭算法。这些方法各具特色,分别在不同的应用场景中展示出一定的优势。然而,在面对复杂多变的图像数据时,它们的分割效果往往不如基于深度学习的图像分割技术那般显著和稳定。

三、分割算法的介绍、应用及其特点

1.阈值分割法

现状:阈值法是一种经典的图像分割技术,因其实现简单、计算量较小以及性能稳定而广泛应用于图像分割任务中。作为最基本且应用最广泛的分割技术之一,阈值法在众多领域中发挥了重要作用。其核心思想是通过设定一个或多个阈值,将图像中的像素分为不同的类别,从而实现对图像的有效分割。由于其操作简便和效率高,阈值法在许多实际应用场景中都表现出了良好的性能。

经典阈值分割方法主要为:灰度直方图凹面分析法 最大类间方差法 最优阈值选取方法 迭代阈值选取方法
适用范围: 阈值法特别适用于那些目标和背景分别位于不同灰度级范围的图像。换句话说,当前景和背景之间具有明显的灰度对比时,这种方法尤为有效。通过设定一个或多个适当的阈值,可以将图像中的不同灰度区域清晰地分开,从而实现高效的目标提取和背景剔除。阈值法能够快速、准确地处理这些图像,使得在图像分割任务中,它仍然是一种极具实用性的技术。由于其对图像中显著的灰度差异敏感,这使得阈值法在处理具有强对比度的前景和背景图像时表现尤为优异。
阈值分割目的是:根据灰度级对像素集合进行划分,可以将图像分割成若干个子集,每个子集形成一个与实际场景中的物体或区域相对应的区域。在这种划分中,每个区域内部的像素具有一致的灰度属性,而相邻区域则呈现出明显的属性差异。这种方法通过基于灰度级的分割,使得图像中的每个区域都能够准确地反映出其在现实世界中的特征和位置,从而实现对图像内容的有效组织和识别。通过这种方式,可以将复杂图像中的各个区域清晰地分开,使得图像中的目标物体和背景区域的分界更加明确,有助于进一步的图像分析和处理。因此出现了单阈值分割和多阈值分割两种,下图是其分割原理的灰度直方图。
阈值分割
了解完了分割原理,我们就以典型的传统米粒计数所采取图像分割示例说明,由于拍摄的背景与米粒有着明显的灰度级数,则选择一个合适的阈值,如图所示,便可以把对象和背景区分开来。
米粒

应用优点:
  1. 实现简单:算法易于理解和编程实现。
  2. 计算效率高:能够快速处理图像分割任务。
  3. 适合灰度差异明显的图像:在前景和背景灰度差异明显的图像中效果较好。
  4. 实际应用广泛:在许多实际应用中能够快速、有效地进行图像分割。
不足之处:
  1. 对噪声敏感:图像噪声可能导致分割结果不准确,尤其在图像质量较差时。
  2. 灰度差异不明显时效果差:当前景和背景之间灰度差异不明显,或图像中存在多个相似灰度区域时,效果较差。
  3. 阈值选择困难:合适的阈值选择对于分割效果至关重要,但在实际应用中可能需要人工调试确定最优阈值。
  4. 光照变化影响:光照条件变化会影响图像灰度级,从而影响分割效果,导致鲁棒性较差。

总的来说,尽管阈值分割算法在处理灰度差异明显的图像时表现良好,但其对噪声和光照变化的敏感性以及处理复杂图像的局限性,使得它在复杂应用场景中的效果可能不尽如人意。在需要更高精度或处理复杂图像时,可能需要考虑结合其他图像分割技术或采用更为先进的方法。

2.阈值插值法

阈值插值法是一种改进的阈值分割方法,其步骤方法如下:首先将图像分解成系列子图,然后对每个子图计算一个局部阈值。通过对这些子图所得到的阈值进行插值,就可以得到对原图中每个像素进行分割所需要的合理阈值。对应每个像素的阈值合起来构成的一个曲面,叫作阈值曲面。
应用场景
(1)非均匀光照条件下的图像分割:在光照条件不均匀的情况下,阈值插值法能够有效地应对光照变化,提高分割精度。
(2)复杂背景中的前景提取:在背景复杂且灰度值变化较大的图像中,阈值插值法能够更准确地区分前景和背景。
(3)医疗影像处理:用于分割CT、MRI等医疗图像,能够更好地处理噪声和灰度差异不明显的问题。
(4)遥感影像分析:在处理卫星或无人机拍摄的遥感图像时,可以更好地应对不同区域的光照变化和复杂地形。
举个用插值法分割的例子,如下图所示,看看次算法的分割效果:


代码示例:

% 读取图像并转换为灰度图像
I = imread('D:\z\325.jpg');
a = rgb2gray(I);

% 设置子图大小
block_size = 50;
[rows, cols] = size(a);

% 调整图像尺寸,使其能被子图大小整除
rows = floor(rows / block_size) * block_size;
cols = floor(cols / block_size) * block_size;
a = a(1:rows, 1:cols);

% 初始化局部阈值矩阵
local_thresholds = zeros(rows / block_size, cols / block_size);

% 计算每个子图的局部阈值
for i = 1:block_size:rows
    for j = 1:block_size:cols
        block = a(i:i+block_size-1, j:j+block_size-1);
        local_thresholds(ceil(i/block_size), ceil(j/block_size)) = graythresh(block) * 255;
    end
end

% 插值生成阈值曲面
[X, Y] = meshgrid(1:block_size:cols, 1:block_size:rows);
[Xq, Yq] = meshgrid(1:cols, 1:rows);
threshold_surface = interp2(X, Y, local_thresholds, Xq, Yq, 'linear');

% 应用阈值曲面进行图像分割
segmented_image = a > threshold_surface;

% 显示结果
figure;
subplot(2, 2, 1);
imshow(I);
title('原始图');

subplot(2, 2, 2);
imshow(a);
title('原始灰度图像');

subplot(2, 2, 3);
imshow(threshold_surface, []);
title('阈值曲面');

subplot(2, 2, 4);
imshow(segmented_image);
title('分割结果');

应用优点:
1.光照鲁棒性:能够较好地应对光照条件变化,提高分割结果的鲁棒性。
2.局部适应性:通过局部阈值计算和插值,能够处理灰度变化较大的复杂图像。
3.噪声抑制:对图像噪声不太敏感,相较于简单阈值分割方法,能够提供更精确的分割结果。
不足之处:
1.计算复杂度高:由于需要计算多个局部阈值和进行插值,计算复杂度较高,处理时间较长。
2.子图划分敏感性:子图的划分方式可能影响最终的分割效果,划分不当可能导致分割结果不理想。
3.插值误差:阈值插值过程中可能引入误差,影响分割精度。
4.实现复杂性:算法实现相对复杂,需要较高的编程和算法知识。

总结: 阈值插值法是一种改进的阈值分割方法,能够在光照不均匀和背景复杂的情况下提供更准确的图像分割效果。尽管计算复杂度较高,但其在非均匀光照条件和复杂背景下的鲁棒性使其在许多实际应用中具有重要的价值。

3.迭代阈值法

概念:迭代阈值法是一种用于图像分割的自适应方法,其基本思想是利用程序自动搜寻出比较合适的阈值。该方法首先从初始阈值开始,将图像的像素分为前景和背景两类,然后计算这两类像素的平均灰度值。接下来,计算这两类平均灰度值的平均值,并将其作为新的阈值,继续分割图像。这个过程不断重复,直到新旧阈值之间的变化小于预设的容差值为止。最终得到的阈值就是用于图像分割的最佳阈值。迭代阈值法通过这种反复调整的过程,可以有效地处理灰度值分布不均匀的图像,从而获得更加准确的分割结果。这种方法简单而有效,在处理包含明显前景和背景的图像时表现尤为出色。
步骤
①首先选取原始图像灰度的极大和极小值的均值作为初始值T。
②根据阈值T将图像分割为前景和背景,分别求出两者的平均灰度值T0和T1 。
③求出新阈值T’=(T0+T1)/2;
④若T=T’,则所得即为阈值;否则转②,迭代计算 。
其效果和原理如下图所示:
效果图
迭代阈值法在图像处理领域有着广泛的应用场景,特别是在需要将图像分割为前景和背景两部分时。它常用于医学图像分析、遥感图像处理、工业检测和文档图像处理等领域。在医学图像分析中,该方法可以帮助提取和识别特定的组织或病变区域。在遥感图像处理中,迭代阈值法可以用于土地覆盖分类,帮助区分不同的地表特征。在工业检测中,它能够分割缺陷区域,以便进行质量控制和检测。在文档图像处理方面,迭代阈值法可以用来分割文本和背景,以提高光学字符识别(OCR)的准确性。

迭代阈值法的优点在于其自适应性强,不需要预先设置具体的阈值,能够自动调整以适应不同的图像特征。该方法简单易实现,对灰度值分布有较强的适应能力,能够在较短时间内收敛到稳定的阈值。此外,它在处理具有明显前景和背景对比的图像时,表现出色,能够有效地进行图像分割。

然而,迭代阈值法也存在一些不足之处。首先,它对噪声较为敏感,噪声可能导致阈值计算不稳定,进而影响分割效果。其次,对于灰度值分布较为复杂的图像,尤其是前景和背景灰度值重叠较多时,该方法的分割效果可能不理想。再者,迭代过程可能需要较多的计算资源,对于大规模图像处理来说,计算效率相对较低。最后,该方法依赖于初始阈值的选择,尽管通常选择全局平均值作为初始阈值,但在某些情况下,初始阈值的选择仍然会影响最终结果。

总之,迭代阈值法在处理简单且前景背景对比明显的图像时具有明显优势,但在面对复杂和噪声较多的图像时,可能需要结合其他方法或进行预处理,以获得更好的分割效果。

4.分水岭算法

概念: 分水岭阈值算法是一种用于图像分割的有效技术,旨在通过识别图像中的边界来划分不同的区域。该算法的基本思想源于地形学中的“分水岭”概念,即河流流域的分界线。如下图所示,将这一概念应用于图像处理时,算法将图像视为一个高程图,利用分水岭变换来寻找区域之间的分界线。
分水岭
算法步骤
1.图像预处理: 进行必要的图像平滑处理,以减少噪声对分水岭变换的影响。常见的预处理技术包括高斯滤波等。
2.梯度计算: 计算图像的梯度图,以突出显示图像中的边缘信息。梯度计算通常采用Sobel算子或其他边缘检测算子。
3.标记种子点: 在图像中选择一些种子点,通常这些种子点位于感兴趣的区域或物体的中心。这些点充当算法的起始点,用于确定区域的分界线。
4.分水岭变换: 模拟水从种子点向外扩展的过程,逐步填充图像的高程图。水流从不同的种子点开始,直到相遇形成分界线,这些分界线就是分水岭线。
5.后处理: 根据需要对结果进行后处理,如平滑边界、去除小区域等,以提高分割结果的质量。
示例效果图如下:效果图

应用领域: 分水岭阈值算法广泛应用于医学图像分析、遥感图像处理、生物图像分割等领域。它可以有效地帮助识别图像中的不同结构或区域,具体的把细胞和血管静脉清晰展现出来,在现代科技中,这类算法具有重要的实际意义。

应用优点: 分水岭算法能够自动检测图像中的边界,无需预先定义阈值,适应性强。它对于复杂图像和低对比度图像特别有效。
不足之处: 算法容易受到噪声的影响,可能会生成过多的分水岭线,从而导致过分割现象。处理高噪声图像时,可能需要额外的后处理步骤来清理结果。

总的来说就是:分水岭阈值算法是一种用于图像分割的自适应方法,其主要目标是识别图像中的分界线,模拟地形中的“分水岭”概念。算法将图像视为高程图,借助梯度计算突出边缘信息,通过标记种子点并模拟水流扩展过程,找到不同区域之间的分界线。这种方法能够自动检测图像边界,无需预先定义阈值,因此在处理复杂图像和低对比度图像时表现优异。然而,它对噪声敏感,可能会导致过分割现象,因此通常需要后处理步骤以优化结果。分水岭阈值算法在医学图像分析、遥感图像处理和生物图像分割等领域中具有广泛应用价值。

总结

本文主要针对基本阈值分割、阈值插值、迭代阈值以及分水岭等算法进行的初步了解及其应用,有很多笼统之处,基本意思是这样,运用过程中,具体算法的选择看其环境噪声影响,效果不一。希望能够帮助到大家(非常非常感谢你们的点赞收藏),后续算法将陆续撰写,让我想好一个思路,更详细,更易懂的方法给大家展现出来。(哈哈哈哈,不要忘了点赞哟,如果可以点个小关注呗,后续更新完机器视觉,我将给你们分享一些数学建模干货以及嵌入式方面的学习,同时也希望各位大佬指正,谢谢大家)。

;