Synthetic experiment for Regularized SimCO and K-SVD (including both dictionary update and sparse coding stages) 

The 'PlusOmpDemo' folder includes all files for experiments testing the whole dictionary learning process (the dictionary update and sparse coding) in SimCO and K-SVD. They are used to produce the simulation results in Figure 2(b) of the SimCO paper (http://arxiv.org/abs/1109.5302).

==================================================

SimCO is a novel framework that generalizes two methods: KSVD and MOD. It can update an arbitrary set of codewords and the corresponding sparse coefficients simultaneously:

References:
W. Dai, T. Xu, and W. Wang, 
"Simultaneous Codeword Optimization (SimCO) for Dictionary Update and Learning,"
submitted to IEEE Transactions on Signal Processing, October 2011.
Full text is available at http://arxiv.org/abs/1109.5302

If you find the software package useful, please cite the above reference in your work.

K-SVD is an algorithm finding a dictionary for linear representation of signals. Given a set of signals, it searches for the best dictionary that can sparsely represent each signal:

The detail can be found in: "The K-SVD: An Algorithm for Designing of Overcomplete Dictionaries for Sparse Representation", written by M. Aharon, M. Elad, and A. M. Bruckstein and appeared in the IEEE Trans. On Signal Processing, Vol. 54, no. 11, pp. 4311-4322, November 2006


==================================================

The core files for SimCO include the following three functions:


'DictUpdate03.m' implements the SimCO dictionary update stage. Using this function, the dictionary matrix can be produced from the training data. This function implements the second stage (i.e. dictionary update stage) of Algorithm 1, which iteratively calls "DictLineSearch03.m" and "fg_tilde_eval01.m", i.e. the implementation of Algorithm 2 in the SimCO paper (http://arxiv.org/abs/1109.5302).

'DictLineSearch03.m' updates the atoms of the dictionary in each iteration. This function implements Algorithm 2 in Section IV.A of the SimCO paper (http://arxiv.org/abs/1109.5302).

'fg_tilde_eval01.m' computes the gradient descent direction to be called by 'DictLineSearch03.m' in regularized SimCO version. In other words, this function computes equation (11) and (9) in Section IV.A of the SimCO paper (http://arxiv.org/abs/1109.5302).

'OMP.m' is the sparse coding algorithm to produce the coefficients from training data given the dictionary matrix. 


==================================================

The core file for K-SVD is included below for comparison purpose:

'K_DictUpdate02.m' the code for dictionary update stage in K-SVD.


==================================================

The test files are shown below:

'Main_regSimCO.m' tests the performance of the dictionary update stage in the regularized SimCO, and save results into file 'maindata_regSimCO'.

'Main_KSVD.m' tests the performance of the dictionary update stage in K-SVD, and save the results into 'maindata_KSVD'.

'mainplot.m' plots the performance results of the K-SVD and the regularized SimCO dictionary update only reading the results from 'maindata_KSVD' and 'maindata_regSimCO'.

'DictDist01.m' computes the average distance between original dictionary and learned dictionary. This is used in both 'Main_regSimCO.m' and 'Main_KSVD.m'.

'Dcondition.m' computes the condition number of the trained dictionary matrix. This function is only called in debug mode in DictUpdate03.m, i.e. when IPara.DebugFlag = 1.

==================================================

The folder 'Figures' includes the Figure 2(b) of the SimCO paper (http://arxiv.org/abs/1109.5302).
