#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 6853 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 6878 of file processor.h.
06879 { 06880 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"; 06881 }
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 6860 of file processor.h.
References NAME.
06861 { 06862 return NAME; 06863 }
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 6870 of file processor.h.
References EMAN::EMObject::BOOL, EMAN::EMObject::INT, and EMAN::TypeDict::put().
06871 { 06872 TypeDict d; 06873 d.put("nbins", EMObject::INT, "The number of bins the pixel values will be compressed into"); 06874 d.put("debug", EMObject::BOOL, "Outputs debugging information (number of pixels per bin)"); 06875 return d; 06876 }
static Processor* EMAN::HistogramBin::NEW | ( | ) | [inline, static] |
Definition at line 6865 of file processor.h.
References HistogramBin().
06866 { 06867 return new HistogramBin(); 06868 }
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 9181 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().
09182 { 09183 float min = image->get_attr("minimum"); 09184 float max = image->get_attr("maximum"); 09185 float nbins = (float)params.set_default("nbins",default_bins); 09186 bool debug = params.set_default("debug",false); 09187 09188 vector<int> debugscores; 09189 if ( debug ) { 09190 debugscores = vector<int>((int)nbins, 0); 09191 } 09192 09193 if ( nbins < 0 ) throw InvalidParameterException("nbins must be greater than 0"); 09194 09195 float bin_width = (max-min)/nbins; 09196 float bin_val_offset = bin_width/2.0f; 09197 09198 size_t size = image->get_size(); 09199 float* dat = image->get_data(); 09200 09201 for(size_t i = 0; i < size; ++i ) { 09202 float val = dat[i]; 09203 val -= min; 09204 int bin = (int) (val/bin_width); 09205 09206 // This makes the last interval [] and not [) 09207 if (bin == nbins) bin -= 1; 09208 09209 dat[i] = min + bin*bin_width + bin_val_offset; 09210 if ( debug ) { 09211 debugscores[bin]++; 09212 } 09213 } 09214 09215 if ( debug ) { 09216 int i = 0; 09217 for( vector<int>::const_iterator it = debugscores.begin(); it != debugscores.end(); ++it, ++i) 09218 cout << "Bin " << i << " has " << *it << " pixels in it" << endl; 09219 } 09220 09221 }
int EMAN::HistogramBin::default_bins [protected] |
const string HistogramBin::NAME = "histogram.bin" [static] |