Skip to content

GenerateTiltPairs

Adrian Quintana edited this page Dec 11, 2017 · 1 revision

Generate tilted and untilted image pairs for a given volume


#include <data/xmipp_image.h>
#include <data/projection.h>

int main()
{
    try {
    	Image<double> V;
    	Projection P;
    	V.read("1rux64.vol");
    	V().setXmippOrigin();
    	FileName fnUntiltedStk="imagesU.stk";
    	FileName fnTiltedStk="imagesT.stk";

    	const int N=50;
    	double rotAxisAngle=30;
    	double tiltAxisAngle=20;
    	Matrix2D<double> Etilt, Eu, Et;
    	Euler_angles2matrix(rotAxisAngle,tiltAxisAngle,0.0,Etilt);

    	MetaData md;
    	for (int n=0; n<N; ++n)
    	{
    		double rotu=rnd_unif(0,360);
    		double tiltu=rnd_unif(0,90);
    		double psiu=0.0;

    		// Generate untilted image
    		projectVolume(V(), P, YSIZE(V()), XSIZE(V()), rotu, tiltu, psiu);
    		FileName fnUntilted=formatString("%03d@%s",n+1,fnUntiltedStk.c_str());
    		P.write(fnUntilted,true,WRITE_REPLACE);

    		// Generate tilted image
    		Euler_angles2matrix(rotu, tiltu, psiu, Eu);
    		Et=Etilt*Eu;
    		double rott, tiltt, psit;
    		Euler_matrix2angles(Et, rott, tiltt, psit);
    		projectVolume(V(), P, YSIZE(V()), XSIZE(V()), rott, tiltt, psit);
    		FileName fnTilted=formatString("%03d@%s",n+1,fnTiltedStk.c_str());
    		P.write(fnTilted,true,WRITE_REPLACE);

    		size_t objId=md.addObject();
    		md.setValue(MDL_IMAGE,fnUntilted,objId);
    		md.setValue(MDL_ANGLE_ROT,rotu,objId);
    		md.setValue(MDL_ANGLE_TILT,tiltu,objId);
    		md.setValue(MDL_ANGLE_PSI,psiu,objId);

    		objId=md.addObject();
    		md.setValue(MDL_IMAGE,fnTilted,objId);
    		md.setValue(MDL_ANGLE_ROT,rott,objId);
    		md.setValue(MDL_ANGLE_TILT,tiltt,objId);
    		md.setValue(MDL_ANGLE_PSI,psit,objId);
    	}
    	md.write("anglesToReconstruct.xmd");
    }
    catch (XmippError e)
    {
        std::cout << e << std::endl;
    }
    return 0;
}



To compile this code use


scipion xmipp_compile generateTiltPairs.cpp


Invoke as


./generateTiltPairs


-- Main.CoSS - 2015-07-31

Clone this wiki locally