返回信息流上代码。。。
——
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);
这是一条镜像帖。来源:北邮人论坛 / matlab / #9063同步于 2012/5/22
Matlab机器人发帖
请问下面图像分割程序使用的是二维最大类间方差法吗?
rogerhan
2012/5/22镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。