⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 程序.txt

📁 迭代法求最佳阈值 图像为baboon.bmp 分别对R,G,B三个颜色求阈值
💻 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 + -