您的位置:首页 > 其它

阈值分割

2015-09-01 12:05 316 查看
一、迭代法

通过迭代法来求出分割的最佳阈值,具有一定的自适应性,这种方法适用于物体的和背景有较大的区分,即其直方图有相当清楚的波谷;

具体算法步骤如下:

1.为全局阈值选择一个初始估计值T。

2.用T分割图像。产生两组像素:G1有灰度值大于T的像素组成,G2有小于等于T像素组成。

3.计算G1和G2像素的平均灰度值m1和m2;

4.计算一个新的阈值:T = (m1 + m2) / 2;

5.重复步骤2和4,直到连续迭代中的T值间的差小于一个预定义参数为止。

实现代码:

clear;
clc;
close all;
I=imread('Fig1013(a).tif');
T=0.01;
I=im2double(I);
% T1=(min(I(:))+max(I(:)))/2;
T1=mean2(I);
index=find(I<T1);
index2=find(I>=T1);
T2=(mean2(I(index))+mean2(I(index2)))/2;
count=0;
while abs(T2-T1)>T
T1=T2;
index=find(I<T1);
index2=find(I>=T1);
T2=(mean2(I(index))+mean2(I(index2)))/2;
count=count+1;
end

count
T2
figure,imhist(I)
figure,imshow(I)
I2=im2bw(I,T2);
figure,imshow(I2);


实验证明,该方法只适用于,直方图有明显波谷的情况,其他情况不理想;

二、Ostu阈值分割法(最大类间方差法)

(1)基本原理:利用最佳阈值,将图像的灰度分割成两部分,使得两部分之间的方差最大,具有最大分离性;

(2)原理解释:当背景类信息被错误的分为目标类信息,或目标类信息被错误的分为背景类信息时,都会导致目标和背景之间的差别变小。正是由于这一特性,只要使类间方差最大或类内方差最小,这样的分割就意味着最小的误差,并且根据该准则选取最佳阈值使得目标和背景之间的分离性最好。

(3)优缺点:该方法的优点是运算量不大,在一定条件下受图像对比度与亮度变化的影响很小,在一些实时图像处理系统中得到了很广泛的应用。缺点是该方法只是借助了图像的像素灰度信息,并未考虑像素间的空间相关信息(如邻域信息),加之外部干扰的存在,使得灰度直方图的波峰和波谷并不一定明显,因而不能得到满意的分割效果,抗干扰性较差。

(4)基本步骤:

计算输入图像的归一化直方图

计算累积和P1(k);

计算累积均值m(k);

计算全局灰度均值mG;

计算类间方差;类间方差=[(mG*P1(k)-m(k))^2]/[P1(k)*(1-P1(k))];

得到最佳阈值,即使得类间方差最大的k值;如果最大值不唯一,则检测到各个最大值k的平均值

在最优阈值处计算可分性度量;可分性度量=最大类间方差/全局方差;全局方差=sum((i-mG)^2*p(i))

(5)下面的代码为graythresh函数里面的实现部分,也可以直接利用该函数;其中T为最优阈值,SM为可分性度量

clear;
clc;
I=imread('1.tif');
%计算直方图
h=imhist(I);
%归一化
h=h/sum(h);
%累积分布概率
P1=cumsum(h);
i=(1:numel(h))';
%直到灰度级k的均值
m=cumsum(i.*h);
%全局均值
mG=m(end);
%类间方差,加eps防止除数为零
sigma=((mG*P1-m).^2)./(P1.*(1-P1)+eps);
%最大的类间方差
sigmaMax=max(sigma);
%假设最大不止一个取均值
T=mean(find(sigma==sigmaMax));
%最优阈值归一化,减一是因为图像的索引是0-255,但是matlab索引是1-256
T=(T-1)/(numel(h)-1)
%可分性度量
SM=sigmaMax/(sum(((i-mG).^2).*h)+eps);


三、用图像平滑改善全局阈值处理

由于受到噪声的干扰,上述方法在处理图像时,会不理想,最好是先进行平滑去噪,然后在进行阈值分割
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: