Faq how to automate PCA analysis for multiple images

From Eigenvector Research Documentation Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Issue:

How do I automate PCA analysis for multiple images?

Possible Solutions:

Because the version of IMGPCA provided in the standard PLS_Toolbox requires some inputs to operate, IMGPCA is not well suited to automated analysis. Although future versions of the PLS_Toolbox will allow this, the current version requires you use the basic PCA routine and handle the image aspects yourself.

First, create a preprocessing structure use the preprocess function:

>> s = preprocess;

This will bring up a dialog box that lets you specify what preprocessing you want. When you click "OK" it will return a preprocessing structure, s. (Alternatively, you can request the preprocessing method directly using the 'default' keyword. See "preprocess help" for more information.)

s = 
    description: 'Mean Center' 
      calibrate: {'[data,out{1}] = mncn(data);'} 
          apply: {'data = scale(data,out{1});'} 
           undo: {'data = rescale(data,out{1});'} 
            out: {} 
    settingsgui:  
  settingsonadd: 0 
    usesdataset: 0 
     caloutputs: 1 
        keyword: 'Mean Center' 
       userdata: [] 

Next, create a PCA options structure using:

>> opts = pca('options') 
opts = 
           name: 'options' 
        display: 'on' 
          plots: 'final' 
  outputversion: 3 
  preprocessing: {[]} 
   blockdetails: 'standard' 

then put the preprocessing structure s into this:

>> opts.preprocessing{1} = s 
opts = 
           name: 'options' 
        display: 'on' 
          plots: 'final' 
  outputversion: 3 
  preprocessing: {[1x1 struct]} 
   blockdetails: 'standard' 

Turn off the display, and turn the plots to 'none':

>> opts.display = 'off';
>> opts.plots = 'none'; 

Take you data and reshape it to number of pixels by number of channels (3 in your case) using the reshape function.

>> data = reshape(data,size(data,1)*size(data,2),size(data,3)); 

Then use the PCA function like:

>> model = pca(data,2,opts); 

The loadings will be in the model.loads field.


Still having problems? Please contact our helpdesk at helpdesk@eigenvector.com