用matlab实现自适应图像阈值分割最大类方差法代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%用matlab实现自适应图像阈值分割最大类方差法代码clear;

warning off;

SE = strel('diamond',4);

BW1 = imread('cameraman.tif');

BW2 = imerode(BW1,SE);

BW3 = imdilate(BW2,SE);

BW4 = BW1-BW3;

%rgb转灰度

if isrgb(BW4)==1

I_gray=rgb2gray(BW4);

else

I_gray=BW4;

end

figure,imshow(I_gray);

I_double=double(I_gray);%转化为双精度

[wid,len]=size(I_gray);

colorlevel=256; %灰度级

hist=zeros(colorlevel,1);%直方图

%threshold=128; %初始阈值

%计算直方图

for i=1:wid

for j=1:len

m=I_gray(i,j)+1;

hist(m)=hist(m)+1;

end

end

hist=hist/(wid*len);%直方图归一化

miuT=0;

for m=1:colorlevel

miuT=miuT+(m-1)*hist(m);

end

xigmaB2=0;

for mindex=1:colorlevel

threshold=mindex-1;

omega1=0;

omega2=0;

for m=1:threshold-1

omega1=omega1+hist(m);

end

omega2=1-omega1;

miu1=0;

miu2=0;

for m=1:colorlevel

if m

miu1=miu1+(m-1)*hist(m);

else

miu2=miu2+(m-1)*hist(m);

end

end

miu1=miu1/omega1;

miu2=miu2/omega2;

xigmaB21=omega1*(miu1-miuT)^2+omega2*(miu2-miuT)^2;

xigma(mindex)=xigmaB21;

if xigmaB21>xigmaB2

finalT=threshold;

xigmaB2=xigmaB21;

end

end

fT=finalT/255%阈值归一化

T=graythresh(I_gray)%matlab函数求阈值

for i=1:wid

for J=1:len

if I_double(i,j)>finalT

bn(i,j)=1;

else

bin(i,j)=0;

end

end

end

figure,imshow(bin);

figure,plot(1:colorlevel,xigma);

clear;

warning off;

SE = strel('diamond',4);

BW1 = imread('img1.bmp');

BW2 = imerode(BW1,SE);

BW3 = imdilate(BW2,SE);

BW4 = BW1-BW3;

%rgb转灰度

if isrgb(BW4)==1

I_gray=rgb2gray(BW4);

else

I_gray=BW4;

end

figure,imshow(I_gray);

I_double=double(I_gray);%转化为双精度

[wid,len]=size(I_gray);

colorlevel=256; %灰度级

hist=zeros(colorlevel,1);%直方图

%threshold=128; %初始阈值

%计算直方图

for i=1:wid

for j=1:len

m=I_gray(i,j)+1;

hist(m)=hist(m)+1;

end

end

hist=hist/(wid*len);%直方图归一化

miuT=0;

for m=1:colorlevel

miuT=miuT+(m-1)*hist(m);

end

xigmaB2=0;

for mindex=1:colorlevel

threshold=mindex-1;

omega1=0;

omega2=0;

for m=1:threshold-1

omega1=omega1+hist(m);

end

omega2=1-omega1;

miu1=0;

miu2=0;

for m=1:colorlevel

if m

miu1=miu1+(m-1)*hist(m);

else

miu2=miu2+(m-1)*hist(m);

end

end

miu1=miu1/omega1;

miu2=miu2/omega2;

xigmaB21=omega1*(miu1-miuT)^2+omega2*(miu2-miuT)^2;

xigma(mindex)=xigmaB21;

if xigmaB21>xigmaB2

finalT=threshold;

相关文档
最新文档