基于NSCT非采样轮廓波变换和CNN网络人脸识别matlab仿真

72 阅读2分钟

1.算法运行效果图预览

(完整程序运行后无水印)

1.gif

2.jpeg  

通过CNN训练ORL人脸库:

 

image.png

 

通过NSCT+CNN方式训练ORL人脸库:

 

image.png

 

两种方法识别率对比:

 

image.png

 

2.算法运行软件版本

matlab2022a

 

3.部分核心程序

(完整版代码包含详细中文注释和操作步骤视频)

 

`%分解层数

nlayers      = 3;     

%取值4或者8,当方向个数为4时采用两两合并,当为8时不做任何变化

norients     = 8;      

for i = 1:20

    i

    for j = 1:10

        str          = ['ORL',num2str(i),'','s',num2str(i),'_',num2str(j),'.bmp']; 

        im           = imread(str);  %读入图片

        [R,C,K]      = size(im);

        if K == 1

           img = im;

        else

           img = rgb2gray(im); 

        end

       

        [ri,ci]    = size(img);

        scales     = nlayers;

        img        = img(1 : 2^(scales+1)*floor(ri/2^(scales+1)),1 : 2^(scales+1)*floor(ci/2^(scales+1)));

        y_nsctdec  = nsctdec(img,[3,3,3],'dmaxflat7','maxflat');

        I          = y_nsctdec{1};

        name1      = ['ORL_nsct',num2str(i),'','s',num2str(i),'_',num2str(j),'.bmp'];

        imwrite(uint8(I),name1);

 

    end

end

%显示NSCT效果

y_nsctrec  = nsctrec(y_nsctdec,'dmaxflat7','maxflat');

figure;

subplot(131);

imshow(img);

title('原图像');

subplot(132);

imshow(y_nsctdec{1},[]);

title('NSCT变换后图像');

subplot(133);

imshow(y_nsctrec,[]);

title('NSCT逆变换后图像');

10_031m`

 

4.算法理论概述

       基于非采样轮廓波变换(Nonsubsampled Contourlet Transform, NSCT)和卷积神经网络(Convolutional Neural Network, CNN)的人脸识别系统是一种结合了传统信号处理方法和深度学习技术的先进方法。这种方法通过NSCT提取图像的多尺度、多方向特征,并利用CNN的强大特征学习能力和分类能力来实现高效的人脸识别。

 

       NSCT是一种多尺度、多方向的图像分解方法,它结合了多分辨率分析和方向滤波器组的优点,可以有效地捕获图像中的纹理和边缘信息。NSCT的主要步骤包括:

 

多尺度分析:通过级联的拉普拉斯金字塔(Laplacian Pyramid, LP)分解来实现多尺度分析。

 

多方向分析:使用方向滤波器组对每个尺度的子带进行分解,以获得不同方向的细节。

 

6.png

7.png

 

       基于NSCT和CNN的人脸识别系统通过结合传统的信号处理方法和现代深度学习技术,可以有效地提取人脸图像的多尺度、多方向特征,并利用CNN的强大分类能力实现高效的人脸识别。