1、算法步骤:
(1)预定义两阈值之差dt
(2)选定初始阈值T0(一般为图像的平均灰度)
(3)用T分割图像为G1、G2两组,G1由灰度值大于T的所有像素组成,G2由灰度值小于等于T的所有像素组成。
(4)对G1和G2的像素分别计算平均灰度值m1,m2。
(5)计算出新的阈值:T1=(m1+m2)/2
(6)重复步骤3到步骤5,直到连续迭代中的阈值之间的差小于预定义的阈值差dt为止。
2、代码如下:
close all;clear all;clc; %关闭所有图形窗口,清除工作空间所有变量,清空命令行
I=imread('cameraman.tif');
I=im2double(I);
dt=0.01; %预定义两阈值之差
T0=(min(min(I))+max(max(I)))/2; %初始阈值
G1=find(I>T0); %分组G1
G2=find(I<=T0); %分组G2
m1=mean(I(G1)); %平均灰度值
m2=mean(I(G2));
T1=(m1+m2)/2; %新阈值
while abs(T1-T0)>dt
T0=T1;
G1=find(I>T0);
G2=find(I<=T0);
T2=(mean(I(G1))+mean(I(G2)))/2;
end
J=im2bw(I,T1); %把图像转换为二值图,进行阈值分割
set(0,'defaultFigurePosition',[100,100,1000,500]);
set(0,'defaultFigureColor',[1 1 1]);
figure(1);
subplot(121),imshow(I);
subplot(122),imshow(J);
3、运行效果如下: