#include <cmp.h>


Public Member Functions | |
| float | cmp (EMData *image, EMData *with) const |
| To compare 'image' with another image passed in through its parameters. | |
| string | get_name () const |
| Get the Cmp's name. | |
| string | get_desc () const |
| TypeDict | get_param_types () const |
| Get Cmp parameter information in a dictionary. | |
Static Public Member Functions | |
| static Cmp * | NEW () |
| negative | Returns -1 * dot product, default true | |
| normalize | Returns normalized dot product -1.0 - 1.0 |
Definition at line 308 of file cmp.h.
To compare 'image' with another image passed in through its parameters.
An optional transformation may be used to transform the 2 images.
| image | The first image to be compared. | |
| with | The second image to be comppared. |
Implements EMAN::Cmp.
Definition at line 478 of file cmp.cpp.
References ENTERFUNC, EXITFUNC, EMAN::EMData::get_array_offsets(), EMAN::EMData::get_xsize(), EMAN::EMData::get_ysize(), EMAN::EMData::get_zsize(), InvalidValueException, nx, ny, EMAN::Cmp::params, EMAN::EMData::set_array_offsets(), EMAN::Dict::set_default(), sqrt(), EMAN::Cmp::validate_input_args(), x, and y.
00479 { 00480 ENTERFUNC; 00481 validate_input_args(image, with); 00482 00483 if (image->get_zsize()!=1) throw InvalidValueException(0, "QuadMinDotCmp supports 2D only"); 00484 00485 int nx=image->get_xsize(); 00486 int ny=image->get_ysize(); 00487 00488 int normalize = params.set_default("normalize", 0); 00489 float negative = (float)params.set_default("negative", 1); 00490 00491 if (negative) negative=-1.0; else negative=1.0; 00492 00493 double result[4] = { 0,0,0,0 }, sq1[4] = { 0,0,0,0 }, sq2[4] = { 0,0,0,0 } ; 00494 00495 vector<int> image_saved_offsets = image->get_array_offsets(); 00496 vector<int> with_saved_offsets = with->get_array_offsets(); 00497 image->set_array_offsets(-nx/2,-ny/2); 00498 with->set_array_offsets(-nx/2,-ny/2); 00499 int i,x,y; 00500 for (y=-ny/2; y<ny/2; y++) { 00501 for (x=-nx/2; x<nx/2; x++) { 00502 int quad=(x<0?0:1) + (y<0?0:2); 00503 result[quad]+=(*image)(x,y)*(*with)(x,y); 00504 if (normalize) { 00505 sq1[quad]+=(*image)(x,y)*(*image)(x,y); 00506 sq2[quad]+=(*with)(x,y)*(*with)(x,y); 00507 } 00508 } 00509 } 00510 image->set_array_offsets(image_saved_offsets); 00511 with->set_array_offsets(with_saved_offsets); 00512 00513 if (normalize) { 00514 for (i=0; i<4; i++) result[i]/=sqrt(sq1[i]*sq2[i]); 00515 } else { 00516 for (i=0; i<4; i++) result[i]/=nx*ny/4; 00517 } 00518 00519 float worst=static_cast<float>(result[0]); 00520 for (i=1; i<4; i++) if (static_cast<float>(result[i])<worst) worst=static_cast<float>(result[i]); 00521 00522 EXITFUNC; 00523 return (float) (negative*worst); 00524 }
| string EMAN::QuadMinDotCmp::get_name | ( | ) | const [inline, virtual] |
| string EMAN::QuadMinDotCmp::get_desc | ( | ) | const [inline, virtual] |
| static Cmp* EMAN::QuadMinDotCmp::NEW | ( | ) | [inline, static] |
| TypeDict EMAN::QuadMinDotCmp::get_param_types | ( | ) | const [inline, virtual] |
Get Cmp parameter information in a dictionary.
Each parameter has one record in the dictionary. Each record contains its name, data-type, and description.
Implements EMAN::Cmp.
Definition at line 328 of file cmp.h.
References EMAN::EMObject::INT, and EMAN::TypeDict::put().
00329 { 00330 TypeDict d; 00331 d.put("negative", EMObject::INT, "If set, returns -1 * dot product. Default = true (smaller is better)"); 00332 d.put("normalize", EMObject::INT, "If set, returns normalized dot product -1.0 - 1.0."); 00333 return d; 00334 }
1.5.6