天天看点

使用matlab编程实现基于阈值分割的扫描文档二值化方法,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编程实现基于阈值分割的扫描文档二值化方法,MATLAB实现基于最大类间方差法的图像分割算法...
使用matlab编程实现基于阈值分割的扫描文档二值化方法,MATLAB实现基于最大类间方差法的图像分割算法...

参考文献:

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