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

EMAN::CutoffBlockProcessor Class Reference

Block processor, val1 is dx/dy, val2 is lp freq cutoff in pixels. More...

#include <processor.h>

Inheritance diagram for EMAN::CutoffBlockProcessor:

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

Collaboration graph
[legend]
List of all members.

Public Member Functions

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

Static Public Member Functions

static ProcessorNEW ()

Static Public Attributes

static const string NAME = "eman1.filter.blockcutoff"

Detailed Description

Block processor, val1 is dx/dy, val2 is lp freq cutoff in pixels.

Mystery processor.

Parameters:
value1 val1 is dx/dy
value2 val2 is lowpass freq cutoff in pixels

Definition at line 3259 of file processor.h.


Member Function Documentation

string EMAN::CutoffBlockProcessor::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 3281 of file processor.h.

03282                 {
03283                         return "Block processor, val1 is dx/dy, val2 is lp freq cutoff in pixels. Mystery processor.";
03284                 }

string EMAN::CutoffBlockProcessor::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 3264 of file processor.h.

References NAME.

Referenced by process_inplace().

03265                 {
03266                         return NAME;
03267                 }

TypeDict EMAN::CutoffBlockProcessor::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 3273 of file processor.h.

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

03274                 {
03275                         TypeDict d;
03276                         d.put("value1", EMObject::FLOAT, "val1 is dx/dy");
03277                         d.put("value2", EMObject::FLOAT, "val2 is lowpass freq cutoff in pixels");
03278                         return d;
03279                 }

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

Definition at line 3268 of file processor.h.

03269                 {
03270                         return new CutoffBlockProcessor();
03271                 }

void CutoffBlockProcessor::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 1882 of file processor.cpp.

References data, EMAN::EMData::do_fft(), EMAN::EMData::get_clip(), EMAN::EMData::get_data(), get_name(), EMAN::EMData::get_xsize(), EMAN::EMData::get_ysize(), EMAN::EMData::get_zsize(), ImageDimensionException, LOGERR, LOGWARN, nx, ny, EMAN::Processor::params, t, EMAN::EMData::update(), x, and y.

01883 {
01884         if (!image) {
01885                 LOGWARN("NULL Image");
01886                 return;
01887         }
01888         int nz = image->get_zsize();
01889 
01890         if (nz > 1) {
01891                 LOGERR("%s Processor doesn't support 3D", get_name().c_str());
01892                 throw ImageDimensionException("3D model not supported");
01893         }
01894 
01895         int nx = image->get_xsize();
01896         int ny = image->get_ysize();
01897 
01898         float value1 = params["value1"];
01899         float value2 = params["value2"];
01900 
01901         int v1 = (int) value1;
01902         int v2 = (int) value2;
01903         if (v2 > v1 / 2) {
01904                 LOGERR("invalid value2 '%f' in CutoffBlockProcessor", value2);
01905                 return;
01906         }
01907 
01908         if (v2 <= 0) {
01909                 v2 = v1;
01910         }
01911 
01912         float *data = image->get_data();
01913         int y = 0, x = 0;
01914         for (y = 0; y <= ny - v1; y += v1) {
01915                 for (x = 0; x <= nx - v1; x += v1) {
01916 
01917                         EMData *clip = image->get_clip(Region(x, y, v1, v1));
01918                         EMData *fft = clip->do_fft();
01919 
01920                         float *fft_data = fft->get_data();
01921                         float sum = 0;
01922                         int nitems = 0;
01923 
01924                         for (int i = -v2; i < v2; i++) {
01925                                 for (int j = 0; j < v2; j++) {
01926                                         if (j == 0 && i == 0) {
01927                                                 continue;
01928                                         }
01929 
01930 #ifdef  _WIN32
01931                                         if (_hypot(j, i) < value2) {
01932 #else
01933                                         if (hypot(j, i) < value2) {
01934 #endif
01935                                                 int t = j * 2 + (i + v1 / 2) * (v1 + 2);
01936                                                 sum += (fft_data[t] * fft_data[t] + fft_data[t + 1] * fft_data[t + 1]);
01937                                                 nitems++;
01938                                         }
01939                                 }
01940                         }
01941 
01942                         if( clip )
01943                         {
01944                                 delete clip;
01945                                 clip = 0;
01946                         }
01947 
01948                         float mean = sum / nitems;
01949 
01950                         for (int i = y; i < y + v1; i++) {
01951                                 for (int j = x; j < x + v1; j++) {
01952                                         data[i * nx + j] = mean;
01953                                 }
01954                         }
01955                 }
01956         }
01957 
01958         memset(&data[y * nx], 0, (ny - y) * nx * sizeof(float));
01959 
01960         for (int i = 0; i < ny; i++) {
01961                 memset(&data[i * nx + x], 0, (nx - x) * sizeof(float));
01962         }
01963 
01964         image->update();
01965 }


Member Data Documentation

const string CutoffBlockProcessor::NAME = "eman1.filter.blockcutoff" [static]
 

Definition at line 3286 of file processor.h.

Referenced by get_name().


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