Xmipp  v3.23.11-Nereus
Functions
forward_zernike_images_priors.cpp File Reference
#include "forward_zernike_images_priors.h"
#include "core/transformations.h"
#include "core/xmipp_image_extension.h"
#include "core/xmipp_image_generic.h"
#include "data/projection.h"
#include "data/mask.h"
#include "fstream"
Include dependency graph for forward_zernike_images_priors.cpp:

Go to the source code of this file.

Functions

double continuousZernikePriorsCost (double *x, void *_prm)
 

Function Documentation

◆ continuousZernikePriorsCost()

double continuousZernikePriorsCost ( double *  x,
void *  _prm 
)

Definition at line 522 of file forward_zernike_images_priors.cpp.

523 {
525  int idx = prm->priors.size();
526  // TODO: Optimize parameters for each image (not sharing)
527  // prm->deltaDefocusU[0]=x[idx+6]; prm->deltaDefocusU[1]=x[idx+6];
528  // prm->deltaDefocusV[0]=x[idx+7]; prm->deltaDefocusV[1]=x[idx+7];
529  // prm->deltaDefocusAngle[0]=x[idx+8]; prm->deltaDefocusAngle[1]=x[idx+8];
530 
531  switch (prm->num_images)
532  {
533  case 2:
534  prm->deltaX[0] = x[idx + 1];
535  prm->deltaY[0] = x[idx + 3];
536  prm->deltaRot[0] = x[idx + 5];
537  prm->deltaTilt[0] = x[idx + 7];
538  prm->deltaPsi[0] = x[idx + 9];
539  // prm->deltaDefocusU[0]=x[idx + 11];
540  // prm->deltaDefocusV[0]=x[idx + 13];
541  // prm->deltaDefocusAngle[0]=x[idx + 15];
542 
543  prm->deltaX[1] = x[idx + 2];
544  prm->deltaY[1] = x[idx + 4];
545  prm->deltaRot[1] = x[idx + 6];
546  prm->deltaTilt[1] = x[idx + 8];
547  prm->deltaPsi[1] = x[idx + 10];
548  // prm->deltaDefocusU[1]=x[idx + 12];
549  // prm->deltaDefocusV[1]=x[idx + 14];
550  // prm->deltaDefocusAngle[1]=x[idx + 16];
551 
552  MAT_ELEM(prm->A1, 0, 2) = prm->old_shiftX[0] + prm->deltaX[0];
553  MAT_ELEM(prm->A1, 1, 2) = prm->old_shiftY[0] + prm->deltaY[0];
554  MAT_ELEM(prm->A1, 0, 0) = 1;
555  MAT_ELEM(prm->A1, 0, 1) = 0;
556  MAT_ELEM(prm->A1, 1, 0) = 0;
557  MAT_ELEM(prm->A1, 1, 1) = 1;
558 
559  MAT_ELEM(prm->A2, 0, 2) = prm->old_shiftX[1] + prm->deltaX[1];
560  MAT_ELEM(prm->A2, 1, 2) = prm->old_shiftY[1] + prm->deltaY[1];
561  MAT_ELEM(prm->A2, 0, 0) = 1;
562  MAT_ELEM(prm->A2, 0, 1) = 0;
563  MAT_ELEM(prm->A2, 1, 0) = 0;
564  MAT_ELEM(prm->A2, 1, 1) = 1;
565  break;
566 
567  case 3:
568  prm->deltaX[0] = x[idx + 1];
569  prm->deltaY[0] = x[idx + 4];
570  prm->deltaRot[0] = x[idx + 7];
571  prm->deltaTilt[0] = x[idx + 10];
572  prm->deltaPsi[0] = x[idx + 13];
573  // prm->deltaDefocusU[0]=x[idx + 16];
574  // prm->deltaDefocusV[0]=x[idx + 19];
575  // prm->deltaDefocusAngle[0]=x[idx + 22];
576 
577  prm->deltaX[1] = x[idx + 2];
578  prm->deltaY[1] = x[idx + 5];
579  prm->deltaRot[1] = x[idx + 8];
580  prm->deltaTilt[1] = x[idx + 11];
581  prm->deltaPsi[1] = x[idx + 14];
582  // prm->deltaDefocusU[1]=x[idx + 17];
583  // prm->deltaDefocusV[1]=x[idx + 20];
584  // prm->deltaDefocusAngle[1]=x[idx + 23];
585 
586  prm->deltaX[2] = x[idx + 3];
587  prm->deltaY[2] = x[idx + 6];
588  prm->deltaRot[2] = x[idx + 9];
589  prm->deltaTilt[2] = x[idx + 12];
590  prm->deltaPsi[2] = x[idx + 15];
591  // prm->deltaDefocusU[2]=x[idx + 18];
592  // prm->deltaDefocusV[2]=x[idx + 21];
593  // prm->deltaDefocusAngle[2]=x[idx + 24];
594 
595  MAT_ELEM(prm->A1, 0, 2) = prm->old_shiftX[0] + prm->deltaX[0];
596  MAT_ELEM(prm->A1, 1, 2) = prm->old_shiftY[0] + prm->deltaY[0];
597  MAT_ELEM(prm->A1, 0, 0) = 1;
598  MAT_ELEM(prm->A1, 0, 1) = 0;
599  MAT_ELEM(prm->A1, 1, 0) = 0;
600  MAT_ELEM(prm->A1, 1, 1) = 1;
601 
602  MAT_ELEM(prm->A2, 0, 2) = prm->old_shiftX[1] + prm->deltaX[1];
603  MAT_ELEM(prm->A2, 1, 2) = prm->old_shiftY[1] + prm->deltaY[1];
604  MAT_ELEM(prm->A2, 0, 0) = 1;
605  MAT_ELEM(prm->A2, 0, 1) = 0;
606  MAT_ELEM(prm->A2, 1, 0) = 0;
607  MAT_ELEM(prm->A2, 1, 1) = 1;
608 
609  MAT_ELEM(prm->A3, 0, 2) = prm->old_shiftX[2] + prm->deltaX[2];
610  MAT_ELEM(prm->A3, 1, 2) = prm->old_shiftY[2] + prm->deltaY[2];
611  MAT_ELEM(prm->A3, 0, 0) = 1;
612  MAT_ELEM(prm->A3, 0, 1) = 0;
613  MAT_ELEM(prm->A3, 1, 0) = 0;
614  MAT_ELEM(prm->A3, 1, 1) = 1;
615  break;
616 
617 
618  default:
619  prm->deltaX[0] = x[idx + 1];
620  prm->deltaY[0] = x[idx + 2];
621  prm->deltaRot[0] = x[idx + 3];
622  prm->deltaTilt[0] = x[idx + 4];
623  prm->deltaPsi[0] = x[idx + 5];
624  prm->deltaDefocusU[0]=x[idx + 6];
625  prm->deltaDefocusV[0]=x[idx + 7];
626  prm->deltaDefocusAngle[0]=x[idx + 8];
627 
628  MAT_ELEM(prm->A1, 0, 2) = prm->old_shiftX[0] + prm->deltaX[0];
629  MAT_ELEM(prm->A1, 1, 2) = prm->old_shiftY[0] + prm->deltaY[0];
630  MAT_ELEM(prm->A1, 0, 0) = 1;
631  MAT_ELEM(prm->A1, 0, 1) = 0;
632  MAT_ELEM(prm->A1, 1, 0) = 0;
633  MAT_ELEM(prm->A1, 1, 1) = 1;
634  break;
635  }
636 
637  return prm->transformImageSph(x);
638 
639 }
std::vector< std::vector< double > > priors
doublereal * x
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
ProgClassifyCL2D * prm