MATLAB实现基于最大类间方差法的图像分割算法

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)图像前景与背景区分明显的分割结果')

效果:


MATLAB实现基于最大类间方差法的图像分割算法_第1张图片

MATLAB实现基于最大类间方差法的图像分割算法_第2张图片

参考文献:
[1] 齐丽娜, 张博, 王战凯. 最大类间方差法在图像处理中的应用[J]. 无线电工程, 2006, 36(7):25-26.

你可能感兴趣的:(MATLAB实现基于最大类间方差法的图像分割算法)