#include <processor.h>
Inheritance diagram for EMAN::HistogramBin:
Public Member Functions | |
HistogramBin () | |
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 Processor * | NEW () |
Static Public Attributes | |
static const string | NAME = "histogram.bin" |
Protected Attributes | |
int | default_bins |
The histogram is comprised of 'nbins' bins, and the value assigned to each pixel in the bin is the midpoint of the bin's upper and lower limits. Defaults to 256 bins
nbins | The number of bins the pixel values will be compressed into | |
debug | Outputs debugging information (number of pixels per bin) |
Definition at line 6895 of file processor.h.
EMAN::HistogramBin::HistogramBin | ( | ) | [inline] |
string EMAN::HistogramBin::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 6920 of file processor.h.
06921 { 06922 return "Bins pixel values, similar to calculating a histogram. The histogram is comprised of 'nbins' bins, and the value assigned to each pixel in the bin is the midpoint of the bin's upper and lower limits. Defaults to 256 bins"; 06923 }
string EMAN::HistogramBin::get_name | ( | ) | const [inline, virtual] |
Get the processor's name.
Each processor is identified by a unique name.
Implements EMAN::Processor.
Definition at line 6902 of file processor.h.
References NAME.
06903 { 06904 return NAME; 06905 }
TypeDict EMAN::HistogramBin::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 6912 of file processor.h.
References EMAN::EMObject::BOOL, EMAN::EMObject::INT, and EMAN::TypeDict::put().
06913 { 06914 TypeDict d; 06915 d.put("nbins", EMObject::INT, "The number of bins the pixel values will be compressed into"); 06916 d.put("debug", EMObject::BOOL, "Outputs debugging information (number of pixels per bin)"); 06917 return d; 06918 }
static Processor* EMAN::HistogramBin::NEW | ( | ) | [inline, static] |
Definition at line 6907 of file processor.h.
References HistogramBin().
06908 { 06909 return new HistogramBin(); 06910 }
void HistogramBin::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 9326 of file processor.cpp.
References default_bins, EMAN::EMData::get_attr(), EMAN::EMData::get_data(), EMAN::EMData::get_size(), InvalidParameterException, max, min, EMAN::Processor::params, and EMAN::Dict::set_default().
09327 { 09328 float min = image->get_attr("minimum"); 09329 float max = image->get_attr("maximum"); 09330 float nbins = (float)params.set_default("nbins",default_bins); 09331 bool debug = params.set_default("debug",false); 09332 09333 vector<int> debugscores; 09334 if ( debug ) { 09335 debugscores = vector<int>((int)nbins, 0); 09336 } 09337 09338 if ( nbins < 0 ) throw InvalidParameterException("nbins must be greater than 0"); 09339 09340 float bin_width = (max-min)/nbins; 09341 float bin_val_offset = bin_width/2.0f; 09342 09343 size_t size = image->get_size(); 09344 float* dat = image->get_data(); 09345 09346 for(size_t i = 0; i < size; ++i ) { 09347 float val = dat[i]; 09348 val -= min; 09349 int bin = (int) (val/bin_width); 09350 09351 // This makes the last interval [] and not [) 09352 if (bin == nbins) bin -= 1; 09353 09354 dat[i] = min + bin*bin_width + bin_val_offset; 09355 if ( debug ) { 09356 debugscores[bin]++; 09357 } 09358 } 09359 09360 if ( debug ) { 09361 int i = 0; 09362 for( vector<int>::const_iterator it = debugscores.begin(); it != debugscores.end(); ++it, ++i) 09363 cout << "Bin " << i << " has " << *it << " pixels in it" << endl; 09364 } 09365 09366 }
int EMAN::HistogramBin::default_bins [protected] |
const string HistogramBin::NAME = "histogram.bin" [static] |