⼆维最⼤类间⽅差(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);
%%
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论