迭代法求取阈值进行图像分割——MATLAB

@迭代法求取阈值进行图像分割

迭代法求取阈值进行图像分割

它的主要思想是:图像分割后的两部分A和B的均值和基本保持稳定。也就是说,随着迭代的进行,取 [mean(A)+mean(B)]/2 最终的收敛值作为分割阈值。

在这里有一点需要注意
为了提高收敛速度,初始阈值T0的选择要稍微注意些。当目标与背景的面积相当时,可以将初始阈值T0设置为整个图像的平均灰度值;当目标与背景的面积相差较大时,更好地选择是将初始阈值T0设置为最大灰度值和最小灰度值的中间值。

迭代算法:

  1. 选择一个初始阈值T0;
  2. 根据阈值T0将图像分为A和B两部分。分别求出A和B的平均灰度值A_average和B_average。
  3. 计算 T1= (A_average+B_average)/2 ,比较 abs(T1-T0)<1(或更小值),若果成立,则停止迭代,此时的T1就是分割阈值;否则,将T1赋值给T0(T0=T1),继续从第二步开始。

算法实现:

A = imread('rice.png');
figure;
subplot(121);imshow(A);title('原图')
T = mean2(A);   %取均值作为初始阈值
done = false;   %定义跳出循环的量
i = 0;
% while循环进行迭代
while ~done
    r1 = find(A<=T);  %小于阈值的部分
    r2 = find(A>T);   %大于阈值的部分
    Tnew = (mean(A(r1)) + mean(A(r2))) / 2;  %计算分割后两部分的阈值均值的均值
    done = abs(Tnew - T) < 1;     %判断迭代是否收敛
    T = Tnew;      %如不收敛,则将分割后的均值的均值作为新的阈值进行循环计算
    i = i+1;
end
A(r1) = 0;   %将小于阈值的部分赋值为0
A(r2) = 1;   %将大于阈值的部分赋值为1   这两步是将图像转换成二值图像

subplot(122);imshow(A,[]);title('迭代处理后')

处理结果:

在这里插入图片描述
该算法实现的处理结果,还是比较理想的。

发布了15 篇原创文章 · 获赞 5 · 访问量 4391

猜你喜欢

转载自blog.csdn.net/qq_33668060/article/details/99862626
今日推荐