最小距离分类器,交互式选取图像样本分类数据,进行最小距离分类(实现欧式距离,马氏距离,计程距离)

最小距离分类器

1. 理论基础
最小距离分类又称最近邻分类,是一种非常简单的分类思想。这种基于匹配的分类技术通过以一种原型模式向童代表每一个类别,识别时一个未知模式被赋予一个按照预先定义的相似性度量与其距离最近的类别,常用的距离度量有欧氏距离,马氏距离等。下面我们以欧氏距离为例讲解最小距离分类器。
一种简单的做法是把每个类所有样本的平均向量作为代表该类的原型,则第i 类样本的代表向置为:

其中, Ni 为第i 样本的数目, wi 表示第i 类样本的集合,总类别数为W。
当需要对一个未知模式x 进行分类时,只需分别计算x 与各个mi(i=1,2.,…,W) 的距离然后将它分配给距离最近的代表向量所代表的类别。
对于欧氏距离表示的x 与各个m1 的距离:

其中,
,表示欧几里的范数,即向量的模。我们在W 个Di (x)
中找到最小的一个,不妨设为Di(x) ,则x 属于第j

%最小距离分类器,交互式选取图像样本分类数据,进行最小距离分类(实现欧式距离,马氏距离,计程距离)
function re=mindis()
[filename,pathname]=uigetfile({'*.jpg;*.bmp;*.tif;*.png;*.gif','All Image Files';'*.*','All Files'});%动态打开文件
image = imread([pathname,filename]);%读取
figure(1);imshow(image);
image=double(image);
[m,n,bands]=size(image);
k=input('请输入要分类的个数:  ');%输入要选取的样本类别数
aver=zeros(k,bands);%申请矩阵空间存储样本数据各类别各波段均值
%对所选取样本数据进行处理求得各类别均值
for i=1:k%对选中类别循环
    str=['请在屏幕图像上选择第',num2str(i),'种分类样本,选择完毕请回车确定'];
    disp(str);
    [y,x]=getpts;%从图像上获取数据点
    A=[round(y),round(x)];
    for band=1:bands%对图像每个波段进行计算,求取指定类别每个波段均值
        Sum=0;
         for count=1:size(A,1)%对取得点循环
             temp=image(:,:,band);
            Sum=Sum+temp(A(count,2),A(count,1));
         end
          aver(i,band)=Sum/size(A,1);%求均值
    end
end
image=reshape(image,m*n,bands);%将图像数据重塑成为一列为一个波段数据的形式,便于计算
dis=zeros(k,m*n);%申请矩阵空间存储每个类别图像各个点数据分别到各波段均值的距离的和
type=input('请输入要选择的分类类型: 1.欧式距离 2.马氏距离  3.计程距离  : ');
switch type%分别代入不同公式
    case 1
        %对每个类别进行循环,求出各个类别的距离,后面进行比较
        for t=1:k
        tem=image-aver(t,:);%图像数据与样本每个类别每个波段均值分别求差值
        dis(t,:)=sqrt(sum((tem.*tem).'));  %和的平方根
        end
    case 2
        %申请矩阵存储样本数据均值协方差
        T=zeros(bands,bands,k);
        for t=1:k
            T(:,:,t)=cov(aver);%求取协方差
            tem=image-aver(t,:);
            dis(t,:)=sqrt(sum((tem*T(:,:,t).*tem).'));  %同上
        end
    case 3
        for t=1:k
            tem=image-aver(t,:);
            dis(t,:)=sum(abs(tem.'));%绝对值之和
        end
end
    [~,index]=min(dis);%求各距离最小值
    index=reshape(index,m,n);%重塑回原图像排列
    re=index/k;%给各类别赋值指定灰度值便于区分,也可赋值其他
    figure(2),imshow((re));%显示
end

参数输入主要通过命令窗口:
在这里插入图片描述

运行截图:
选取样本过程:(图中是选取第三类样本,每个类别样本个数不固定,可以根据需要选取。如第一类可以选三个,第二类可以选10个,等等)。
在这里插入图片描述
欧式距离分类结果:
在这里插入图片描述
马氏距离分类结果:
在这里插入图片描述
计程距离分类结果:
在这里插入图片描述

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.癮.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值