基于Haar小波变换和KNN算法的DSP人脸识别

本文介绍了基于Haar小波变换和KNN算法的人脸识别项目,旨在提升DSP应用能力。通过Haar小波变换提取特征,然后使用KNN分类器进行识别,最终达到约70%的准确率。项目不仅探讨了Haar小波变换的原理和特点,还阐述了KNN算法的核心思想及其在分类中的应用。
摘要由CSDN通过智能技术生成

这学期上了一门课叫DSP实验,学会了使用C5509A芯片,并且做了一系列实验,最后一个大PJ是使用DSP进行人脸识别。

基本思想是首先对人脸照片进行变换提取特征,最后在利用某种分类器对特征分类,用以决定属于哪一个人,最后再进行识别,计算准确度,这个项目主要是为了训练我们对于DSP的熟练情况和使用情况,同时了解一些小波变换和分类方法,仅用来学习,对于正确率没有要求,所以最后做好后准确率大概70%左右,也不算高。

首先我们小组利用的是harr小波变换进行特征提取

先简单说一下harr小波变换的原理:

小波变换(wavelettransform,WT)是一种新的变换分析方法,它继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能够提供一个随频率改变的“时间-频率”窗口,是进行信号时频分析和处理的理想工具。它的主要特点是通过变换能够充分突出问题某些方面的特征,能对时间(空间)频率的局部化分析,通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求,从而可聚焦到信号的任意细节,解决了Fourier变换的困难问题

哈尔函数是由Haar提出的一种正交完备函数系;是一种既反映整体又反映局部的函数;它是小波变换中的典型小波,;

哈尔变换和小波变换适用非平稳信号的分析与处理。

哈尔变换的特点:

(1) 具有尺度和位移两个特性;

(2) 变换范围窄;

(3) 其变换特性与图像中的边界或线条的特性十分接近,因此图像中的边缘和线条经哈尔变换后,会产生较大的变换系数,而其它区划的变换系数小。

因为DSP上直接进行小波变换的源码比较少,因此我们先从matlab入手,找到了部分matlab的harr变换源码

先了解harr变换的一维代码:

function out=selfdwt(in,J)
% 完成J尺度Haar小波变换
% in 是输入信号
% out 是输出的小波系数
%h0,h1是相应的小波和尺度向量
h0=[1/sqrt(2),1/sqrt(2)]; 
h1=[-1/sqrt(2),1/sqrt(2)];
out=zeros(size(in));
m=size(in);%此处的m为一向量
x=length(in);
k=0;
l=0;
Wl=in;
for i=1:J
%=================此处对应于高频部分,结果中抽取偶数的点=====================
    Wh=conv(h1,Wl);%卷积函数
    for j=1:(length(h1)+length(Wl)-1)
        if mod(j,2)==0%mod函数求j/2的模,相当于求余数,且余数一定是整数
            k=k+1;
            out(round(x/2)+k)=Wh(j);%round是四舍五入函数,因为这里x一定是整数,所以roundx/2相当于如果x为偶数则为x/2,奇数则为x/2+1
        end
    end
 %============================================================================
 %===============下面对应于低频部分,结果中抽取偶数点=========================
    Wl1=conv(h0,Wl);
    for j=1:(length(h0)+length(Wl)-1)
        if mod(j,2)==0
            l=l+1;
            out(l)=Wl1(j);
        end
    end
  %===========================================================================
    x=round(x/2);
    m=round(m/2);
    Wl=zeros(m);
    for j=1:x
        Wl(j)=out(j);
    end
    k=0;
    l=0;
end
    
    

利用这个函数可以得到对二维图像进行harr变换的代码:
%对一幅图像I进行M尺度的小波变换
I=imread('s1.bmp');
M=1;% M----小波变换的尺度
I1=double(I);%强制转换类型为double型,I为512*512*3的像素数组
[m,n]=size(I);%m=128,n=128
Iout=zeros(size(I));%生成512*512*3的全零矩阵

W1=zeros(size(I));%生成512*512*3的全零矩阵
%=============Haar wavelete transform==================
W1=I1;%W1=像素数组
for k=1:M%进行两次迭代
for i=1:n%对所有列进行变换
    W1(:,i)=selfdwt(W1(:,i),1);%对列进行变换
end
for i=1:m%对所有行进行变换
    W1(i,:)=selfdwt(W1(i,:),1);%对行进行变换
end
for i=1:m%输出值
    for j=1:n
        Iout(i,j)=W1(i,j);
    end
end
m=m/2;%m=256
n=n/2;%m=256*3
W1=zeros(m,n);%生成第一次得出的结果
for i=1:m
    for j=1:m
        W1(i,j)=Iout(i,j);
    end
end
end
%=====================&
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值