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

来源:互联网 发布:该域名访问升级 编辑:程序博客网 时间:2024/06/05 11:58


迭代法阈值选择算法是对双峰法的改进,他首先选择一个近似的阈值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和zbb=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        %当阈值不变换时,退出迭代enddisp(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)


1 0
原创粉丝点击