#include <processor.h>


Public Member Functions | |
| AreaProcessor () | |
| void | process_inplace (EMData *image) |
| To process an image in-place. | |
| void | set_params (const Dict &new_params) |
| Set the processor parameters using a key/value dictionary. | |
| TypeDict | get_param_types () const |
| Get processor parameter information in a dictionary. | |
| string | get_desc () const |
| Get the descrition of this specific processor. | |
Protected Member Functions | |
| virtual void | process_pixel (float *pixel, float, float, float, float *area_matrix) const |
| virtual void | create_kernel () const =0 |
Protected Attributes | |
| int | areasize |
| int | matrix_size |
| float * | kernel |
| int | nx |
| int | ny |
| int | nz |
This is the base class. Specific AreaProcessor needs to implement function create_kernel().
| areasize | The width of the area to process (not radius) |
Definition at line 2610 of file processor.h.
| EMAN::AreaProcessor::AreaProcessor | ( | ) | [inline] |
| void AreaProcessor::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 1140 of file processor.cpp.
References areasize, create_kernel(), data, EMAN::EMData::get_data(), EMAN::EMData::get_xsize(), EMAN::EMData::get_ysize(), EMAN::EMData::get_zsize(), kernel, LOGWARN, matrix(), matrix_size, nx, ny, nz, process_pixel(), EMAN::EMData::update(), x, and y.
01141 { 01142 if (!image) { 01143 LOGWARN("NULL Image"); 01144 return; 01145 } 01146 01147 float *data = image->get_data(); 01148 01149 nx = image->get_xsize(); 01150 ny = image->get_ysize(); 01151 nz = image->get_zsize(); 01152 01153 int n = (areasize - 1) / 2; 01154 matrix_size = areasize * areasize; 01155 01156 if (nz > 1) { 01157 matrix_size *= areasize; 01158 } 01159 01160 float *matrix = new float[matrix_size]; 01161 kernel = new float[matrix_size]; 01162 01163 int cpysize = areasize * (int) sizeof(float); 01164 int start = (nx * ny + nx + 1) * n; 01165 01166 int xend = nx - n; 01167 int yend = ny - n; 01168 01169 int zstart = n; 01170 int zend = nz - n; 01171 01172 int zbox_start = 0; 01173 int zbox_end = areasize; 01174 01175 if (nz == 1) { 01176 zstart = 0; 01177 zend = 1; 01178 zbox_end = 1; 01179 } 01180 01181 size_t nsec = (size_t)nx * (size_t)ny; 01182 int box_nsec = areasize * areasize; 01183 01184 create_kernel(); 01185 01186 size_t total_size = (size_t)nx * (size_t)ny * (size_t)nz; 01187 float *data2 = new float[total_size]; 01188 memcpy(data2, data, total_size * sizeof(float)); 01189 01190 size_t k; 01191 for (int z = zstart; z < zend; z++) { 01192 for (int y = n; y < yend; y++) { 01193 for (int x = n; x < xend; x++) { 01194 01195 k = z * nsec + y * nx + x; 01196 01197 for (int bz = zbox_start; bz < zbox_end; bz++) { 01198 for (int by = 0; by < areasize; by++) { 01199 memcpy(&matrix[bz * box_nsec + by * areasize], 01200 &data2[k - start + bz * nsec + by * nx], cpysize); 01201 } 01202 } 01203 01204 process_pixel(&data[k], (float) x, (float) y, (float) z, matrix); 01205 } 01206 } 01207 } 01208 01209 if( matrix ) 01210 { 01211 delete[]matrix; 01212 matrix = 0; 01213 } 01214 01215 if( kernel ) 01216 { 01217 delete[]kernel; 01218 kernel = 0; 01219 } 01220 image->update(); 01221 }
| void EMAN::AreaProcessor::set_params | ( | const Dict & | new_params | ) | [inline, virtual] |
Set the processor parameters using a key/value dictionary.
| new_params | A dictionary containing the new parameters. |
Reimplemented from EMAN::Processor.
Definition at line 2619 of file processor.h.
References areasize, and EMAN::Processor::params.
| TypeDict EMAN::AreaProcessor::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 2625 of file processor.h.
References EMAN::EMObject::INT, and EMAN::TypeDict::put().
02626 { 02627 TypeDict d; 02628 d.put("areasize", EMObject::INT, "The width of the area to process (not radius)"); 02629 return d; 02630 }
| string EMAN::AreaProcessor::get_desc | ( | ) | const [inline, virtual] |
Get the descrition of this specific processor.
This function must be overwritten by a subclass.
Implements EMAN::Processor.
Reimplemented in EMAN::LaplacianProcessor, and EMAN::ZeroConstantProcessor.
Definition at line 2632 of file processor.h.
02633 { 02634 return "AreaProcessor use pixel values and coordinates of a real-space square area. This is the base class. Specific AreaProcessor needs to implement function create_kernel()."; 02635 }
| virtual void EMAN::AreaProcessor::process_pixel | ( | float * | pixel, | |
| float | , | |||
| float | , | |||
| float | , | |||
| float * | area_matrix | |||
| ) | const [inline, protected, virtual] |
Reimplemented in EMAN::ZeroConstantProcessor.
Definition at line 2638 of file processor.h.
References kernel, and matrix_size.
Referenced by process_inplace().
02639 { 02640 for (int i = 0; i < matrix_size; i++) 02641 { 02642 *pixel += area_matrix[i] * kernel[i]; 02643 } 02644 }
| virtual void EMAN::AreaProcessor::create_kernel | ( | ) | const [protected, pure virtual] |
Implemented in EMAN::LaplacianProcessor, and EMAN::ZeroConstantProcessor.
Referenced by process_inplace().
int EMAN::AreaProcessor::areasize [protected] |
Definition at line 2648 of file processor.h.
Referenced by EMAN::LaplacianProcessor::create_kernel(), process_inplace(), and set_params().
int EMAN::AreaProcessor::matrix_size [protected] |
float* EMAN::AreaProcessor::kernel [protected] |
Definition at line 2650 of file processor.h.
Referenced by EMAN::LaplacianProcessor::create_kernel(), process_inplace(), and process_pixel().
int EMAN::AreaProcessor::nx [protected] |
int EMAN::AreaProcessor::ny [protected] |
int EMAN::AreaProcessor::nz [protected] |
Definition at line 2653 of file processor.h.
Referenced by EMAN::LaplacianProcessor::create_kernel(), and process_inplace().
1.5.6