寫在最前面的,我寫的這思路大概率不對。稀疏表示的實現例子:
(大概率不對) 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的稀疏表示。...