1. 程式人生 > >迭代法求雙峰灰度閾值

迭代法求雙峰灰度閾值

function x = fenlimili(y)
I1=imread(y);
figure;
subplot(1,2,1);
imshow(I1);%顯示原圖
title('灰度影象')

T=0.5*(double(min(I1(:)))+double(max(I1(:))));%對閾值進行初始化
d=2;%設定一個初始標度值以便實現迴圈
%通過迭代求最佳閾值
while d>0.5%設定標度值為0.5
     g=I1>=T;%利用布林陣列將影象分位大於閾值的部分和小於閾值的部分
     Tn=0.5*(mean(I1(g))+mean(I1(~g)));%取大於和小於閾值的部分的平均值的平均值作為新的閾值
     d=abs(T-Tn);%與標度值進行比較,新的閾值是否已經差值很小
     T=Tn;%閾值賦值
end
% 根據最佳閾值進行影象分割
level=Tn/255;
A=im2bw(I1,level);%分割影象
subplot(1,2,2),imshow(A),title(['迭代法分割後閾值為',num2str(Tn)])%同時利用num2str在title中顯示數字
end