OMP算法实现人脸识别_matlab完整代码
生活随笔
收集整理的這篇文章主要介紹了
OMP算法实现人脸识别_matlab完整代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
OMP_FACE——人臉識別系統
該軟件包實現了基于稀疏表示的面部識別方法
程序相對便捷且易上手
主腳本中包含具體的一個例子
通常,通常遵循以下使用順序即可實現人臉識別功能:
為了方便起見,我準備了樣本培訓和測試數據庫,這些都是組成部分 。
只需將培訓和測試數據庫放入指定的路徑
然后跟隨對話框,該對話框將在運行
“ main.m”時出現。
參考文獻:
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完整代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 赔偿N+3!OPPO终止芯片研发,低估了
- 下一篇: 四川地震预警平台上线微信