基于NSCT变换的人脸图像特征提取matlab仿真

目录

一、理论基础

二、MATLAB核心程序

三、MATLAB仿真测试结果


一、理论基础

1.1理论概述

       NSCT变换是一种多尺度图像变换方法,它结合了SCT变换和NST变换的优点,具有更好的方向性和多尺度性,因此在人脸特征提取方面具有很好的应用前景。下面是基于NSCT变换的人脸图像特征提取的详细介绍。

一、NSCT变换的基本原理

      NSCT变换是由非下采样轮廓波变换(NST)和方向可调的子带滤波器(SCT)组合而成的一种多尺度变换方法。它将图像分解成多个子带,通过对每个子带进行SCT变换,可以得到一系列的子带系数,这些子带系数反映了图像在不同方向和不同尺度的特征。

       具体来说,NSCT变换首先使用NST变换对图像进行多尺度分解,得到一系列的子带系数。然后,对于每个子带,使用SCT变换将其进一步分解成多个方向子带,得到一系列的方向子带系数。每个方向子带都对应着特定的方向滤波器,通过对滤波器的设计,可以获得更好的方向性和多尺度性。

NSCT变换的流程可以表示为:

  1. 对原始图像进行NST变换,得到一系列的子带系数。

  2. 对于每个子带,使用SCT变换将其进一步分解成多个方向子带。

  3. 对于每个方向子带,使用相应的方向滤波器进行滤波,得到一系列的方向子带系数。

  4. 将所有的子带系数和方向子带系数合并成一个特征向量,作为该尺度下图像的特征表示。

二、NSCT变换的优势

NSCT变换相对于其他多尺度变换方法,具有以下几个方面的优势:

  1. 更好的方向性:NSCT变换采用SCT变换对NST变换的输出进行进一步分解,可以通过选择合适的滤波器实现更好的方向性。

  2. 更好的多尺度性:NSCT变换可以同时获得多个尺度的特征,并且对于不同尺度的特征具有相同的分辨率。

  3. 可扩展性:NSCT变换可以与其他多尺度变换方法相结合,形成更为复杂的多尺度变换方法,以适应不同的应用场景。

三、基于NSCT变换的人脸特征提取

基于NSCT变换的人脸特征提取主要包含以下步骤:

  1. 对人脸图像进行预处理:包括人脸检测、人脸对齐、灰度化等操作,以准备后续的特征提取。

  2. 对预处理后的人脸图像进行NSCT变换,得到一系列的子带系数和方向子带系数。

  3. 通过对子带系数和方向子带系数的分析,提取出能够表征人脸特征的关键信息。这些关键信息可以包括纹理信息、形状信息、空间信息等等。

  4. 将提取出来的关键信息进行编码或聚类处理,形成一组特征向量或特征图,用于后续的人脸识别或人脸聚类等任务。

  5. 对特征向量或特征图进行训练和学习,得到相应的分类器或聚类器,用于分类或聚类任务的完成。

        NSCT变换作为一种多尺度变换方法,在人脸特征提取方面具有很好的应用前景。通过对NSCT变换的学习和分析,我们可以了解到其具有更好的方向性和多尺度性,能够有效地提取出人脸图像的关键信息,对于后续的人脸识别或人脸聚类等任务具有重要的意义。

1.2 基于NSCT变换的人脸图像特征提取详细介绍

        人脸识别算法在人脸识别和匹配领域中一个非常重要的技术。为了获得一个较好的识别效果,人脸特征的提取十分关键。 但是大多数算法在实际工作中无法获得较好的识别效果。为了解决这个问题,基于NSCT变换提取人脸的特征数据。

       NSCT变换是在Contourlet变换的基础上提出的,不仅具有多分辨率、局部化和多方向等特点,还具有平移不变性,从而克服了Contourlet变换存在的缺陷。NSCT变换在结构上可以分为非下采样金字塔滤波器组(NSPFB)和非下采样方向滤波器组(NSDFB)两部分。其中NSPFB采用àtrous算法设计,能实现完全重构的双通道滤波器。其结构如下图:

      而NSDFB在结构上为一个双通道扇形滤波器。为了获得更高精确的分解,采用方向滤波器组,对下一级滤波器采用基于梅花矩阵的上采样。其结构如下图所示:

        其插值扇形滤波器有棋盘状的频域支撑,和前一级的滤波器结合在一起实现四个方向的频域分解。通过该滤波器组,可以将频域分解为多个楔形频率区域。

二、MATLAB核心程序

关于NSCT工具箱的调用程序和完美注释:

function [Insp,Insct]= myNSCTd(I,levels,pfiltername,dfiltername,type)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%函数功能:完成图像的level级NSCT分解
%%函数输入:I	——输入源图像
%          levels	——分解级别的数组,例如[1,2,3],分解的方向数分别为[2,4,8].
%          pfiltername	——塔式分解滤波器名称
%          dfiltername  ——方向分解滤波器名称
%%函数输出:Insct    ——输出为cell类型,包括低通以及各级别各方向的分量
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                        

%%%%%%%%生成非下采样金字塔滤波器组%%%%%%%%%%%%%
%该函数为copy的,可选参数如下:
%'9-7'、'maxflat'、'pyr'、'pyrexc'
%输出的h0,h1是金字塔分解滤波器
%输出的g0,g1是金字塔重构滤波器
[ph0, ph1, pg0, pg1] = atrousfilters(pfiltername);%无法改进

%%%%%%%%%生成非下采样方向滤波器组%%%%%%%%%%%%%
%建立一个4*4的空矩阵,存放滤波器组
filtersd = cell(4) ;

%function [h0, h1] = dfilters(fname, type)
%copy的函数,作用是根据名字生成方向滤波器
%fname的可选参数有:'haar'、'vk'、'ko'、'kos'、
%'lax'、'sk'、'cd'、'pkva'、'oqf_362'、'sinc'
%其中测验结果看的比较舒服的有'lax'、'sk'、'cd'
%最理想的是'pkva',copy函数中的ldfilter.m、
%ld2quin.m和qupz.m都是用语生成该滤波器
%type的可选参数有:'d'、'r',分别表示生成分解
%滤波器和重构滤波器。
%输出的h0为小波函数(高频),h1为尺度函数(低频)
[dh1, dh2] = dfilters(dfiltername, 'd'); %无法改进
dh1 = dh1./sqrt(2) ;
dh2 = dh2./sqrt(2) ;

%function y = modulate2(f, type, center)
%copy的函数,作用是将输入的方向滤波器f依据type类型增加方向性
%type可选参数有:'r'生成横向梳状滤波器、'c'生成纵向梳状滤%波器、
%'d'生成网格型滤波器(综合横纵梳状滤波器的特点)
%center参数,对输入滤波器的初始中心作确定,通常默认为[0 0]。
filtersd{1} = modulate2(dh1, 'c');%无法改进
filtersd{2} = modulate2(dh2, 'c');%无法改进

%function [y1, y2] = parafilters( f1, f2 )
%copy的函数,输入是两个滤波器,输出是两个滤波器组
%作用是将输入的两个滤波器分别增加行列方向性之后
%再分别转置,生成四个不同的滤波器
%随后循环调用function y = resampz(x, type, shift)
%copy的函数,输入是单个滤波器x,type是上面生成的四个滤波器
%中的第几个,shift通常不输入,为默认值1.
%对每个滤波器作旋转,即生成四个旋转后的方向滤波器。
%综合结果:
%对输入的两个滤波器,输出两组旋转后的滤波器,每组四个
[filtersd{3}, filtersd{4}] = parafilters( dh1, dh2 ) ;%无法改进

%判断分解层数
clevels = length( levels );
%初始化输出缓存
nIndex = clevels + 1 ;
y = cell(1, nIndex) ;
Insp=cell(1,clevels);

%NSCT分解
for i= 1 : clevels   
 
    %对图像进行金字塔分解,xlo为低通输出,xhi为高通输出
    switch type
        case 'NSCT'
            [Ilow, Ihigh] = NSPd(I, ph0, ph1, i-1) ;%无法改进
            %NSPlow{i}=Ihigh;
        case 'NewPM'
            [Ilow,Ihigh]=Newmcd(I);
    end
    
    %如果方向分解级别不为0,进行方向分解,并将结果存入y的对应部分
    if levels(nIndex-1) > 0 
        % function nsdfbdec中,在level高于3的时候,采样矩阵M的设定不懂,
        % 所以只能copy过来。
        
        Ihigh_dir = nsdfbdec(Ihigh, filtersd, levels(nIndex-1));        
        y{nIndex}=Ihigh_dir ;
        

    %若方向分解级别为0,直接复制
    else 
        y{nIndex}=xhigh ;
    end
    
    %更新输出缓存指针
    nIndex = nIndex - 1 ;
    
    %更新图像为分解的低通部分,进行下一次迭代
    I = Ilow ;
    Insp{i}=I;
end

% 输出的第一副图为最后的低通结果。
y{1}=I;
Insct=y;

end
clc;
clear;
close all;
warning off;
addpath 'func\'


%%%%重构时间比较(差异度测试)
I      = imread('1.bmp');
I      = im2double(I);
levels = [1 2 3];
pname ='pyr';
dname ='pkva';
type  ='NSCT';


[Insp,Insct]= myNSCTd(I,levels,pname,dname,type);
% IMf         = myNSCTr(Insct,levels,pname,dname,type);

figure;
imshow(I,[]);

figure;
imshow(abs(Insp{1,1}),[]);
figure;
imshow(abs(Insp{1,2}),[]);
figure;
imshow(abs(Insp{1,3}),[]);

三、MATLAB仿真测试结果

 A10-35

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Matlab中,可以使用NSCT(Non-Subsampled Contourlet Transform)方法对图像进行去噪处理。NSCT是一种基于小波变换图像去噪方法,对比传统的小波去噪方法,NSCT在保留图像边缘细节和纹理信息方面具有更好的效果。 首先,需要在Matlab中安装NSCT工具箱,然后读入需要去噪的图像。接下来,可以通过以下几个步骤实现NSCT图像去噪: 1. 将图像转换为灰度图像(如果原图像为彩色图像)。 2. 对图像进行NSCT变换。可以使用Matlab中的“nsctdec2”函数进行NSCT多尺度分解,将图像分解为不同尺度和不同方向的子带。 3. 对NSCT分解后的子带进行阈值处理。可以使用经验阈值或基于图像统计特性的自适应阈值方法对每个子带进行阈值处理。 4. 对处理后的子带进行NSCT变换。可以使用Matlab中的“nsctrec2”函数对处理后的子带进行逆变换,得到去噪后的图像。 具体的代码可以如下所示: ```matlab % 读入图像 img = imread('image.jpg'); % 将图像转换为灰度图像 img_gray = rgb2gray(img); % 进行NSCT变换 [nsct_coeffs, angles] = nsctdec2(img_gray, nlevels, filter_type); % 对子带进行阈值处理 threshold_coeffs = apply_threshold(nsct_coeffs, threshold_type, threshold_parameter); % 进行NSCT变换 denoised_img = nsctrec2(threshold_coeffs, angles, filter_type); % 显示去噪后的图像 imshow(denoised_img); ``` 以上代码中的`nlevels`是NSCT变换的尺度数,`filter_type`是NSCT变换所使用的滤波器类型,`threshold_type`是阈值处理方法(如硬阈值或软阈值),`threshold_parameter`是阈值大小。 通过调整阈值大小和其他参数,可以对图像进行不同程度的去噪效果控制。在实际应用中,可以根据具体的图像特性和需求进行参数调优,以达到更好的去噪效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fpga和matlab

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

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

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

打赏作者

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

抵扣说明:

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

余额充值