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

EMAN::BoxStatProcessor Class Reference

BoxStatProcessor files are a kind of neighborhood processors. More...

#include <processor.h>

Inheritance diagram for EMAN::BoxStatProcessor:

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

Collaboration graph
[legend]
List of all members.

Public Member Functions

void process_inplace (EMData *image)
 To process an image in-place.
TypeDict get_param_types () const
 Get processor parameter information in a dictionary.

Static Public Member Functions

static string get_group_desc ()
 Get the description of this group of processors.

Protected Member Functions

virtual void process_pixel (float *pixel, const float *array, int n) const =0

Detailed Description

BoxStatProcessor files are a kind of neighborhood processors.

These processors compute every output pixel using information from a reduced region on the neighborhood of the input pixel. The classical form are the 3x3 processors. BoxStatProcessors could perform diverse tasks ranging from noise reduction, to differential , to mathematical morphology. BoxStatProcessor class is the base class. Specific BoxStatProcessor needs to define process_pixel(float *pixel, const float *array, int n).

Parameters:
radius The radius of the search box, default is 1 which results in a 3x3 box (3 = 2xradius + 1)

Definition at line 2980 of file processor.h.


Member Function Documentation

static string EMAN::BoxStatProcessor::get_group_desc  )  [inline, static]
 

Get the description of this group of processors.

This function is defined in a parent class. It gives a introduction to a group of processors.

Returns:
The description of this group of processors.

Reimplemented from EMAN::Processor.

Definition at line 2985 of file processor.h.

02986                 {
02987                         return "BoxStatProcessor files are a kind of neighborhood processors. These processors compute every output pixel using information from a reduced region on the neighborhood of the input pixel. The classical form are the 3x3 processors. BoxStatProcessors could perform diverse tasks ranging from noise reduction, to differential , to mathematical morphology. BoxStatProcessor class is the base class. Specific BoxStatProcessor needs to define process_pixel(float *pixel, const float *array, int n).";
02988                 }

TypeDict EMAN::BoxStatProcessor::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.

Reimplemented in EMAN::PeakOnlyProcessor.

Definition at line 2990 of file processor.h.

References EMAN::EMObject::INT, and EMAN::TypeDict::put().

02991                 {
02992                         TypeDict d;
02993                         d.put("radius", EMObject::INT, "The radius of the search box, default is 1 which results in a 3x3 box (3 = 2xradius + 1)");
02994                         return d;
02995                 }

void BoxStatProcessor::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 1761 of file processor.cpp.

References data, EMAN::EMData::get_data(), EMAN::EMData::get_xsize(), EMAN::EMData::get_ysize(), EMAN::EMData::get_zsize(), LOGWARN, nx, ny, EMAN::Processor::params, process_pixel(), EMAN::Dict::set_default(), and EMAN::EMData::update().

01762 {
01763         if (!image) {
01764                 LOGWARN("NULL Image");
01765                 return;
01766         }
01767 
01768         int nx = image->get_xsize();
01769         int ny = image->get_ysize();
01770         int nz = image->get_zsize();
01771 
01772         int n = params.set_default("radius",1);
01773         int areasize = 2 * n + 1;
01774 
01775         int matrix_size = areasize * areasize;
01776         if (nz > 1) {
01777                 matrix_size *= areasize;
01778         }
01779 
01780         float *array = new float[matrix_size];
01781 //      image->process_inplace("normalize");
01782 
01783         float *data = image->get_data();
01784         size_t total_size = (size_t)nx * (size_t)ny * (size_t)nz;
01785         float *data2 = new float[total_size];
01786         memcpy(data2, data, total_size * sizeof(float));
01787 
01788         int z_begin = 0;
01789         int z_end = 1;
01790         int nzz=0;
01791         if (nz > 1) {
01792                 z_begin = n;
01793                 z_end = nz - n;
01794                 nzz=n;
01795         }
01796 
01797         int nxy = nx * ny;
01798 
01799         for (int k = z_begin; k < z_end; k++) {
01800                 size_t knxy = k * nxy;
01801 
01802                 for (int j = n; j < ny - n; j++) {
01803                         int jnx = j * nx;
01804 
01805                         for (int i = n; i < nx - n; i++) {
01806                                 size_t s = 0;
01807 
01808                                 for (int i2 = i - n; i2 <= i + n; i2++) {
01809                                         for (int j2 = j - n; j2 <= j + n; j2++) {
01810                                                 for (int k2 = k - nzz; k2 <= k + nzz; k2++) {
01811                                                         array[s] = data2[i2 + j2 * nx + k2 * nxy];
01812                                                         ++s;
01813                                                 }
01814                                         }
01815                                 }
01816 
01817                                 process_pixel(&data[i + jnx + knxy], array, matrix_size);
01818                         }
01819                 }
01820         }
01821 
01822         image->update();
01823 
01824         if( data2 )
01825         {
01826                 delete[]data2;
01827                 data2 = 0;
01828         }
01829 }

virtual void EMAN::BoxStatProcessor::process_pixel float *  pixel,
const float *  array,
int  n
const [protected, pure virtual]
 

Implemented in EMAN::BoxMedianProcessor, EMAN::BoxSigmaProcessor, EMAN::BoxMaxProcessor, EMAN::MinusPeakProcessor, and EMAN::PeakOnlyProcessor.

Referenced by process_inplace().


The documentation for this class was generated from the following files:
Generated on Mon Jul 19 13:06:49 2010 for EMAN2 by  doxygen 1.4.4