SR(稀疏表示)人臉識別

2021-08-14 12:24:42 字數 1800 閱讀 9445

寫在最前面的,我寫的這思路大概率不對。稀疏表示的實現例子:

(大概率不對) 1

、利用pca

得到的特徵向量做字典 2

、取訓練集乘以該特徵向量,得到在字典空間下的係數 3

、測試集乘以該特徵向量,此結果與2做內積,內積最大值的位置所屬的類別即為

該測試的分類。

pca得到特徵向量u的方法請看上篇:

%%做字典學習

usr = trainset * u(:,1:100);%訓練集降維到100維,並將其作為字典

usr_norm=usr*diag(1./sqrt(sum(usr.^2))); %字典原子單位化,即每列的norm為1

test = zeros(120,50*40);

sr_success = 0;

for l = 14 :14:img_num %取每個人的最後一張**做測試。

sr_image_name = img_path_list(l).name;% 影象名

img = imread(strcat(file_path,sr_image_name));

img = double(img);

k = l/14;

test(k, :) = img(:);

test(k,:) = test(k,:)/norm(test(k,:));%單位化

x = test(k,:);

x = x * u(:,1:100);%測試集降維到100維

residual=x'; %測試集求轉置

l=100;%稀疏度

index=zeros(l,100);

for i=1:l

proj=usr_norm*residual;%usr_norm轉置與residual相乘,得到與residual與usr_norm每一行的內積值

[maxval,pos]=max(proj);%找到內積最大值的位置

pos=pos(1);%若最大值不止乙個,取第乙個

%index(i)=pos;%將這個位置存入索引集的第j個值

%下面注釋的內容是求殘差,老報錯。。不過好像也用不到,先挖坑吧。。。

%usr_t = usr_norm(:,index(1:i));

%a=pinv(usr_norm(:,index(1:i))*x);%indx(1:j)表示第一列前j個元素,pinv 表示偽逆矩陣,即求不是方陣的逆陣,好像叫廣義逆陣吧。。

%residual=x-usr_norm(:,index(1:i))*a;

% res=norm(residual);

% if res< 1e-6

% break;

%end

endlocate = ceil(pos/13);%除以13上取整,即為所屬類

if(locate<10)

locate = num2str(locate);

locate = strcat('00',locate);

elseif (locate<100)

locate = num2str(locate);

locate = strcat('0',locate);

else

locate = num2str(locate);

endname = sr_image_name(1:3);%取當前的前三位用於判斷是否分類正確

if strcmp(name,locate)

sr_success = sr_success + 1;

endend

最後再說一句,這個真的可能不對啊。。這篇看看就好,認真你就輸了。。。。

稀疏表示SR筆記

最近在查sr的資料 a general framework for image fusion based on multi scale transform and sparse representation 結合大神門的部落格寫一下我自己的理解,作個筆記。稀疏表示的本質是訊號擬合的問題,使用稀疏字典...

SRC稀疏表示人臉識別

假設 所有人的臉部影象都有某些共性 優點 訓練簡單 可以識別有遮擋的人臉 演算法 主要思路 公司一共有3個人 資料庫中有大東,大西,大北三個人的影象各一張 長w,寬h 將三張排成三列 今天大東來上班了,他來到門 們用立刻攝像頭拍攝他的一張 y 因為所有人的 都有共性,我們希望用資料庫中的人臉來表示y...

稀疏表示學習

1.提出問題 什麼是稀疏表示 假設我們用乙個m n的矩陣表示資料集x,每一行代表乙個樣本,每一列代表樣本的乙個屬性,一般而言,該矩陣是稠密的,即大多數元素不為0。稀疏表示的含義是,尋找乙個係數矩陣a k n 以及乙個字典矩陣b m k 使得b a盡可能的還原x,且a盡可能的稀疏。a便是x的稀疏表示。...