EMAN::RotateTranslateAlignerIterative Class Reference

Iterative rotational, translational alignment. More...

#include <aligner.h>

Inheritance diagram for EMAN::RotateTranslateAlignerIterative:

Inheritance graph
[legend]
Collaboration diagram for EMAN::RotateTranslateAlignerIterative:

Collaboration graph
[legend]
List of all members.

Public Member Functions

virtual EMDataalign (EMData *this_img, EMData *to_img, const string &cmp_name="dot", const Dict &cmp_params=Dict()) const
 To align 'this_img' with another image passed in through its parameters.
virtual EMDataalign (EMData *this_img, EMData *to_img) const
virtual string get_name () const
 Get the Aligner's name.
virtual string get_desc () const
virtual TypeDict get_param_types () const

Static Public Member Functions

static AlignerNEW ()

Static Public Attributes

static const string NAME = "rotate_translate_iterative"

Detailed Description

Iterative rotational, translational alignment.

Basically, we find the best translation, and move to that pointer then we find the best rotation and rotate to that point. Next we iterate X times.

Parameters:
maxshift Maximum translation in pixels
r1 inner ring
r2 outer ring
maxiter maximum number of alignment iterations
nozero Zero translation not permitted (useful for CCD images)
Author:
John Flanagan
Date:
Oct 2010

Definition at line 518 of file aligner.h.


Member Function Documentation

virtual EMData* EMAN::RotateTranslateAlignerIterative::align ( EMData this_img,
EMData to_img 
) const [inline, virtual]

Implements EMAN::Aligner.

Definition at line 524 of file aligner.h.

References align().

00525                 {
00526                         return align(this_img, to_img, "sqeuclidean", Dict());
00527                 }

EMData * RotateTranslateAlignerIterative::align ( EMData this_img,
EMData to_img,
const string &  cmp_name = "dot",
const Dict cmp_params = Dict() 
) const [virtual]

To align 'this_img' with another image passed in through its parameters.

The alignment uses a user-given comparison method to compare the two images. If none is given, a default one is used.

Parameters:
this_img The image to be compared.
to_img 'this_img" is aligned with 'to_img'.
cmp_name The comparison method to compare the two images.
cmp_params The parameter dictionary for comparison method.
Returns:
The aligned image.

Implements EMAN::Aligner.

Definition at line 569 of file aligner.cpp.

References EMAN::EMData::align(), EMAN::EMData::get_attr(), EMAN::Aligner::params, EMAN::EMData::process(), EMAN::EMData::set_attr(), EMAN::Dict::set_default(), and t.

Referenced by align().

00571 {
00572         int maxiter = params.set_default("maxiter", 3);
00573         
00574         Dict trans_params;
00575         trans_params["intonly"] = 0;
00576         trans_params["maxshift"] = params.set_default("maxshift", -1);
00577         trans_params["useflcf"] = params.set_default("useflcf",0);
00578         trans_params["nozero"] = params.set_default("nozero",false);
00579         
00580         Dict rot_params;
00581         rot_params["r1"] = params.set_default("r1", -1);
00582         rot_params["r2"] = params.set_default("r2", -1);
00583         
00584         Transform t;
00585         EMData * moving_img = this_img;
00586         for(int it = 0; it < maxiter; it++){
00587                 
00588                 // First do a translational alignment
00589                 EMData * trans_align = moving_img->align("translational", to, trans_params, cmp_name, cmp_params);
00590                 Transform * tt = trans_align->get_attr("xform.align2d");
00591                 t = *tt*t;
00592                 delete tt;
00593 
00594                 //now do rotation
00595                 EMData * rottrans_align = trans_align->align("rotational_iterative", to, rot_params, cmp_name, cmp_params);
00596                 Transform * rt = rottrans_align->get_attr("xform.align2d");
00597                 t = *rt*t;
00598                 delete trans_align; trans_align = 0;
00599                 delete rottrans_align; rottrans_align = 0;
00600                 delete rt;
00601                 
00602                 //this minimizes interpolation errors (all images that are futher processed will be interpolated at most twice)
00603                 if(it > 0){delete moving_img;}
00604                 
00605                 moving_img = this_img->process("xform",Dict("transform",&t));  //iterate
00606         }
00607         
00608         //write the total transformation; Avoids interpolation erros    
00609         moving_img->set_attr("xform.align2d", &t);
00610         
00611         return moving_img;
00612 }

virtual string EMAN::RotateTranslateAlignerIterative::get_desc (  )  const [inline, virtual]

Implements EMAN::Aligner.

Definition at line 534 of file aligner.h.

00535                 {
00536                         return "Performs rotational alignment and follows this with translational alignment using the iterative method.";
00537                 }

virtual string EMAN::RotateTranslateAlignerIterative::get_name (  )  const [inline, virtual]

Get the Aligner's name.

Each Aligner is identified by a unique name.

Returns:
The Aligner's name.

Implements EMAN::Aligner.

Definition at line 529 of file aligner.h.

References NAME.

00530                 {
00531                         return NAME;
00532                 }

virtual TypeDict EMAN::RotateTranslateAlignerIterative::get_param_types (  )  const [inline, virtual]

Implements EMAN::Aligner.

Definition at line 544 of file aligner.h.

References EMAN::EMObject::INT, and EMAN::TypeDict::put().

00545                 {
00546                         TypeDict d;
00547                         d.put("maxshift", EMObject::INT, "Maximum translation in pixels");
00548                         d.put("r1", EMObject::INT, "Inner ring, pixels");
00549                         d.put("r2", EMObject::INT, "Outer ring, pixels");
00550                         d.put("maxiter", EMObject::INT, "Maximum number of iterations");
00551                         d.put("nozero", EMObject::INT,"Zero translation not permitted (useful for CCD images)");
00552                         d.put("useflcf", EMObject::INT,"Use Fast Local Correlation Function rather than CCF for translational alignment");
00553                         return d;
00554                 }

static Aligner* EMAN::RotateTranslateAlignerIterative::NEW (  )  [inline, static]

Definition at line 539 of file aligner.h.

00540                 {
00541                         return new RotateTranslateAlignerIterative();
00542                 }


Member Data Documentation

const string RotateTranslateAlignerIterative::NAME = "rotate_translate_iterative" [static]

Definition at line 556 of file aligner.h.

Referenced by get_name().


The documentation for this class was generated from the following files:
Generated on Fri Aug 10 16:32:01 2012 for EMAN2 by  doxygen 1.4.7