#include <processor.h>
Inheritance diagram for EMAN::LocalNormProcessor:
Public Member Functions | |
void | process_inplace (EMData *image) |
To process an image in-place. | |
virtual string | get_name () const |
Get the processor's name. | |
virtual string | get_desc () const |
Get the descrition of this specific processor. | |
virtual TypeDict | get_param_types () const |
Get processor parameter information in a dictionary. | |
Static Public Member Functions | |
static Processor * | NEW () |
Static Public Attributes | |
static const string | NAME = "normalize.local" |
threshold is an isosurface threshold at which all desired features are visible, radius is a normalization size similar to an lp= value.
threshold | an isosurface threshold at which all desired features are visible | |
radius | a normalization size similar to an lp= value | |
apix | Angstrom per pixel ratio |
Definition at line 5268 of file processor.h.
virtual string EMAN::LocalNormProcessor::get_desc | ( | ) | const [inline, virtual] |
Get the descrition of this specific processor.
This function must be overwritten by a subclass.
Implements EMAN::Processor.
Definition at line 5283 of file processor.h.
05284 { 05285 return "This processor attempts to perform a 'local normalization' so low density and high density features will be on a more even playing field in an isosurface display. threshold is an isosurface threshold at which all desired features are visible, radius is a feature size over which to equalize."; 05286 }
virtual string EMAN::LocalNormProcessor::get_name | ( | ) | const [inline, virtual] |
Get the processor's name.
Each processor is identified by a unique name.
Implements EMAN::Processor.
Definition at line 5273 of file processor.h.
References NAME.
05274 { 05275 return NAME; 05276 }
virtual TypeDict EMAN::LocalNormProcessor::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.
Reimplemented from EMAN::Processor.
Definition at line 5288 of file processor.h.
References EMAN::EMObject::FLOAT, and EMAN::TypeDict::put().
05289 { 05290 TypeDict d; 05291 d.put("threshold", EMObject::FLOAT, "an isosurface threshold at which all desired features are visible"); 05292 d.put("radius", EMObject::FLOAT, "a normalization size similar to an lp= value"); 05293 d.put("apix", EMObject::FLOAT, "Angstrom per pixel ratio"); 05294 return d; 05295 }
static Processor* EMAN::LocalNormProcessor::NEW | ( | ) | [inline, static] |
void LocalNormProcessor::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.
image | The image to be processed. |
Implements EMAN::Processor.
Definition at line 5828 of file processor.cpp.
References EMAN::EMData::copy(), EMAN::EMData::div(), EMAN::EMData::get_ysize(), LOGWARN, EMAN::EMData::mult(), EMAN::Processor::params, and EMAN::EMData::process_inplace().
05829 { 05830 if (!image) { 05831 LOGWARN("NULL Image"); 05832 return; 05833 } 05834 float apix = params["apix"]; 05835 float threshold = params["threshold"]; 05836 float radius = params["radius"]; 05837 05838 if (apix > 0) { 05839 int ny = image->get_ysize(); 05840 radius = ny * apix / radius; 05841 //printf("Norm filter radius=%1.1f\n", radius); 05842 } 05843 05844 EMData *blur = image->copy(); 05845 EMData *maskblur = image->copy(); 05846 05847 maskblur->process_inplace("threshold.binary", Dict("value", threshold)); 05848 maskblur->process_inplace("filter.lowpass.gauss", Dict("cutoff_pixels", radius)); 05849 // maskblur->process_inplace("filter.highpass.tanh", Dict("highpass", -10.0f)); 05850 maskblur->process_inplace("threshold.belowtozero", Dict("minval", 0.001f)); 05851 // maskblur->process_inplace("threshold.belowtozero", Dict("minval", 0.001f)); 05852 05853 05854 blur->process_inplace("threshold.belowtozero", Dict("minval", threshold)); 05855 blur->process_inplace("filter.lowpass.gauss", Dict("cutoff_pixels", radius)); 05856 // blur->process_inplace("filter.highpass.tanh", Dict("cutoff_abs", -10.0f)); 05857 05858 maskblur->div(*blur); 05859 image->mult(*maskblur); 05860 // maskblur->write_image("norm.mrc", 0, EMUtil::IMAGE_MRC); 05861 05862 if( maskblur ) 05863 { 05864 delete maskblur; 05865 maskblur = 0; 05866 } 05867 05868 if( blur ) 05869 { 05870 delete blur; 05871 blur = 0; 05872 } 05873 }
const string LocalNormProcessor::NAME = "normalize.local" [static] |