⼆维最⼤类间⽅差(otsu)matlab实现源码
今天整理电脑资料,没想到翻到以前上学时候写的⼩论⽂,电脑⾥居然还存着以前⽤matlab写得最⼤类间⽅差的⼆维实现源码。当时持续写了好⼏个星期才搞定,忘了哪个是最终版本了,只好按照⽇期把最后的那个源码版本贴出来,不知道⾥⾯有没有bug。
%%传统⼆维Otsu⽅法
function [idx idy]=otsuHistgram2(I)
matlab直方图%I=imread('rice.png');
noise=imnoise(I,'gaussian',0,0.03);
I=noise;
figure,imhist(I);
figure,imshow(I);
%% 求出图像的邻域和中值
h=fspecial('average',[3 3]);
[m,n]=size(I);
totalnum=m*n;
flt=filter2(h,I);%邻域均值
flt=uint8(flt);
I=uint8(I);
%duality ⼆元性(灰度,邻域)
%% 求(灰度,邻域)出现的频率
num_bins = 256;
f(1:num_bins,1:num_bins)=0;
for r=1:m
for l=1:n
gry=I(r,l);  %灰度gray
adj=flt(r,l);%邻域adjacent
f(gry+1,adj+1)=f(gry+1,adj+1)+1;
end
end
Pij=f./totalnum;
%% 画出⼆维直⽅图
[X,Y] = meshgrid(1:num_bins);
Z=f;
plot3(X,Y,Z);
figure;
mesh(X,Y,Z);
colormap(cool);
%%