diff DL/two-step DL/dico_color.m @ 152:485747bf39e0 ivand_dev

Two step dictonary learning - Integration of the code for dictionary update and dictionary decorrelation from Boris Mailhe
author Ivan Damnjanovic lnx <ivan.damnjanovic@eecs.qmul.ac.uk>
date Thu, 28 Jul 2011 15:49:32 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DL/two-step DL/dico_color.m	Thu Jul 28 15:49:32 2011 +0100
@@ -0,0 +1,46 @@
+function colors = dico_color(dico, mu)
+    % DICO_COLOR cluster a dictionary in pairs of high correlation atoms.
+    % Called by dico_decorr.
+    %
+    % Parameters:
+    % -dico: the dictionary
+    % -mu: the correlation threshold
+    %
+    % Result:
+    % -colors: a vector of indices. Two atoms with the same color have a 
+    % correlation greater than mu 
+    
+    numAtoms = length(dico);
+    colors = zeros(numAtoms, 1);
+    
+    % compute the correlations
+    G = abs(dico'*dico);
+    G = G-eye(size(G));
+    
+    % iterate on the correlations higher than mu
+    c = 1;   
+    maxCorr = max(max(G));
+    while maxCorr > mu
+        % find the highest correlated pair
+        x = find(max(G)==maxCorr, 1);
+        y = find(G(x,:)==maxCorr, 1);
+        
+        % color them
+        colors(x) = c;
+        colors(y) = c;
+        c = c+1;
+        
+        % make sure these atoms never get selected again
+        G(x,:) = 0;
+        G(:,x) = 0;
+        G(y,:) = 0;
+        G(:,y) = 0;
+        
+        % find the next correlation
+        maxCorr = max(max(G));
+    end
+    
+    % complete the coloring with singletons
+    index = find(colors==0);
+    colors(index) = c:c+length(index)-1;
+end