迭代法阈值选择算法是对双峰法的改进,他首先选择一个近似的阈值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:mfor j=1:ntmp=I(i,j);if(tmp>=tk)ifg=ifg+1;fnum=fnum+double(tmp); %前景像素的个数以及像素值的总和elseibg=ibg+1;bnum=bnum+double(tmp);%背景像素的个数以及像素值的总和endendend%计算前景和背景的平均值zo=fnum/ifg;zb=bnum/ibg;if(tk==(uint8((zo+zb)/2)))b=0;elsetk=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~dg=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)
本文链接:https://my.lmcjl.com/post/9918.html
展开阅读全文
4 评论