mimr.m

来自「模式识别-贝叶斯最小错误率判别一幅图像是属于人」· M 代码 · 共 77 行

M
77
字号
%运行环境:matlab7.0
%先将所有目录拷贝到work目录下,在命令窗口输入mimr ,即可查看结果了。

%作者:郑筠    学号:S200502106   2006.3.6




%该程序采用贝叶斯最小错误率判别一幅图像是属于人,还是属于背景。
load hm_tr0;%2m组数据,人,每组n个特征   hm_tr:m x n
load bg_tr0;%2m组数据,背景,每组n个特征
%load test;%1组测试数据,n个特征  
%m,n具体是多少数字,可 "repalce"之
%这里两种类型的矩阵由图像处理工具处理后得来,保存了原始图像的特征
%只适用于两类情况的识别

%hm_tr0与bg_tr0都是500x100的矩阵。
hm_tr=hm_tr0(1:400,:);%选取前400组数据,剩余的100个用于随机选取作为测试数据
bg_tr=bg_tr0(1:400,:);%选取前400组数据,剩余的100个用于随机选取作为测试数据

%计算人的样本均值
M_hm=hm_tr(1,:);
for i=2:400
M_hm=M_hm+(hm_tr(i,:));
end
M_hm=M_hm/400;

%计算背景的样本均值
M_bg=bg_tr(1,:);
for i=2:400
M_bg=M_bg+(bg_tr(i,:));
end
M_bg=M_bg/400;

%分别计算人和背景样本的均方误差
E_hm(100,100)=0;
E_bg(100,100)=0;
for i=1:400
    E_hm=E_hm+(hm_tr(i,:)-M_hm)'*(hm_tr(i,:)-M_hm);
    E_bg=E_bg+(bg_tr(i,:)-M_bg)'*(bg_tr(i,:)-M_bg);
end
E_hm=E_hm/400;
E_bg=E_bg/400;

%先验概率已知
P1=0.1;
P2=0.9;

%随机产生测试数据(类型已知)。在workspace查看temp变量,小于0.5则测试的是人,大于是背景
temp=rand;
if(temp<=0.5)
    test=hm_tr0(ceil(rand*100+400),:);
    fprintf('测试数据属于人.\n');
else test=bg_tr0(ceil(rand*100+400),:);
    fprintf('测试数据属于背景.\n');
end 
    
%由测试数据计算条件分布概率(取对数)
p1=-log(abs(det(E_hm)))/2-((test-M_hm)*inv(E_hm)*(test-M_hm)')/2;%人的条件下出现数据的概率
p2=-log(abs(det(E_bg)))/2-((test-M_bg)*inv(E_bg)*(test-M_bg)')/2;%背景条件下出现数据的概率

%判别
if((p2-p1)<log(P1/P2))
    fprintf('被判为人,');
    if(temp>0.5)  fprintf('判断错误.\n');%有时候test是背景,但是也会被错判为人
    else fprintf('判断正确.\n');
    end
else 
    fprintf('被判为背景,');
    if(temp<=0.5)  fprintf('判断错误.\n');%有时候test是人,但是也会被错判为背景
    else fprintf('判断正确.\n');
    end
end



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?