日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

OMP算法实现人脸识别_matlab完整代码

發布時間:2023/12/19 循环神经网络 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OMP算法实现人脸识别_matlab完整代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OMP_FACE——人臉識別系統

該軟件包實現了基于稀疏表示的面部識別方法
程序相對便捷且易上手
主腳本中包含具體的一個例子
通常,通常遵循以下使用順序即可實現人臉識別功能:

  • 選擇訓練數據的數據庫途徑。
  • 選擇測試圖像。
  • 運行“training_data”功能以創建所有訓練圖像的二維矩陣。
  • 運行“omp_fun ”功能以生成beta。
  • 運行“recorgnize”功能以獲取訓練數據庫中識別圖像的名稱。
  • 為了方便起見,我準備了樣本培訓和測試數據庫,這些都是組成部分 。
    只需將培訓和測試數據庫放入指定的路徑
    然后跟隨對話框,該對話框將在運行
    “ main.m”時出現。

    _作者: M寶可夢 _E_mail: 1195653686@qq.com

    參考文獻:
    1.《Robust Face Recognition via Sparse Representation》John Wright
    2.《改進SRC算法在人臉識別中的應用》_雷明軍

    以下為完整的代碼塊,獲得人臉數據以及整個工程或交流算法可以聯系作者QQ1195653686

    function A = training_data(TrainingSetPath)% 此部分函數實現對訓練人臉數據庫的輸入和重新塑性 % TrainingSetPath: 訓練數據庫的存儲路徑TrainFiles = dir(TrainingSetPath);% 查詢 訓練類別的數目 Train_Class_Number = 0; for i = 1:size(TrainFiles,1)if not(strcmp(TrainFiles(i).name,'.')|strcmp(TrainFiles(i).name,'..')|strcmp(TrainFiles(i).name,'Thumbs.db'))Train_Class_Number = Train_Class_Number + 1; end endA = []; Each_Class_Train_Num = 5; % 令每一類下前五張圖像作為訓練圖像 for i = 1 : Train_Class_Numberstr='';if i <= 9str = strcat(TrainingSetPath,'\00',int2str(i),'\');elsestr = strcat(TrainingSetPath,'\0',int2str(i),'\');endfor j=1:Each_Class_Train_Numtmpstr='';tmpstr=strcat(str,'0',int2str(j),'.png');img=imread(tmpstr);if length(size(img))>2img=rgb2gray(img);endvecimg=double(reshape(img,1,size(img,1)*size(img,2)));A=cat(1,A,vecimg);endend A = A';end% 參考文獻 % 1.https://blog.csdn.net/jzwong/article/details/78446161 % 2.https://download.csdn.net/download/weixin_46257458/12185316 % OMP的函數 % s-測量; % T-觀測矩陣; % N-向量大小 function hat_y=omp_fun(s,T,K) N = size(T,2); Size=size(T); % 觀測矩陣大小 M=Size(1); % 測量 hat_y=zeros(1,N); % 待重構的譜域(變換域)向量 Aug_t=[]; % 增量矩陣(初始值為空矩陣) r_n=s; % 殘差值 for times=1:K % 迭代次數(稀疏度是測量的1/4)for col=1: N % 恢復矩陣的所有列向量product(col)=abs(T(:,col)'*r_n); % 恢復矩陣的列向量和殘差的投影系數(內積值) end[~, pos]=max(product); % 最大投影系數對應的位置Aug_t=[Aug_t,T(:,pos)]; % 矩陣擴充T(:,pos)=zeros(M,1); % 選中的列置零(實質上應該去掉,為了簡單我把它置零)aug_y=(Aug_t'*Aug_t)^(-1)*Aug_t'*s; % 最小二乘,使殘差最小r_n=s-Aug_t*aug_y; % 殘差pos_array(times)=pos; % 紀錄最大投影系數的位置if sum(r_n.^2) < 1e-6 % 殘差足夠小break;end end hat_y(pos_array)=aug_y; % 重構的向量 end% 參考文獻: % 1.https://zhuanlan.zhihu.com/p/52276805 % 2.https://blog.csdn.net/xiaoxiao133/article/details/90228898 function [Equivalent_Image] = recorgnize(beta,TrainingSetPath)% % 識別: 根據beta所查詢出的與測試圖像相關性最強的訓練圖像的位置 % 找出匹配類別下的類別名和圖像名 % 由此確定匹配圖像的名稱,便于下一步的顯示 %[m, ith] = max(beta); temp = ith; ith = rem( ith,5 ); if ith == 0temp = ((temp-ith)/5); elsetemp = ((temp-ith)/5)+1; end if temp <=9if ith == 0Equivalent_Image = strcat(TrainingSetPath,'\00',int2str(temp),'\0',int2str(5),'.png');elseEquivalent_Image = strcat(TrainingSetPath,'\00',int2str(temp),'\0',int2str(ith),'.png');end elseif ith == 0Equivalent_Image = strcat(TrainingSetPath,'\0',int2str(temp),'\0',int2str(5),'.png');elseEquivalent_Image = strcat(TrainingSetPath,'\0',int2str(temp),'\0',int2str(ith),'.png');end end % % 主函數控制實現各函數調用% 說明: _只需修改本腳本中第19行測試圖像的名稱即可,修改原則見18% _選定人臉數據庫為ORL,共計40個人,每個人下10張圖像,共計400張圖片 % _該測試選取了每個人下的五張圖片作為訓練數據集 %clear; clc;% 選擇訓練人臉數據庫所在的文件 TrainingSetPath = uigetdir(); A = training_data(TrainingSetPath);% 輸入需要測試的人臉圖像,修改文件路徑后,只需修改類別路徑和圖像名稱 Test_Image = 'C:\Users\yuson\Desktop\OMP_FACE\FaceDB_orl\011\09.png';% 對測試圖像進行重塑 y = imread(Test_Image); y = double(reshape(y,size(y,1)*size(y,2),1));% OMP 算法尋找于測試人臉圖像相關性最強的訓練圖像 beta = omp_fun(y,A,200); Equivalent_Image = recorgnize(beta,TrainingSetPath);% 對測試圖像和訓練圖像進行顯示 imshow(Test_Image); title('Test Image'); figure; imshow(Equivalent_Image); title('Equivalent Image');

    以下為某次的實驗結果

    總結

    以上是生活随笔為你收集整理的OMP算法实现人脸识别_matlab完整代码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。