图像的阈值分割(迭代法选择阈值)


迭代法阈值选择算法是对双峰法的改进,他首先选择一个近似的阈值T,将图像分割成两个部分,R1和R2,计算出区域R1和R2的均值u1和u2,再选择新的

阈值T=(u1+u2)/2;

重复上面的过程,知道u1和u2不在变化为止,



详细过程的代码:

<span style="font-size:18px;"><strong>clc;
clear all;
close all;
I=imread('lena.jpg');
%设置初始阈值   去最大值和最小值的中间值
zmax=max(max(I));
zmin=min(min(I));
tk=(zmax+zmin)/2;
%根据阈值将图像进行分割为前景和背景,分别求出两者的平均灰度  zo和zb
b=1;
[m n]=size(I);
while (b)
        ifg=0;
        ibg=0;
        fnum=0;
        bnum=0;
        for i=1:m
            for j=1:n
                tmp=I(i,j);
                if(tmp>=tk)
                    ifg=ifg+1;
                    fnum=fnum+double(tmp);  %前景像素的个数以及像素值的总和
                else
                    ibg=ibg+1;
                    bnum=bnum+double(tmp);%背景像素的个数以及像素值的总和
                end
            end
        end
        %计算前景和背景的平均值
        zo=fnum/ifg;
        zb=bnum/ibg;
        if(tk==(uint8((zo+zb)/2)))
            b=0;
        else
            tk=uint8((zo+zb)/2);
        end
        %当阈值不变换时,退出迭代
end
disp(strcat('迭代的阈值',num2str(tk)));
I1=im2bw(I,double(tk)/255);
imshow(I1)
                
                </strong></span>

简单的代码:

%读入图像,并进行灰度转换
A=imread('baihe.jpg');
B=rgb2gray(A);
%初始化阈值
T=0.5*(double(min(B(:)))+double(max(B(:))));
d=false;
%通过迭代求最佳阈值
while~d
     g=B>=T;
     Tn=0.5*(mean(B(g))+mean(B(~g)));
     d=abs(T-Tn)<0.5;
     T=Tn;
end
% 根据最佳阈值进行图像分割
level=Tn/255;
BW=im2bw(B,level);
% 显示分割结果
subplot(121),imshow(A)
subplot(122),imshow(BW)


  • 23
    点赞
  • 125
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
OpenCV中的阈值分割迭代法是一种基于迭代的方法,用于自动选择图像阈值来进行二值化分割。该方法包括以下步骤: 1. 选初始分割阈值,通常可以选择图像灰度的平均值作为初始阈值。 2. 根据阈值图像像素分割为背景和前景,并分别计算两者的平均灰度值T0和T1。 3. 计算新的阈值T',通过计算平均灰度值T0和T1的平均值得到,即T' = (T0 + T1) / 2。 4. 判断新的阈值T'是否等于当前阈值T。如果相等,则迭代结束,当前阈值T即为最终阈值。 5. 如果新的阈值T'不等于当前阈值T,则更新当前阈值T为新的阈值T',并回到步骤2进行下一轮迭代。 通过以上迭代过程,可以得到最佳阈值,用于对图像进行二值化分割。在代码中,首先读灰度图像,然后计算初始阈值图像的平均灰度值。接着进行迭代运算,根据当前阈值图像像素分割为背景和前景,并计算两者的平均灰度值。然后计算新的阈值,并判断是否需要终止迭代。最后,根据最佳阈值图像进行二值化分割,并显示结果。 需要注意的是,该方法是一种基本的阈值分割方法,在某些情况下可能不能得到理想的分割效果。为了进一步提升分割效果,可以考虑使用其他更复杂的阈值分割算法,如大津法(OTSU法)。大津法是一种基于最大类间方差的算法,通过自动选阈值来实现二值化分割,具有更好的分割效果和鲁棒性。在OpenCV中,可以使用cv.threshold函数结合cv.THRESH_OTSU参数来使用大津法进行阈值分割。 综上所述,OpenCV中的阈值分割迭代法是一种基于迭代的方法,用于自动选择图像阈值来进行二值化分割。该方法通过迭代运算计算最佳阈值,并对图像进行分割。在实际应用中,可以考虑使用其他更复杂的阈值分割算法如大津法来提升分割效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值