BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / matlab / #9063同步于 2012/5/22
Matlab机器人发帖

请问下面图像分割程序使用的是二维最大类间方差法吗?

rogerhan
2012/5/22镜像同步0 回复
上代码。。。 —— function [bin] = otsu(path) f1=imread(path); %rgb转灰度 if isrgb(f1)==1 I_gray=rgb2gray(f1); else I_gray=f1; end figure imshow(I_gray); title('lena????') 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<threshold miu1=miu1+(m-1)*hist(m); else miu2=miu2+(m-1)*hist(m); end end miu1=miu1/omega1; miu2=miu2/omega2; %根据3.1.1.2小节的公式计算最大类间方差 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自带Otsu求阈值 for i=1:wid for j=1:len if I_double(i,j)>finalT bin(i,j)=1; else bin(i,j)=0; end end end figure imshow(bin);
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。