📄 otsu_1d.m
字号:
%最大化类间方差
clc
clear all
tic
b=imread('d:\image\a2.jpg','jpg');
%b=imread('d:\image\rice.tif','tif');
%b=imread('d:\image\airplane.tiff','tiff');
subplot(1,2,1);
imshow(b);
ng=zeros(1,256);
gray=255;
[m,l]=size(b);
for i=1:1:m
for j=1:1:l
temp=double(b(i,j));
if temp<=gray
gray=temp;
end
ng(temp+1)=ng(temp+1)+1;
end
end
for i=1:1:256
hg(i)=ng(i)/(m*l);
end
for t=gray:1:255 % t是灰度
w0=0;
u0=0;
n0=0;
w1=0;
u1=0;
n1=0;
for i=0:1:t
w0=w0+hg(i+1);
end
w1=1-w0;
for i=0:1:t
if w0~=0
u0=u0+(i*hg(i+1)/w0);
end
end
for i=t+1:1:255
if w1~=0
u1=u1+(i*hg(i+1)/w1);
end
end
ut=w0*u0+w1*u1;
n(t+1)=w0*(u0-ut)^2+w1*(u1-ut)^2;
if t==gray
Nm=n(t+1);
end
if n(t+1)>=Nm
Nm=n(t+1);
Topt=t;
end
end
Topt
image1=ones(m,l);
for i=1:m
for j=1:l
if b(i,j)<=Topt
image1(i,j)=0;
end
end
end
subplot(1,2,2);
imshow(image1);
toc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -