clear
clc;
%% 選擇圖檔,并二值化
[fn,pn,fi]=uigetfile('*.jpg','選擇圖檔');
I=imread([pn fn]);
if ndims(I) == 3
I = rgb2gray(I);
end
% fxy = imhist(I, 256); %統計每個灰階值的個數
[counts,x] = imhist(I, 256) ;
figure;
subplot(2, 2, 1);
imshow(I, []); title('原圖')
%% 使用最大類間方差法得到門檻值
countsx=counts.*x;
sumI=sum(counts);
baifen=counts/sumI;
w0=zeros(1,length(x)); %A比B多一個元素,為1行,length(B)+1列的全0向量
u0=zeros(1,length(x));
u1=zeros(1,length(x));
w0(1)=baifen(1);
for i=2:length(x)
w0(i)=w0(i-1)+baifen(i); % A[k+1]=B[k]
end
for i=1:length(x)-1
u0(i)=sum(counts(1:i).*x(1:i))/sum(counts(1:i));
u1(i)=sum(counts(i+1:length(x)).*x(i+1:length(x)))/sum(counts(i+1:length(x)));
end
w1=1-w0;
all=w0.*w1.*(u0-u1).*(u0-u1);
[C2,p]=max(all);
p
p=p/255;
%% 使用門檻值法進行圖檔分割
image = im2bw(I, p); %小于門檻值的為黑,大于門檻值的為白
subplot(2, 2, 2);
imshow(image);
title('(b)圖像前景與背景區分明顯的分割結果')
效果:
參考文獻:
[1] 齊麗娜, 張博, 王戰凱. 最大類間方差法在圖像進行中的應用[J]. 無線電工程, 2006, 36(7):25-26.