% I_origin = handles.I_origin;
% 显示
% axes(handles.axes1);
figure;imshow(f1, []);
title('原图像');
for ik = 1 : size(f1, 3)
% 逐层处理
I = f1(:,:,ik);
% 求出图象大小
[R,C]=size(I);
% 将图像矩阵浮点化以便运算
% I = double(I);
% 求出最大的图象强度
maxI = max(max(I));
% 求出最小的图象强
minI = min(min(I));
% 浮点化以便运算
% maxI = double(maxI);
% minI = double(minI);
% 将初始阈值设置为最大与最小图像强度的均值
th = (maxI(1,1)+minI(1,1))/2;
% 辅助阈值初始化
th2 = 0;
% 初始化大于阈值的元素的个数及其灰度总值
p = 0.0;
q = 0.0;
% 初始化小于阈值的元素的个数及其灰度总值
p2 = 0.0;
q2 = 0.0;
% 迭代式最佳阈值选择算法主体
while abs(th2-th) > 0
% 循环条件
th2 = th;
for i=1:R
for j=1:C
if I(i,j)>=th2
% 记录大于阈值的元素个数及其灰度总值
p=p+I(i,j);
q=q+1;
end
if I(i,j)
% 记录小于阈值的元素个数及其灰度总值
p2=p2+I(i,j);
q2=q2+1;
end
end
end
% 生成新阈值
T0=p/q;
T1=p2/q2;
th=(T0+T1)/2;
% 重置初值
p=0.0;
q=0.0;T1
p2=0.0;
q2=0.0;
end
% 计算阈值
K_T = th/255;
% 二值化
I2 = im2bw(f1, K_T);
% 显示
% axes(handles.axes2);
imshow(I2, []);
title('最优阈值');
I_out(:,:,ik) = I2;
end
% if ndims(I_origin) == 3
% % 显示RGB图像
% axes(handles.axes2);
% 归一化
I_out = mat2gray(I_out);
imshow(I_out, []);
title('最优阈值');