Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

EMAN::WaveletProcessor Class Reference

Perform a Wavelet transform using GSL. More...

#include <processor.h>

Inheritance diagram for EMAN::WaveletProcessor:

Inheritance graph
[legend]
Collaboration diagram for EMAN::WaveletProcessor:

Collaboration graph
[legend]
List of all members.

Public Member Functions

virtual void process_inplace (EMData *image)
 To process an image in-place.
virtual string get_name () const
 Get the processor's name.
virtual TypeDict get_param_types () const
 Get processor parameter information in a dictionary.
virtual string get_desc () const
 Get the descrition of this specific processor.

Static Public Member Functions

ProcessorNEW ()

Static Public Attributes

const string NAME = "basis.wavelet"

Detailed Description

Perform a Wavelet transform using GSL.

Author:
Steve Ludtke <sludtke@bcm.edu>
Date:
10/15/2006
Parameters:
type "daub", "harr", or "bspl"
dir 1 for forward transform, -1 for inverse transform
ord for Daubechies (4,6,8,...,20), for Harr (2), for B-Splines (103, 105, 202, 204, 206, 208, 301, 303, 305 307, 309)

Definition at line 6680 of file processor.h.


Member Function Documentation

virtual string EMAN::WaveletProcessor::get_desc  )  const [inline, virtual]
 

Get the descrition of this specific processor.

This function must be overwritten by a subclass.

Returns:
The description of this processor.

Implements EMAN::Processor.

Definition at line 6704 of file processor.h.

06705                 {
06706                         return "Computes the DWT (discrete wavelet transform) of an image in one of 3 possible bases";
06707                 }

virtual string EMAN::WaveletProcessor::get_name  )  const [inline, virtual]
 

Get the processor's name.

Each processor is identified by a unique name.

Returns:
The processor's name.

Implements EMAN::Processor.

Definition at line 6685 of file processor.h.

Referenced by process_inplace().

06686                 {
06687                         return NAME;
06688                 }

virtual TypeDict EMAN::WaveletProcessor::get_param_types  )  const [inline, virtual]
 

Get processor parameter information in a dictionary.

Each parameter has one record in the dictionary. Each record contains its name, data-type, and description.

Returns:
A dictionary containing the parameter info.

Reimplemented from EMAN::Processor.

Definition at line 6695 of file processor.h.

References EMAN::TypeDict::put().

06696                 {
06697                         TypeDict d;
06698                         d.put("type", EMObject::STRING, "'daub', 'harr' or 'bspl'");
06699                         d.put("dir", EMObject::INT, "1 for forward transform, -1 for inverse transform");
06700                         d.put("ord", EMObject::INT, "Daubechies (4,6,8,...,20), for Harr (2), for B-Splines (103, 105, 202, 204, 206, 208, 301, 303, 305 307, 309)");
06701                         return d;
06702                 }

Processor* EMAN::WaveletProcessor::NEW  )  [inline, static]
 

Definition at line 6690 of file processor.h.

06691                 {
06692                         return new WaveletProcessor();
06693                 }

void WaveletProcessor::process_inplace EMData image  )  [virtual]
 

To process an image in-place.

For those processors which can only be processed out-of-place, override this function to just print out some error message to remind user call the out-of-place version.

Parameters:
image The image to be processed.

Implements EMAN::Processor.

Definition at line 8206 of file processor.cpp.

References get_name(), EMAN::EMData::get_value_at(), EMAN::EMData::get_xsize(), EMAN::EMData::get_ysize(), EMAN::EMData::get_zsize(), ImageDimensionException, InvalidStringException, EMAN::Util::IsPower2(), LOGERR, nx, ny, and EMAN::EMData::set_value_at_fast().

08207 {
08208         if (image->get_zsize() != 1) {
08209                         LOGERR("%s Processor doesn't support 3D", get_name().c_str());
08210                         throw ImageDimensionException("3D model not supported");
08211         }
08212 
08213         int i,nx,ny;
08214         const gsl_wavelet_type * T;
08215         nx=image->get_xsize();
08216         ny=image->get_ysize();
08217 
08218         if (nx != ny && ny!=1) throw ImageDimensionException("Wavelet transform only supports square images");
08219 //      float l=log((float)nx)/log(2.0f);
08220 //      if (l!=floor(l)) throw ImageDimensionException("Wavelet transform size must be power of 2");
08221         if( !Util::IsPower2(nx) )  throw ImageDimensionException("Wavelet transform size must be power of 2");
08222 
08223         // Unfortunately GSL works only on double() arrays
08224         // eventually we should put our own wavelet code in here
08225         // but this will work for now
08226         double *cpy = (double *)malloc(nx*ny*sizeof(double));
08227 
08228         for (i=0; i<nx*ny; i++) cpy[i]=image->get_value_at(i,0,0);
08229 
08230         string tp = (const char*)params["type"];
08231         if (tp=="daub") T=gsl_wavelet_daubechies;
08232         else if (tp=="harr") T=gsl_wavelet_haar;
08233         else if (tp=="bspl") T=gsl_wavelet_bspline;
08234         else throw InvalidStringException(tp,"Invalid wavelet name, 'daub', 'harr' or 'bspl'");
08235 
08236         int K=(int)params["ord"];
08237         gsl_wavelet_direction dir;
08238         if ((int)params["dir"]==1) dir=forward;
08239         else dir=backward;
08240 
08241         gsl_wavelet *w = gsl_wavelet_alloc(T, K);
08242         gsl_wavelet_workspace *work = gsl_wavelet_workspace_alloc(nx);
08243 
08244         if (ny==1) gsl_wavelet_transform (w,cpy, 1, nx, dir, work);
08245         else gsl_wavelet2d_transform (w, cpy, nx,nx,ny, dir, work);
08246 
08247         gsl_wavelet_workspace_free (work);
08248         gsl_wavelet_free (w);
08249 
08250         for (i=0; i<nx*ny; i++) image->set_value_at_fast(i,0,0,static_cast<float>(cpy[i]));
08251 
08252         free(cpy);
08253 }


Member Data Documentation

const string WaveletProcessor::NAME = "basis.wavelet" [static]
 

Definition at line 211 of file processor.cpp.


The documentation for this class was generated from the following files:
Generated on Fri Aug 10 16:38:16 2012 for EMAN2 by  doxygen 1.3.9.1