人脸识别 数字图像处理_数字图像处理人脸识别 - CSDN
  • Image Processing Basics

    AI: 图像处理基础(Image Processing Basics)

    注:基本部分来自MPP,参加MPP的学习笔记,以方便学习理解和记忆。

    一,灰度处理(Grayscale)

    计算机在处理图像时,图像是一串0-255数字组成三维数组。如下图:

    这是一幅AI全家福照片,作为一个数字图像,它实际可以用一个数组表示像素强度在0到255之间的数字来表示。
    。如图右下侧的三维数字来表示,不同的维度分别代表红色,绿色和蓝色。


    如果把图片的颜色去掉,仅仅使用一个二维数组就可以了。如下图,计算机用一个二维数组来展示这个图像。


    灰度处理的方法很多,这里仅仅介绍使用Python的方法,这部分我没有使用课件的代码;示例1

    #引入包
    import matplotlib.pyplot as plt
    %matplotlib inline
    import numpy as np
    #读取文件
    zhima=plt.imread('芝麻.jpg')
    plt.imshow(zhima)
    #转变需要的类型,并且产生噪声,显示最后的图片
    zhima_noisy=zhima.copy().astype(float)
    zhima_noisy+=zhima_noisy.std()*0.3*np.random.standard_normal(zhima_noisy.shape)
    plt.imshow(zhima_noisy)
    #查看形状
    zhima.shape
    #输出结果为:(662, 1000, 3)
    平均值法
    #聚合操作后就减少了一个维度了
    zhima_mean=zhima.mean(axis=2)
    zhima_mean.shape
    #输出结果为:(662, 1000)
    plt.imshow(zhima_mean,cmap='gray')
    #最大值法
    zhima_max=zhima.max(axis=-1)
    zhima_max.shape
    plt.imshow(zhima_max,cmap='gray')
    RGB三原色法
    gravity= np.array([0.299,0.587,0.114])
    #red*0.299+green*0.587+blue*0.114
    #矩阵乘法
    zhima_gravity=np.dot(zhima,gravity)
    zhima_gravity.shape
    plt.imshow(zhima_gravity,cmap='gray')

    示例2

    import matplotlib.pyplot as plt
    
    from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets
    
    mnist = read_data_sets('MNIST_data', one_hot=False)
    x, y = mnist.test.next_batch(1)
    x = x.reshape([28, 28])
    
    fig = plt.figure()
    # Method1 
    ax1 = fig.add_subplot(221)
    ax1.imshow(x, cmap=plt.cm.gray)
    
    # Method2: 反转色
    ax2 = fig.add_subplot(222)
    ax2.imshow(x, cmap=plt.cm.gray_r) # r表示reverse
    
    # Method3(等价于Method1)
    ax3 = fig.add_subplot(223)
    ax3.imshow(x, cmap='gray')
    
    # Method4(等价于Method2)
    ax4 = fig.add_subplot(224)
    ax4.imshow(x, cmap='gray_r')
    
    plt.show() 
    plt.savefig("gray.png")

    图像的灰度直方图能够很直观的展示图像中灰度级的整体分布情况,对图像的后续处理有很好的指导作用。

    二,均衡处理(Equalization)

    均衡处理之前先来对比2个图片,左侧为均衡处理之前,右侧为均衡处理之后。


    为什么要做图像的均衡处理:

          假如图像的灰度分布不均匀,其灰度分布集中在较窄的范围内,使图像的细节不够清晰,对比度较低。通常采用直方图均衡化直方图规定化两种变换,使图像的灰度范围拉开或使灰度均匀分布,从而增大反差,使图像细节清晰,以达到增强的目的。
    直方图均衡化,对图像进行非线性拉伸,重新分配图像的灰度值,使一定范围内图像的灰度值大致相等。这样,原来直方图中间的峰值部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较为平坦的直方图。

    图像均衡处理示例代码1

    ********************************************************************************************
     均衡原图-(直方图基本操作)
     *******************************************************************************************/
    void InitMappingTable(void * arry,int size,int Data_type){
        if(Data_type==TABLE_INT)
            for(int i=0;i<size;i++)
                ((int*)arry)[i]=0;
        else if(Data_type==TABLE_CHAR)
            for(int i=0;i<size;i++)
                ((char*)arry)[i]=0;
        else if(Data_type==TABLE_DOUBLE)
            for(int i=0;i<size;i++)
                ((double*)arry)[i]=0;
    
    }
    void InitHistogram(int *hist){
        for(int i=0;i<GRAY_LEVEL;i++)
            hist[i]=0;
    }
    
    void setHistogram(double *src,int *hist,int width,int height){
        InitHistogram(hist);
        for(int j=0;j<height;j++)
            for(int i=0;i<width;i++){
                int tempv=src[j*width+i];
                hist[tempv]++;
            }
    }
    int findHistogramMax(int *hist){
        for(int i=GRAY_LEVEL-1;i>=0;i--){
            if(hist[i]!=0)
                return i;
        }
        return -1;
    
    }
    int findHistogramMin(int *hist){
        for(int i=0;i<GRAY_LEVEL;i++){
            if(hist[i]!=0)
                return i;
        }
        return -1;
    }
    void fillMaptable(double * map){
    
        for(int i=1;i<GRAY_LEVEL;i++){
            if(map[i]==0)
                map[i]=map[i-1];
    
        }
    
    }
    /********************************************************************************************
     直方图均衡
     *******************************************************************************************/
    //均衡直方图,将原图直方图,经过公式得到目标直方图
    void EqualizationHist(int *src_hist,double *dst_map){
        int temphist[GRAY_LEVEL];
        InitHistogram(temphist);
        int max=findHistogramMax(src_hist);
        int min=findHistogramMin(src_hist);
        temphist[min]=src_hist[min];
        for(int i=min+1;i<=max;i++)
            temphist[i]=temphist[i-1]+src_hist[i];
        for(int i=max;i>=min;i--)//感谢pymess同学指正,之前的有问题
            temphist[i]-=temphist[min];
        int total=temphist[max];
        for(int i=min;i<=max;i++){
            dst_map[i]=((double)GRAY_LEVEL-1.0)*temphist[i]/total;
        }
    
    }
    //直方图均很,用输入图像得到输出图像
    void HistogramEqualization(double *src,double *dst,int width,int height){
        int hist[GRAY_LEVEL];
        setHistogram(src, hist, width, height);
        double GrayMappingTable[GRAY_LEVEL];
        InitMappingTable(GrayMappingTable,GRAY_LEVEL,TABLE_DOUBLE);
        EqualizationHist(hist, GrayMappingTable);
        for(int i=0;i<width;i++)
            for(int j=0;j<height;j++)
                dst[j*width+i]=GrayMappingTable[(int)src[j*width+i]];
    
    }

    图像均衡处理示例代码2 使用了一个函数来做。

    void equalization_self(const Mat &src, Mat &dst)
    {
        Histogram1D hist1D;
        MatND hist = hist1D.getHistogram(src);
    
        hist /= (src.rows * src.cols); // 对得到的灰度直方图进行归一化
        float cdf[256] = { 0 }; // 灰度的累积概率
        Mat lut(1, 256, CV_8U); // 灰度变换的查找表
        for (int i = 0; i < 256; i++)
        {
            // 计算灰度级的累积概率
            if (i == 0)
                cdf[i] = hist.at<float>(i);
            else
                cdf[i] = cdf[i - 1] + hist.at<float>(i);
    
            lut.at<uchar>(i) = static_cast<uchar>(255 * cdf[i]); // 创建灰度的查找表
        }
    
        LUT(src, lut, dst); // 应用查找表,进行灰度变化,得到均衡化后的图像
    
    }
         直方图的均衡化的是将一幅图像的直方图变平,使各个灰度级的趋于均匀分布,这样能够很好的增强图像对比度。直方图均衡化是一种自动化的变换,仅需要输入图像,就能够确定图像的变换函数。但是直方图的均衡化操作也有一定的确定,在均衡化的过程中对图像中的数据不加选择,这样有可能会增强图像的背景;变换后图像的灰度级减少,有可能造成某些细节的消失;会压缩图像直方图中的高峰,造成处理后图像对比度的不自然等。 

    三,过滤器(Filters)

           图像一般会有噪点,这些噪点模糊了细节,所以必须要做降噪处理,例如Filters。现在看如下图。

    处理前:


    降噪处理后一次,如下图,看上去这个图像比较模糊,要调整数字,重新处理;


    第二次降噪处理,蒙版数值减少10个值,如下图。看上去清楚多了。


      由于成像系统、传输介质和记录设备等的不完善,数字图像在其形成、传输记录过程中往往会受到多种噪声的污染。另外,在图像处理的某些环节当输入的像对象并不如预想时也会在结果图像中引入噪声。要构造一种有效抑制噪声的滤波器必须考虑两个基本问题:能有效地去除目标和背景中的噪声;同时,能很好地保护图像目标的形状、大小及特定的几何和拓扑结构特征。

    from PIL import Image
    from PIL import ImageFilter
    
    def image_filters_test():
    
        im = Image.open("lenna.jpg")
    
        #预定义的图像增强滤波器
        im_blur = im.filter(ImageFilter.BLUR)
        im_contour = im.filter(ImageFilter.CONTOUR)
    
        im_min = im.filter(ImageFilter.MinFilter(3))
    
        im.show()
        im_blur.show()
        im_contour.show()
        im_min.show()
    
        return

    示例代码二

    模糊滤波
    
    from PIL import Image, ImageFilter  
    im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")  
    bluF = im.filter(ImageFilter.BLUR)  
    bluF.show() 
    
    轮廓滤波
    
    from PIL import Image, ImageFilter  
    im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")  
    conF = im.filter(ImageFilter.CONTOUR)  
    conF.show()  
    
    细节滤波
    
    from PIL import Image, ImageFilter  
    im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")  
    detF = im.filter(ImageFilter.DETAIL)  
    detF.show()  
    
    最小值滤波
    
    from PIL import Image, ImageFilter  
    im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")  
    minF = im.filter(ImageFilter.MinFilter(5))  
    
    中值滤波
    
    from PIL import Image, ImageFilter  
    im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")  
    medF = im.filter(ImageFilter.MedianFilter(5))  
    medF.show() 
    
    最大值滤波
    
    from PIL import Image, ImageFilter  
    im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")  
    maxF = im.filter(ImageFilter.MaxFilter(5))  
    maxF.show()  





    展开全文
  • 数字图像处理技术与人脸识别 电子科技大学 格拉斯哥学院 2017/2018级 耿逸飞 2017200602025 序言 如今,随着科技的迅速发展,各大手机厂商对智能手机的研发也愈发深入。传统的手机解锁方式已经不足以满足各大手机...

    数字图像处理技术与人脸识别
    电子科技大学 格拉斯哥学院 2017/2018级 耿逸飞 2017200602025
    序言
    如今,随着科技的迅速发展,各大手机厂商对智能手机的研发也愈发深入。传统的手机解锁方式已经不足以满足各大手机厂商以及手机用户们,诸如华为、苹果等手机生产商早已将目光投向更加新颖的技术——人脸识别。顾名思义,人脸识别就是通过对每张脸的不同特征的辨识来实现对不同个体的脸的识别。尽管人们在人脸识别领域已经有了显著的成果,但是人脸识别技术依然有许多值得研究,更进一步的地方。

    一、人脸识别概要
    人脸识别作为一个很受欢迎的研究领域,有着自己的独到之处:
    1、人脸识别的两大主要用途:
    a.识别身份;
    b.验证身份
    2、人脸识别的重要性:
    a.人脸识别是一种容易实现,更为人熟悉的生物特征识别方式;
    b.人脸识别是人类视觉最杰出的能力之一,正是人脸识别这一功能,使得人类可以清楚地分辨不同的人之间的差别。

    二、人脸识别的主要过程
    人脸识别主要包括以下几个方面:人脸的检测与定位、人脸图像的预处理、人脸特征提取、分类识别等。
    人脸的检测与定位:从摄像头拍摄的场景中检测出人脸的存在,并从中分理出人脸的区域。
    人脸图像的预处理:矫正人脸的尺度、光照(明暗)、旋转(水平垂直)等,由此,程序可以得到一个较为标准、规范化的人脸图像。
    人脸特征提取:从经过预处理后的人脸图像中提取出人脸上具有代表性的特征信息,并用计算机语言进行描述。
    分类识别:根据前一步提取出的人脸特征信息,将这些信息与数据库中已获得的人脸信息进行比较,找出数据库中特征信息与该待测人脸的特征信息最相似的人脸。
    基于人脸识别的用途与研究现状,人脸特征提取与分类识别是人脸识别中最重要的两步。

    三、用计算机进行人脸识别的算法
    目前,经过研究,研究人员提出了近十种用于人脸识别的算法。这里,我将主要介绍特征脸方法(Eigenface或PCA:principal component analysis基于主成分分析)。
    特征子脸技术的基本思想是:从统计的观点,寻找人脸图像分布的基本元素,即人脸图像样本集协方差矩阵的特征向量,以此近似地表征人脸图像。这些特征向量称为特征脸(Eigenface)。
    实际上,特征脸反映了隐含在人脸样本集合内部的信息和人脸的结构关系。将眼睛、面颊、下颌的样本集协方差矩阵的特征向量称为特征眼、特征颌和特征唇,统称特征子脸。特征子脸在相应的图像空间中生成子空间,称为子脸空间。计算出测试图像窗口在子脸空间的投影距离,若窗口图像满足阈值比较条件,则判断其为人脸。
    基于特征分析的方法,也就是将人脸基准点的相对比率和其它描述人脸脸部特征的形状参数或类别参数等一起构成识别特征向量,这种基于整体脸的识别不仅保留了人脸部件之间的拓扑关系,而且也保留了各部件本身的信息,而基于部件的识别则是通过提取出局部轮廓信息及灰度信息来设计具体识别算法。现在Eigenface(PCA)算法已经与经典的模板匹配算法一起成为测试人脸识别系统性能的基准算法;而自1991年特征脸技术诞生以来,研究者对其进行了各种各样的实验和理论分析,FERET’96测试结果也表明,改进的特征脸算法是主流的人脸识别技术,也是具有最好性能的识别方法之一。
    该方法是先确定眼虹膜、鼻翼、嘴角等面像五官轮廓的大小、位置、距离等属性,然后再计算出它们的几何特征量,而这些特征量形成一描述该面像的特征向量。其技术的核心实际为“局部人体特征分析”和“图形/神经识别算法。”这种算法是利用人体面部各器官及特征部位的方法。如对应几何关系多数据形成识别参数与数据库中所有的原始参数进行比较、判断与确认。Turk和Pentland提出特征脸的方法,它根据一组人脸训练图像构造主元子空间,由于主元具有脸的形状,也称为特征脸 ,识别时将测试 图像投影到主元子空间上,得到一组投影系数,和各个已知人的人脸图像比较进行识别。Pentland等报告了相当好的结果,在 200个人的 3000幅图像中得到 95%的正确识别率,在FERET数据库上对 150幅正面人脸象只有一个误识别。但系统在进行特征脸方法之前需要作大量预处理工作如归一化等。
    在传统特征脸的基础上,研究者注意到特征值大的特征向量 (即特征脸 )并不一定是分类性能好的方向,据此发展了多种特征 (子空间 )选择方法,如Peng的双子空间方法、Weng的线性歧义分析方法、Belhumeur的FisherFace方法等。事实上,特征脸方法是一种显式主元分析人脸建模,一些线性自联想、线性压缩型BP网则为隐式的主元分析方法,它们都是把人脸表示为一些向量的加权和,这些向量是训练集叉积阵的主特征向量,Valentin对此作了详细讨论。总之,特征脸方法是一种简单、快速、实用的基于变换系数特征的算法。但是,由于它在本质上依赖于训练集和测试集图像的灰度相关性,而且要求测试图像与训练集比较像,所以它有着很大的局限性。

    四、人脸识别技术的不足与发展方向
    虽然,经过了数年的发展,人脸识别技术已经日渐成熟但仍然有许多不足以及技术上的难点:
    1、光照
    由于各种客观条件,我们无法保证在每次进行人脸识别的时候具有相同的光照条件,而不同强度的光线会导致在获取人脸时图像时成像与数据库中已保存的人脸信息差距较大,进而导致无法识别。解决该光照问题主要有三种方法:获取实时光照参数、进行光照补偿、灰度预处理等。但是,由于获取实时光照参数与进行光照补偿两种方法操作麻烦、难度高而且工作量大,所以不适合进行大量应用。还需要继续研究,寻找更优的解决办法。
    2、人脸的状态(姿势、表情等)
    人的面部表情千变万化,进行人脸识别时很难做到让被识别个体的面部处于与数据库完全相同的表情与姿势。人脸在现实中是一个三维物体,而成像以后的人脸图像是一个二维图像,所以,识别过程中头部的俯仰、脸部的表情势必会遮挡住或扭曲某些重要的人脸特征信息,从而影响人脸识别的进行。虽然,研究人员常用姿态补偿、姿态估计、表情估计等方法来解决这些问题,但是,这些方法都不能完美地克服这些问题。为了可以彻底解决这些问题,完善人脸识别技术,还需要更多的研究。
    3、缺少人脸资源
    由于人脸识别的研究从近几年才开始兴起,研究人员没有足够庞大的数据库用于研究,更是远远达不到投入实际运用的标准。
    五、总结
    人脸识别的方法很多,但是各自都有各自的不足之处,博采众长、克服局限性才能让人脸识别技术更上一层楼。若想使人脸识别技术更加完善,还需要努力研究。
    六、参考文献
    算法学习者的CSDN博客:https://blog.csdn.net/amds123/article/details/72742578
    刘世伟 数字图像处理 人脸识别:https://wenku.baidu.com/view/77aed9fda21614791611287a.html

    展开全文
  • 数字图像处理,觉得挺实用的而写这些东西。  首先需要我们提取人脸库,如一个公司,一所学校,把每个人的头像切下来。imcrop一下,截取成一个个小方框,就如南大标准脸那样的照片。 (:)是将矩阵

        把你的脸部识别出来这样高科技的东西,原来可以简单的实现,说是简单,其实不像之前的那些,这次写不出来,直接拿了高材生老师的代码来理解整个思路(请尊重他的知识产权),将算法读懂。数字图像处理,觉得挺实用的而写这些东西。


        首先需要我们提取人脸库,如一个公司,一所学校,把每个人的头像切下来。imcrop一下,截取成一个个小方框,就如南大标准脸那样的照片。


    (:)是将矩阵转成一列。n个人可以排成n列,存成一个库。为了让识别的效果更好,同一个人可以用多个图片取样。所以可以用个三维的矩阵存储。(这里一个人用了两张样照。)

    i 为 1  1  2  2  3  3  4  4

    k 为 1  2  1  2  1  2  1  2

    filelist=dir('*.bmp');
    FileNum=length(filelist);
    %for i=1:FileNum/2
    for j=1:FileNum
        inFilename = filelist(j).name;
        fa=imread(inFilename);
        fa=fa(:);
    %取整
        i=ceil(j/2);
        if mod(j,2) == 1
            k=1;
        else k=2;
        end
        FaceLib(:,k,i)=double(fa);
    end
    save FaceLib;
    
    save之后会保存为一个mat文件,通过load方法可将数据拿到。


    识别部分利用了PCA算法


    识别处理源码:

    load('FaceLab.mat'); %他人源码,未经同意不得随便转载 
    % filelist=dir('*.bmp');
    %inFilename = filelist.name;
    
    %读入识别图像
     testface = imread('test.bmp');
    % testface = rgb2gray(testface);
    % testface = imresize(testface, [128 128], 'bicubic');
    testface = double(testface(:));
    
    dim=size(StuFaceLab,1);
    tal=size(StuFaceLab,2);
    class=size(StuFaceLab,3);
    
    ell=2; % ell training sample;
    ellsample=1; % ellsample test sample;
    t=1e7; % Similarity matrix 的参数
    
    order=1;  
    dita=1e7; 
    NumTotal=ell*class;
    lpp=NumTotal-class;
    lda=class-1;
    polynomial=1;
    pca=40;
    
    %-------------------    KPCA       ------------------------------%
    Itr=zeros(dim,ell,class);  % Training sample feature vector
    for classnum=1:class
        for e=1:ell
    %         Itr(:,e,classnum)=Iv(:,e,classnum);  %
              Itr(:,e,classnum)=StuFaceLab(:,e,classnum);  %
        end    
    end
    
    %----------------------------------------------------------------%
    %   倒入向量 Iv(dim,ell)
    %   样本类数  class
    Imean=zeros(dim,1);
    for classnum=1:class
        for i=1:ell
            Imean=Imean+Itr(:,i,classnum); 
        end
    end
    
    Imean=(1/(ell*class))*Imean;     %求平均向量
    Q=zeros(dim,ell*class);
    for classnum=1:class
        for num=1:ell
            Q(:,num+(classnum-1)*ell)=Itr(:,num,classnum)-Imean(:,1);
        end
    end
    
    R=zeros(ell*class,ell*class);
    R=Q'*Q;    % R's size is ell * ell
    d=rank(R);
    d=pca;
    
    
    [U,L]=eigs(R,d,'LM');  % 求出 R 的eigenvector and eigenvalue
    Wpca=zeros(dim,d);
    for p=1:d
        Wpca(:,p)=(1/(sqrt(L(p,p))))*Q*U(:,p);
    end 
    
    % 程序至此得到了线形变换的矩阵  Wpca  .
    %----------------------------------------------------------------%
    Iy=zeros(d,ell,class); % training feature vector  %   
    for classnum=1:class
        for num=1:ell
            Y=zeros(d,1);
            Iy(:,num,classnum)=Wpca'*Itr(:,num,classnum);
        end
    end
    
      
            
    %---------------------------循环体开始-------------------------------%
            
    %       X=Tldalpp(:,img,cl);                     % X   input sample vector            %
            %以下为改进算法, 求每个类的 Z1 的平均值
    %         Iymean=zeros(dimension,class); 
            Iymean=zeros(d,class); % because there two training face, revised by Y.G.Wang
            for classnum=1:class              % Z1 :  the mean of Z1
                for i=1:ell
                    Iymean(:,classnum)=Iymean(:,classnum)+Iy(:,i,classnum); 
                end
                Iymean(:,classnum)=(1/ell)*Iymean(:,classnum);
            end
    
    %-------------------------进行匹配-------------------%
    %----------------此处可以进行修改,利用其他simlarity measure------------%
            
            G2=zeros(1,class); 
            
            for classnum=1:class   
                G2(1,classnum)=(X'*Iymean(:,classnum))/(norm(X)*norm(Iymean(:,classnum)));      
            end
    
            Sclass=max(G2);
            
    %---------------得出最后的结果---------------------%
            for classnum=1:class   
                if Sclass==G2(1,classnum)
                    lastresult=classnum;
                end   
            end
            clc
            if Sclass > 0.97
                fprintf('此脸在本库中,且是学号:%d\n', lastresult);
            else
                fprintf('此脸不在本库中!\n');
            end
    

    pca可以降维,因为如果这么大的一个矩阵数据进行处理匹配,速度肯定很慢,所以线性代数派上用场,一个这么大的矩阵,如果能得到两幅图像之间几乎相似的特征即可。


    而PCA的求解:对样本的散布矩阵进行特征值分解,所求子空间为过样本均值,以最大特征所对应的特征向量为方向的子空间。PCA是一种非监督的算法,能找到很好地代表所有样本的方向,但这个方向对于分类未必是最有利的。(转自降维(一)),有时,数学的用处就用上了。


    参考资料

    特征向量的几何意义,学线性代数学了很久,也搞不懂这个的东西,很好的一篇文章:

    http://blog.csdn.net/hexbina/article/details/7525850


    还有个12届毕业的师兄:

    http://www.cnblogs.com/blue-lg/archive/2012/05/14/2499581.html


    还有PCA方法从原理到实现。

    http://blog.csdn.net/celerychen2009/article/details/9048033#comments


       

    展开全文
  • 人脸识别分四步: 读入图像 预处理(高斯滤波) 模板匹配 获得位置 一定要转成灰度图才能进行操作 先说高斯滤波 高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对于抑制...

    吐血 之前写的居然没存??

    (一)

    人脸识别分四步:

    1. 读入图像
    2. 预处理(高斯滤波)
    3. 模板匹配
    4. 获得位置

    一定要转成灰度图才能进行操作

    先说高斯滤波

    • 高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。一维零均值高斯函数为: g(x)=exp( -x^2/(2 sigma^2) 

    • 高斯滤波器是利用高斯核的一个2维的卷积算子,用于图像模糊化(去除细节和噪声)   

    从数学角度来看,卷积的定义是:函数f(x)与g(x)的卷积写作f*g,定义为两个函数(在f(x)做翻转和平移变换后)乘积的积分,数学形式如下:

    [1]

     

    如果我们将积分离散化考虑,得到公式[ 2]

    [2]

    • 数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值,并最终滑动完所有图像的过程。 

    这里写图片描述

    卷积核就是卷积的模板

    1)卷积核的大小一般是奇数,这样的话它是按照中间的像素点中心对称的,所以卷积核一般都是3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。 
    2)卷积核所有的元素之和一般要等于1,这是为了原始图像的能量(亮度)守恒。其实也有卷积核元素相加不为1的情况,下面就会说到。 
    3)如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。 
    4)对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。
     

    高斯滤波的实现:

    (1)conv2D(m1,m2)逐像素,手写

    (2)filter2D

    Dst=cv2.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]

    (3)dst=cv2.GaussianBlur(src, ksize, sigma1[, dst[, sigma2[, borderType]]]) 
    Src:源图像
    Ksize:卷积核尺寸,可取(3,3) (5,5)等
    sigma1:x方向标准差

     

    模板匹配:

    #cv2提供的模板匹配函数
    res = cv.matchTemplate(dst, target, cv.TM_CCOEFF_NORMED)
    min_val,max_val,min_loc,max_loc = cv.minMaxLoc(res)
    print(min_loc)
    green = (255,0, 0)
    result = cv.rectangle(img,max_loc,min_loc,green)

    我的输入图和模板出来结果并不对,不知道哪里错了...

     

    (二)摄像头识别

     

     

     

     

     

     

     

     

     

     

                             

    展开全文
  • 简单人脸识别 思路 找到图像中连通域面积最大的那块连通域。 i=imread('face.jpg'); I=rgb2gray(i); BW=im2bw(I); %利用阈值值变换法将灰度图像转换成二进制图像 figure(1); imshow(BW); %最小化背景 [n1 n2]=...
  • 数字图像处理人脸识别的MATLAB程序,采用特征脸的人脸识别MATLAB程序.zip
  • 用于matlab人脸识别数字图像处理方面
  • 人脸识别图像处理领域的一个重要技术,是该领域非常活跃的研究课题。它是基于人类脸部特征信息进行身份识别的一种模式识别技术。由于人脸图像的特殊性,要使这项技术完全成熟并能够应用到现实生活中,还需要有很多...
  • 计算机/数字图像处理专业本科毕设——人脸识别系统 基于Python语言,建议使用ORL人脸数据图库。
  • 图像识别与人脸识别

    2018-12-20 18:07:28
    目录图像识别基础边缘检测亮度提升特征点检测图像的特征描述矩阵基于特征矩阵的物体识别人脸识别视频捕捉人脸定位 图像识别 基础 # -*- coding: utf-8 -*- from __future__ import unicode_literals import numpy as...
  • 本项目主要是为了熟悉C#和C++之间在图像处理中的使用,我们使用C++作为底层语言进行图像的各种处理。C#作为上层语言了做UI实现底层函数的调用。这种调用方式主要使用dll来实现。完整来讲就是使用C++ 调用OPENCV的...
  • 数字图像处理(MATLAB版)课程设计汇总(含源码、课设报告) 题目一、规范证件照 将各种不规范的二寸照,归一化为蓝色背景的标准二寸照。有部分数据。 题目二、三维人脸识别 题目三、表情识别 题目四、学生交头接耳...
  • OpenCV实现人脸识别

    2019-01-13 21:58:56
    这学期上《数字图像处理》这门课,然后想做一个人脸识别系统,从博客和相关书籍中看到OpenCV实现人脸识别系统十分简单。下面就代码和简单流程简单介绍下。 人脸检测 #include &amp;lt;opencv2/core.hpp&amp...
  • opencv 机器学习 人脸识别 图像图形处理总结, 入门学习
  • 人脸识别研究报告

    2018-11-06 11:55:38
    同时,伴随着数字图像相关的软硬件技术在人们生活中的广泛使用,数字图像已经成为当代社会信息来源的重要构成因素,各种图像处理与分析的需求和应用也不断促使该技术的革新。本研究报告对人脸识别这一课题进行了简单...
  • 人脸识别技术不但吸引了Google、Facebook、阿里、腾讯、百度等国内外互联网巨头的大量研发投入,也催生了Face++、商汤科技、Linkface、中科云从、依图等一大波明星创业公司,在视频监控、刑事侦破、互联网金融身份...
  • 数字图像处理概述

    2017-09-27 09:41:54
    1、数字图像处理发展史  20世纪20年代初期: 报纸业Bartlane 电缆图片传输系统,通过海底电缆将图像从伦敦传往纽约;为了使用电缆传输,图像需要首先编码,并在接收端通过电报打印机进行重构。  20世纪20年代...
  • 基于matlab的人脸识别课程设计(含代码),使用特征脸算法,利用matlab技术编写代码,实现人脸数据库的识别
  • 这些算法的涉及面非常广泛,包括模式识别图像处理、计算机视觉、人工智能、统计学习、神经网络、小波分析、子空间理论和流形学习等众多学科。所以很难用一个统一的标准对这些算法进行分类。根据输入数据形式的不同...
  • title: Android实现人脸识别(人脸检测)初识 categories: Android tags: 人脸识别 人脸检测 相机处理 date: 2020-05-21 11:35:51 介绍 本篇文章主要介绍一下移动端Android的人脸识别大致逻辑,后续文章会陆续...
1 2 3 4 5 ... 20
收藏数 14,213
精华内容 5,685
关键字:

人脸识别 数字图像处理