ivan@155: % K-SVD algorithm for Dictionary Learning ivan@155: % Y = input data (M X L matrix) ivan@155: % Phi = initial dictionary (M X N), e.g. random dictionary or first N data samples ivan@155: % lambda = regularization coefficient (||Phi*X-Y||_F)^2 + lambda*||X||_1 ivan@155: % IT = number of iterations ivan@155: function [Phiout,X,ert] = ksvd_cn(Y,Phi,lambda,IT) ivan@155: maxIT = 1000; ivan@155: [PhiN,PhiM] = size(Phi); ivan@155: RR1 = PhiM; ivan@155: %%%%%%%%%%%%%% ivan@155: % [PhiM,L] = size(ud); ivan@155: [PhiN,L] = size(Y); ivan@155: X = ones(PhiM,L); ivan@155: for it = 1:IT ivan@155: to = .1+svds(Phi,1); ivan@155: [PhiN,PhiM] = size(Phi); ivan@155: %%%% ivan@155: eps = 3*10^-4; ivan@155: map = 1; % Projecting on the selected space (0=no,1=yes) ivan@155: [X,l1err] = mm1(Phi,Y,X,to,lambda,maxIT,eps,map); %% Sparse approximation with Iterative Soft-thresholding ivan@155: ert(it) = l1err; ivan@155: %%% ivan@155: [Phi,X] = dict_update_KSVD_cn(Phi,Y,X); ivan@155: end ivan@155: Phiout = Phi;