图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像索赋予相同的编号。
其中,基于阈值的图像分割技术是最经典最流行的分割算法,也是最简单的一种图像分割方法。这种方法的关键在于寻找适当的灰度阈值,往往是通过图像灰度直方图来获取。这不仅可以极大地压缩数据量,还大大地简化了图像信息的分析、处理步骤。阈值分割技术特别适合用于目标和背景处于不同灰度级中的图像,由于其计算简单,所以得到广泛的应用。
本书基于面阵相机系统采集到的图片在进行处理时面临的处理速度要求和数据量大等实际问题,结合阈值分割技术的优点,通过使用MATLAB工具及实例,详细介绍了图像阈值分割处理的具体操作。
1.Otsu阈值分割
Otsu法是1979年由日本大津[21]提出的。该方法在类间方差最大的情况下是最佳的,即统计鉴别分析中所用的度量,它的基本原理是以最佳阈值将图像的灰度图分割成两部分,使得每一部分之间的方差最大。Otsu方法有一个重要的特性,就是它完全以在一幅图像的直方图上执行计算为基础,而直方图是很容易得到的一维阵列。
设图像f在点(x,y)的灰度值表示为g(x,y),其中像素的灰度范围为[0~255],灰度级为R,灰度级i的所有像素个数为fi,灰度级i的点的概率为P(i),因此Ostu阈值分割法就是求最大值的灰度级n,也就是最优阈值:
其中第i级灰度出现的概率为
在MATLAB软件工具箱中,函数graythresh()采用Ostu算法来获取整个图像全局阈值,获取全局阈值后,使用函数im2bw()进行图像分割处理。函数garythresh()的调用格式如下所示:
level=graythresh(I)
该函数采用Otsu算法获取灰度图像I的最优阈值,函数的返回值level为自动获取的阈值,此阈值大小介于[0,1]之间。
采用Ostu算法进行图像分割处理,具体MATLAB代码实现如下:
clear all;
clc;
I=imread('1.png');
I=im2double(I);
T=graythresh(I);
J=im2bw(I,T);
figure;
subplot(121);imshow(I);
subplot(122);imshow(J);
在程序中,先读入灰度图像,然后通过函数garythresh()获取图像最优阈值,最后通过函数im2bw()对图像进行分割。程序运行后结果如图8.15所示。
图8.15 通过Otsu算法进行图像分割
2.迭代式阈值分割
迭代式阈值分割法[22]是图像阈值分割中较好的方法,该算法通过迭代的方法获取分割的最佳阈值,迭代法阈值的分割步骤如下:
(1)为全局阈值选择一个初始估计值T(图像的平均灰度)。(www.xing528.com)
(2)用T分割图像。产生两组像素:G1有灰度值大于T的像素组成,G2有小于等于T像素组成。
(3)计算G1和G2像素的平均灰度值m1和m2;
(4)计算一个新的阈值:T=(m1+m2)/2;
(5)重复步骤2和4,直到连续迭代中的T值间的差小于一个预定义参数为止。
(6)采用迭代式阈值分割法进行图像分割,具体MATLAB代码实现如下:
clear all;
clc;
I=imread('2.tif');
I=im2double(I);
T0=0.01;
T1=(min(I(:))+max(I(:)))/2;
r1=find(I>T1);
r2=find(I<=T1);
T2=(mean(I(r1))+mean(I(r2)))/2;
while abs(T2-T1)<T0
T1=T2;
r1=find(I>T1);
r2=find(I<=T1);
T2=(mean(I(r1))+mean(I(r2)))/2;
end
J=im2bw(I,T2);
figure;
subplot(121);imshow(I);
subplot(122);imshow(J);
在程序中,先读入灰度图像,然后通过while循环语句求其最优阈值。获取其最优阈值后再通过函数im2bw()进行图像分割。程序运行后结果如图8.16所示。
图8.16 迭代法求阈值进行的图像分割
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。