📄 程序.txt
字号:
clear all
clc
f=imread('E:\刘晓梅作业\baboon.bmp');
imshow(f);
figure,imshow(f(:,:,2));
figure,imshow(f(:,:,3));
figure,imshow(f(:,:,1));
f=double(f);
% 分别对R,G,B三个分量进行图像分割,求图像的阈值,本程序采用一种迭代求图像最佳分割阈值的算法
%首先求得RGB三个分量的最大及最小像素值;
R_min=f(1,1,1);
R_max=f(1,1,1);
G_min=f(1,1,2);
G_max=f(1,1,2);
B_min=f(1,1,3);
B_max=f(1,1,3);
[m,n,l]=size(f); % 求出图像的长度和宽度,分别为m,n
%RRRRRR
for i=1:m
for j=1:n
if(f(i,j,1)<R_min)
R_min=f(i,j,1);
end
if(f(i,j,1)>R_max)
R_max=f(i,j,1);
end
end
end
%GGGGGGG
for i=1:m
for j=1:n
if(f(i,j,2)<G_min)
G_min=f(i,j,2);
end
if(f(i,j,2)>G_max)
G_max=f(i,j,2);
end
end
end
%BBBBBBBB
for i=1:m
for j=1:n
if(f(i,j,3)<B_min)
B_min=f(i,j,3);
end
if(f(i,j,1)>B_max)
B_max=f(i,j,3);
end
end
end
%下面是图像分割的算法程序;
%首先是红色分量;
flag=0;
R_TK=(R_min+R_max)/2;
while(flag==0)
R_SUM_MIN=0;
R_SUM_MAX=0;
R_N_MIN=0;
R_N_MAX=0;
for i=1:m
for j=1:n
if(f(i,j,1)<R_TK)
R_SUM_MIN=R_SUM_MIN+f(i,j,1);
R_N_MIN=R_N_MIN+1;
end
if(f(i,j,1)>R_TK)
R_SUM_MAX=R_SUM_MAX+f(i,j,1);
R_N_MAX=R_N_MAX+1;
end
end
end
R_min=R_SUM_MIN/R_N_MIN;
R_max=R_SUM_MAX/R_N_MAX;
R_TK1=(R_min+R_max)/2;
if(R_TK1==R_TK)
flag=1;
else
R_TK=R_TK1;
end
end
r=zeros(m,n);
for i=1:m
for j=1:n
if(f(i,j,1)>R_TK)
r(i,j)=255;
else
r(i,j)=0;
end
end
end
figure,imshow(r);
%其次是绿色分量;
flag=0;
G_TK=(G_min+G_max)/2;
while(flag==0)
G_SUM_MIN=0;
G_SUM_MAX=0;
G_N_MIN=0;
G_N_MAX=0;
for i=1:m
for j=1:n
if(f(i,j,2)<G_TK)
G_SUM_MIN=G_SUM_MIN+f(i,j,2);
G_N_MIN=G_N_MIN+1;
end
if(f(i,j,2)>G_TK)
G_SUM_MAX=G_SUM_MAX+f(i,j,2);
G_N_MAX=G_N_MAX+1;
end
end
end
G_min=G_SUM_MIN/G_N_MIN;
G_max=G_SUM_MAX/G_N_MAX;
G_TK1=(G_min+G_max)/2;
if(G_TK1==G_TK)
flag=1;
else
G_TK=G_TK1;
end
end
g=zeros(m,n);
for i=1:m
for j=1:n
if(f(i,j,2)>R_TK)
g(i,j)=255;
else
g(i,j)=0;
end
end
end
figure,imshow(g);
%最后是绿色分量;
flag=0;
B_TK=(B_min+B_max)/2;
while(flag==0)
B_SUM_MIN=0;
B_SUM_MAX=0;
B_N_MIN=0;
B_N_MAX=0;
for i=1:m
for j=1:n
if(f(i,j,3)<B_TK)
B_SUM_MIN=B_SUM_MIN+f(i,j,3);
B_N_MIN=B_N_MIN+1;
end
if(f(i,j,3)>B_TK)
B_SUM_MAX=B_SUM_MAX+f(i,j,3);
B_N_MAX=B_N_MAX+1;
end
end
end
B_min=B_SUM_MIN/B_N_MIN;
B_max=B_SUM_MAX/B_N_MAX;
B_TK1=(B_min+B_max)/2;
if(B_TK1==B_TK)
flag=1;
else
B_TK=B_TK1;
end
end
b=zeros(m,n);
for i=1:m
for j=1:n
if(f(i,j,2)>R_TK)
b(i,j)=255;
else
b(i,j)=0;
end
end
end
figure,imshow(b);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -