CASToR  3.0
Tomographic Reconstruction (PET/SPECT/CT)
vDeformation.cc
Go to the documentation of this file.
1 /*
2 This file is part of CASToR.
3 
4  CASToR is free software: you can redistribute it and/or modify it under the
5  terms of the GNU General Public License as published by the Free Software
6  Foundation, either version 3 of the License, or (at your option) any later
7  version.
8 
9  CASToR is distributed in the hope that it will be useful, but WITHOUT ANY
10  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11  FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
12  details.
13 
14  You should have received a copy of the GNU General Public License along with
15  CASToR (in file GNU_GPL.TXT). If not, see <http://www.gnu.org/licenses/>.
16 
17 Copyright 2017-2019 all CASToR contributors listed below:
18 
19  --> Didier BENOIT, Claude COMTAT, Marina FILIPOVIC, Thibaut MERLIN, Mael MILLARDET, Simon STUTE, Valentin VIELZEUF
20 
21 This is CASToR version 3.0.
22 */
23 
30 #include "vDeformation.hh"
32 #include "oImageSpace.hh"
33 
34 // =====================================================================
35 // ---------------------------------------------------------------------
36 // ---------------------------------------------------------------------
37 // =====================================================================
38 /*
39  \fn vDeformation
40  \brief Constructor of vDeformation. Simply set all data members to default values.
41 */
43 {
44  mp_ID = NULL;
46  m_verbose = -1;
47  m_checked = false;
48  m_initialized = false;
49 }
50 
51 
52 
53 
54 // =====================================================================
55 // ---------------------------------------------------------------------
56 // ---------------------------------------------------------------------
57 // =====================================================================
58 /*
59  \fn ~vDeformation
60  \brief Destructor of vDeformation.
61 */
63 
64 
65 
66 
67 // =====================================================================
68 // ---------------------------------------------------------------------
69 // ---------------------------------------------------------------------
70 // =====================================================================
78 {
79  if(m_verbose>=VERBOSE_DETAIL) Cout("vDeformation::CheckParameters ..."<< endl);
80 
81  // Check image dimensions
82  if (mp_ID==NULL)
83  {
84  Cerr("***** vDeformation::CheckParameters() -> No image dimensions provided !" << endl);
85  return 1;
86  }
87 
88  // Check verbosity
89  if (m_verbose<0)
90  {
91  Cerr("***** vDeformation::CheckParameters() -> Wrong verbosity level provided !" << endl);
92  return 1;
93  }
94 
95  // Check number of basis functions
96  if (m_nbTransformations <0)
97  {
98  Cerr("***** vDeformation::CheckParameters() -> Number of transformations in the deformation has not been initialized !" << endl);
99  return 1;
100  }
101 
102  // Check parameters of the child class (if this function is overloaded)
104  {
105  Cerr("***** vDeformation::CheckParameters() -> An error occurred while checking parameters of the child dynamic class !" << endl);
106  return 1;
107  }
108 
109  // Normal end
110  m_checked = true;
111  return 0;
112 }
113 
114 
115 
116 
117 
118 
119 
120 // =====================================================================
121 // ---------------------------------------------------------------------
122 // ---------------------------------------------------------------------
123 // =====================================================================
124 /*
125  \fn ApplyDeformationsToBackwardImage
126  \param ap_Image : required to access the backward image and its deformation backup matrice
127  \param a_fr : frame index
128  \param a_defIdx : index of the deformation
129  \brief Apply backward transformation of the backward image to the reference position
130  \details Loop on frames
131  Recover any potential data stored in the backup matrice m2p_defTmpBackwardImage
132  \return 0 if success, positive value otherwise
133 */
134 int vDeformation::ApplyDeformationsToBackwardImage(oImageSpace* ap_Image, int a_fr, int a_defIdx)
135 {
136  if(m_verbose >= VERBOSE_DEBUG_NORMAL) Cout("vDeformation::ApplyDeformationsToBackwardImage ... " <<endl);
137 
138  #ifdef CASTOR_DEBUG
139  if (!m_initialized)
140  {
141  Cerr("***** vDeformation::ApplyDeformationsToBackwardImage() -> Called while not initialized !" << endl);
142  Exit(EXIT_DEBUG);
143  }
144  #endif
145 
146  for(int bimg=0; bimg<ap_Image->GetNbBackwardImages(); bimg++)
147  for(int rimg=0; rimg<mp_ID->GetNbRespGates(); rimg++)
148  for(int cimg=0; cimg<mp_ID->GetNbCardGates(); cimg++)
149  {
150  // Perform backward deformation
151  if(ApplyDeformations(ap_Image->m6p_backwardImage[bimg][0][a_fr][rimg][cimg],
152  ap_Image->m6p_backwardImage[bimg][0][a_fr][rimg][cimg],
154  a_defIdx) )
155  {
156  Cerr("***** vDeformation::ApplyDeformationsToBackwardImage()-> An error occurred while performing backward deformation of the backward image !" << endl);
157  Cerr("***** frame index " << a_fr << " respiratory image index " << rimg<< " cardiac image index " << cimg<< " !" << endl);
158  return 1;
159  }
160 
161  // Recover the content of the temporary backup deformation image to the backward image
162  for(int v=0; v<mp_ID->GetNbVoxXYZ(); v++)
163  ap_Image->m6p_backwardImage[bimg][0][a_fr][rimg][cimg][v] += ap_Image->m5p_refDynBackwardImage[bimg][a_fr][rimg][cimg][v] ;
164  }
165 
166  return 0;
167 }
168 
169 
170 
171 
172 // =====================================================================
173 // ---------------------------------------------------------------------
174 // ---------------------------------------------------------------------
175 // =====================================================================
176 /*
177  \fn ApplyDeformationsToHistoSensitivityImage
178  \param ap_Image : required to access the backward image and its deformation backup matrice
179  \param a_fr : frame index
180  \param a_defIdx : index of the deformation
181  \brief Apply backward transformations of the sensitivity image to the reference position (histogram mode)
182  \details Loop on frames
183  Recover any potential data stored in the backup matrice m4p_defTmpSensitivityImage
184  \return 0 if success, positive value otherwise
185 */
187 {
188  if(m_verbose >= VERBOSE_DETAIL) Cout("vDeformation::ApplyDeformationsToHistoSensitivityImage ... " <<endl);
189 
190  #ifdef CASTOR_DEBUG
191  if (!m_initialized)
192  {
193  Cerr("***** vDeformation::ApplyDeformationsToHistoSensitivityImage() -> Called while not initialized !" << endl);
194  Exit(EXIT_DEBUG);
195  }
196  #endif
197 
198  for(int rimg=0; rimg<mp_ID->GetNbRespGates() ; rimg++)
199  for(int cimg=0; cimg<mp_ID->GetNbCardGates() ; cimg++)
200  {
201  // Perform backward deformation
202  if( ApplyDeformations(ap_Image->m5p_sensitivity[0][a_fr][rimg][cimg],
203  ap_Image->m5p_sensitivity[0][a_fr][rimg][cimg],
205  a_defIdx) )
206  {
207  Cerr("***** vDeformation::ApplyDeformationsToHistoSensitivityImage()-> An error occurred while performing backward deformation of the backward image !" << endl);
208  Cerr("***** frame index " << a_fr << " respiratory image index " << rimg<< " cardiac image index " << cimg<< " !" << endl);
209  return 1;
210  }
211 
212  // Recover the content of the temporary backup deformation image in the sensitivity image
213  for(int v=0; v<mp_ID->GetNbVoxXYZ(); v++)
214  ap_Image->m5p_sensitivity[0][a_fr][rimg][cimg][v] += ap_Image->m4p_refDynSensitivityImage[a_fr][rimg][cimg][v];
215  }
216 
217  return 0;
218 }
219 
220 
221 
222 
223 // =====================================================================
224 // ---------------------------------------------------------------------
225 // ---------------------------------------------------------------------
226 // =====================================================================
227 /*
228  \fn PerformDeformation
229  \param ap_Image : required to access oImageSpace image matrices
230  \param a_defIdx : index of the deformation
231  \param a_fr : frame index
232  \param a_rimg : respiratory image index
233  \param a_cimg : cardiac image index
234  \brief Apply deformations during reconstruction
235  \details 1. Recover all the data of the multithreaded backward image matrices in the first one (thread index 0)
236  2. Perform backward deformation of the backward image to the reference position with defIdx-1
237  3. Add coefficients of the backward image matrice to the temporary backup image matrice & reset backward image
238  4. Apply forward deformation of the forward image with defIdx
239  \return 0 if success, positive value otherwise
240 */
241 int vDeformation::PerformDeformation(oImageSpace* ap_Image, int a_defIdx, int a_fr, int a_rimg, int a_cimg)
242 {
243  if(m_verbose >= VERBOSE_DEBUG_NORMAL) Cout("vDeformation::PerformDeformation, transformation parameter #" << a_defIdx << endl);
244 
245  #ifdef CASTOR_DEBUG
246  if (!m_initialized)
247  {
248  Cerr("***** vDeformation::PerformDeformation() -> Called while not initialized !" << endl);
249  Exit(EXIT_DEBUG);
250  }
251  #endif
252 
253  // REDUCE
254  for (int bimg=0; bimg<ap_Image->GetNbBackwardImages(); bimg++)
255  {
256  for (int th=1 ; th<mp_ID->GetNbThreadsForProjection() ; th++) //TODO add 4D loops
257  {
258  // Synchronization of the multi-threaded backwardImages inside the first image Reduce)
259  for(int v=0; v<mp_ID->GetNbVoxXYZ(); v++)
260  ap_Image->m6p_backwardImage[bimg][0][a_fr][a_rimg][a_cimg][v] += ap_Image->m6p_backwardImage[bimg][th][a_fr][a_rimg][a_cimg][v];
261  }
262 
263  // BACKWARD DEFORMATION of the backward image
264  if (a_defIdx > 0 // Check: index must be > 0
265  && ApplyDeformations(ap_Image->m6p_backwardImage[bimg][0][a_fr][a_rimg][a_cimg],
266  ap_Image->m6p_backwardImage[bimg][0][a_fr][a_rimg][a_cimg],
268  a_defIdx-1) )
269  {
270  Cerr("***** vDeformation::ApplyDeformations()-> An error occurred while performing backward deformation of the backward image !" << endl);
271  Cerr("***** frame index " << a_fr << " respiratory image index " << a_rimg<< " cardiac image index " << a_cimg<< " !" << endl);
272  return 1;
273  }
274 
275  // Store Backward deformation update coefficients in the temporary backup image //TODO add loops
276  for (int v=0; v<mp_ID->GetNbVoxXYZ(); v++)
277  ap_Image->m5p_refDynBackwardImage[bimg][a_fr][a_rimg][a_cimg][v] += ap_Image->m6p_backwardImage[bimg][0][a_fr][a_rimg][a_cimg][v];
278  }
279 
280  // Reset the backward images (i.e set all voxels to the specific fr/rimg/cimg to 0)
281  for (int bimg=0; bimg<ap_Image->GetNbBackwardImages(); bimg++)
282  for(int th=0 ; th<mp_ID->GetNbThreadsForProjection() ; th++)
283  for (int v=0; v<mp_ID->GetNbVoxXYZ(); v++)
284  ap_Image->m6p_backwardImage[bimg][th][a_fr][a_rimg][a_cimg][v] = 0.;
285 
286 
287  // Forward deformation of the forward image (from the temporary forward image matrix)
288  if (ApplyDeformations(ap_Image->m4p_refDynForwardImage[a_fr][a_rimg][a_cimg],
289  ap_Image->m4p_forwardImage[a_fr][a_rimg][a_cimg],
291  a_defIdx) )
292  {
293  Cerr("***** vDeformation::ApplyDeformations()-> An error occurred while performing forward deformation of the forward image !" << endl);
294  Cerr("***** frame index " << a_fr << " respiratory image index " << a_rimg<< " cardiac image index " << a_cimg<< " !" << endl);
295  return 1;
296  }
297 
298  return 0;
299 }
300 
301 
302 
303 
304 // =====================================================================
305 // ---------------------------------------------------------------------
306 // ---------------------------------------------------------------------
307 // =====================================================================
308 /*
309  \fn PerformHistoSensitivityDeformation
310  \param ap_Image : required to access oImageSpace image matrices
311  \param a_defIdx : index of the deformation
312  \param fr : frame index
313  \param rimg : respiratory image index
314  \param cimg : cardiac image index
315  \brief Apply deformations on the sensitivity image during reconstruction in histogram mode
316  \details 1. Recover all the data of the multithreaded sensitivity image matrice in the first one (thread index 0)
317  2. Perform backward deformation of the sensitivity image to the reference position with defIdx-1
318  3. Add coefficients of the sensitivity image matrice to the temporary backup image matrice & reset sensitivity image
319  \return 0 if success, positive value otherwise
320 */
321 int vDeformation::PerformHistoSensitivityDeformation(oImageSpace* ap_Image, int a_defIdx, int fr, int rimg, int cimg)
322 {
323  if(m_verbose >= VERBOSE_DETAIL) Cout("vDeformation::PerformHistoSensitivityDeformation ... " <<endl);
324 
325  #ifdef CASTOR_DEBUG
326  if (!m_initialized)
327  {
328  Cerr("***** vDeformation::PerformHistoSensitivityDeformation() -> Called while not initialized !" << endl);
329  Exit(EXIT_DEBUG);
330  }
331  #endif
332 
333  // REDUCE
334  for (int th=1 ; th<mp_ID->GetNbThreadsForProjection() ; th++)
335  {
336  // Synchronisation of the multi-threaded sensitivity images inside the first image )
337  for(int v=0; v<mp_ID->GetNbVoxXYZ(); v++)
338  ap_Image->m5p_sensitivity[0][fr][rimg][cimg][v] += ap_Image->m5p_sensitivity[th][fr][rimg][cimg][v];
339  }
340 
341  // BACKWARD DEFORMATION of the sensitivity image
342  if (a_defIdx > 0 // Check: index must be > 0
343  && ApplyDeformations(ap_Image->m5p_sensitivity[0][fr][rimg][cimg],
344  ap_Image->m5p_sensitivity[0][fr][rimg][cimg],
346  a_defIdx-1) )
347  {
348  Cerr("***** vDeformation::PerformHistoSensitivityDeformation()-> An error occurred while performing backward deformation of the sensitivity image !" << endl);
349  Cerr("***** frame index " << fr << " respiratory image index " << rimg<< " cardiac image index " << cimg<< " !" << endl);
350  return 1;
351  }
352 
353  // Store Backward deformation update coefficients in temporary image
354  for (int v=0; v<mp_ID->GetNbVoxXYZ(); v++)
355  ap_Image->m4p_refDynSensitivityImage[fr][rimg][cimg][v] += ap_Image->m5p_sensitivity[0][fr][rimg][cimg][v];
356 
357  // Reset the sensitivity images (i.e set all voxels to the specific fr/rimg/cimg to 0)
358  for (int th=0; th<mp_ID->GetNbThreadsForProjection(); th++)
359  for (int v=0; v<mp_ID->GetNbVoxXYZ(); v++)
360  ap_Image->m5p_sensitivity[th][fr][rimg][cimg][v] = 0.;
361 
362  return 0;
363 }
364 
365 
366 
367 
368 // =====================================================================
369 // ---------------------------------------------------------------------
370 // ---------------------------------------------------------------------
371 // =====================================================================
372 /*
373  \fn PerformSensitivityDeformation
374  \param ap_Image : required to access oImageSpace image matrices
375  \param a_defDirection : a direction for the deformation to perform (forward or backward)
376  \param a_defIdx : index of the deformation
377  \param fr : frame index
378  \param rg : respiratory gate index
379  \param cg : cardiac gate index
380  \brief Apply image deformations during sensitivity image generation for list-mode
381  \details Depending on the deformation direction (forward or backward):
382  Forward : Perform forward deformation of the forward image to the deformation index position
383  Backward: Perform backward deformation of the backward image to the reference position
384  \return 0 if success, positive value otherwise
385 */
386 int vDeformation::PerformSensitivityDeformation(oImageSpace* ap_Image, int a_defDirection, int a_defIdx, int fr, int rg, int cg)
387 {
388  if(m_verbose >= VERBOSE_DEBUG_NORMAL) Cout("vDeformation::PerformSensitivityDeformation ... " << endl);
389 
390  #ifdef CASTOR_DEBUG
391  if (!m_initialized)
392  {
393  Cerr("***** vDeformation::PerformSensitivityDeformation() -> Called while not initialized !" << endl);
394  Exit(EXIT_DEBUG);
395  }
396  #endif
397 
398  if (a_defDirection == FORWARD_DEFORMATION)
399  {
400  if (ApplyDeformations(ap_Image->m4p_forwardImage[fr][rg][cg],
401  ap_Image->m4p_forwardImage[fr][rg][cg],
402  a_defDirection,
403  a_defIdx) )
404  {
405  Cerr("***** vDeformation::PerformSensitivityDeformation -> An error occurred while performing forward deformation !" << endl);
406  Cerr("***** frame index " << fr << " respiratory gate index " << rg<< " cardiac gate index " << cg<< " !" << endl);
407  return 1;
408  }
409  }
410  else if (a_defDirection == BACKWARD_DEFORMATION)
411  {
412  if (ApplyDeformations(ap_Image->m6p_backwardImage[0][0][fr][rg][cg],
413  ap_Image->m6p_backwardImage[0][0][fr][rg][cg],
414  a_defDirection,
415  a_defIdx) )
416  {
417  Cerr("***** vDeformation::PerformSensitivityDeformation -> An error occurred while performing backward deformation !" << endl);
418  Cerr("***** frame index " << fr << " respiratory gate index " << rg<< " cardiac gate index " << cg<< " !" << endl);
419  return 1;
420  }
421  }
422  else
423  {
424  Cerr("***** vDeformation::PerformDeformation -> Unknown type of deformation !" << endl);
425  return 1;
426  }
427 
428  return 0;
429 }
430 
431 
432 
433 
434 /*
435  \fn Tlerp
436  \param ap_inputImage : input image matrix
437  \param ap_outputImage : output image matrix
438  \param iov : index of the voxel to interpolate in the output image
439  \param iiv : index of the input image central voxel for interpolation
440  \param dx : x-axis difference between output voxel cartesian position after transformation and center of estimated vox position
441  \param dy : y-axis difference between output voxel cartesian position after transformation and center of estimated vox position
442  \param dz : z-axis difference between output voxel cartesian position after transformation and center of estimated vox position
443  \brief This function performs a trilinear interpolation for a specific voxel
444  \todo : perhaps use padded image in order to avoid if statements
445  \return 0 if success, other value otherwise.
446 */
447 int vDeformation::Tlerp(HPFLTNB *ap_inputImage, HPFLTNB *ap_outputImage, uint32_t iov, uint32_t iiv, FLTNB dX, FLTNB dY, FLTNB dZ)
448 {
449  // Trilinear interpolation
450  // Todo : Use padded image in order to avoid 'if' statements ?
451  int incX = dX>0 ? 1 : -1;
452  int incY = dY>0 ? mp_ID->GetNbVoxX() : -mp_ID->GetNbVoxX();
453  int incZ = dZ>0 ? mp_ID->GetNbVoxXY() : -mp_ID->GetNbVoxXY();
454 
455  dX = (dX>=0) ? dX : -dX;
456  dY = (dY>=0) ? dY : -dY;
457  dZ = (dZ>=0) ? dZ : -dZ;
458 
459  uint32_t nb_tot_vox = (uint32_t)mp_ID->GetNbVoxXYZ();
460 
461  if ((iiv < nb_tot_vox)
462  && (iiv >= 0))
463  ap_outputImage[iov] += ap_inputImage[iiv] * (1.-dX)*(1.-dY)*(1.-dZ);
464 
465  if ((iiv+incX < nb_tot_vox)
466  && (((int)iiv)+incX >= 0))
467  ap_outputImage[iov] += ap_inputImage[iiv+incX] * dX*(1.-dY)*(1.-dZ);
468 
469  if ((iiv+incY < nb_tot_vox )
470  && (((int)iiv)+incY >= 0))
471  ap_outputImage[iov] += ap_inputImage[iiv +incY] * (1.-dX)*dY*(1.-dZ);
472 
473  if ((iiv+incX+incY < nb_tot_vox)
474  && ( ((int)iiv)+incX+incY >= 0))
475  ap_outputImage[iov] += ap_inputImage[iiv+incX+incY] * dX*dY*(1.-dZ);
476 
477  if ((iiv+incZ < nb_tot_vox)
478  && (((int)iiv)+incZ) >= 0)
479  ap_outputImage[iov] += ap_inputImage[iiv+incZ] * (1.-dX)*(1.-dY)*dZ;
480 
481  if ((iiv+incX+incZ) < nb_tot_vox
482  && (((int)iiv)+incX+incZ) >=0 )
483  ap_outputImage[iov] += ap_inputImage[iiv+incX+incZ] * dX*(1.-dY)*dZ;
484 
485  if ((iiv+incY+incZ < nb_tot_vox)
486  && (((int)iiv)+incY+incZ >= 0))
487  ap_outputImage[iov] += ap_inputImage[iiv+incY+incZ] * (1.-dX)*dY*dZ;
488 
489  if ((iiv+incX+incY+incZ < nb_tot_vox)
490  && (((int)iiv)+incX+incY+incZ >= 0))
491  ap_outputImage[iov] += ap_inputImage[iiv+incX+incY+incZ] *dX*dY*dZ;
492 
493 
494  return 0;
495 }
FLTNB **** m4p_forwardImage
Definition: oImageSpace.hh:87
Declaration of class oImageDimensionsAndQuantification.
vDeformation()
Constructor of vDeformation. Simply set all data members to default values.
Definition: vDeformation.cc:42
FLTNB **** m4p_refDynForwardImage
Definition: oImageSpace.hh:144
virtual ~vDeformation()
Destructor of vDeformation.
Definition: vDeformation.cc:62
oImageDimensionsAndQuantification * mp_ID
virtual int ApplyDeformationsToBackwardImage(oImageSpace *ap_Image, int a_fr, int a_defIdx)
Apply backward transformation of the backward image to the reference position.
#define FLTNB
Definition: gVariables.hh:81
int m_nbTransformations
#define HPFLTNB
Definition: gVariables.hh:83
virtual int PerformDeformation(oImageSpace *ap_Image, int a_defIdx, int a_fr, int a_rimg, int a_cimg)
Apply deformations during reconstruction.
#define VERBOSE_DETAIL
FLTNB ***** m5p_refDynBackwardImage
Definition: oImageSpace.hh:154
virtual int PerformHistoSensitivityDeformation(oImageSpace *ap_Image, int a_defIdx, int fr, int rimg, int cimg)
Apply deformations on the sensitivity image during reconstruction in histogram mode.
FLTNB **** m4p_refDynSensitivityImage
Definition: oImageSpace.hh:165
virtual int CheckParameters()
This function is used to check parameters after the latter have been all set using Set functions...
Definition: vDeformation.cc:77
void Exit(int code)
int Tlerp(HPFLTNB *ap_inputImage, HPFLTNB *ap_outputImage, uint32_t iov, uint32_t iiv, FLTNB dX, FLTNB dY, FLTNB dZ)
#define Cerr(MESSAGE)
virtual int ApplyDeformations(FLTNB *ap_inputImage, FLTNB *ap_outputImage, int a_direction, int a_defIdx)=0
This function prepares the deformation to perform It is a virtual pure deformation function to be i...
FLTNB ****** m6p_backwardImage
Definition: oImageSpace.hh:94
#define BACKWARD_DEFORMATION
Definition: vDeformation.hh:37
int GetNbBackwardImages()
Definition: oImageSpace.hh:629
INTNB GetNbVoxXY()
Get the number of voxels in a slice.
Declaration of class vDeformation.
Declaration of class oImageSpace.
int GetNbCardGates()
Get the number of cardiac gates.
virtual int PerformSensitivityDeformation(oImageSpace *ap_Image, int a_defDirection, int a_defIdx, int fr, int rg, int cg)
Apply image deformations during sensitivity image generation for list-mode.
This class holds all the matrices in the image domain that can be used in the algorithm: image...
Definition: oImageSpace.hh:60
INTNB GetNbVoxXYZ()
Get the total number of voxels.
#define EXIT_DEBUG
Definition: gVariables.hh:97
int GetNbThreadsForProjection()
Get the number of threads used for projections.
INTNB GetNbVoxX()
Get the number of voxels along the X axis.
virtual int CheckSpecificParameters()=0
This function is used to check the parameters of the child functions before initialization if require...
int GetNbRespGates()
Get the number of respiratory gates.
#define Cout(MESSAGE)
#define FORWARD_DEFORMATION
Definition: vDeformation.hh:36
FLTNB ***** m5p_sensitivity
Definition: oImageSpace.hh:104
virtual int ApplyDeformationsToHistoSensitivityImage(oImageSpace *ap_Image, int a_fr, int a_defIdx)
Apply backward transformations of the sensitivity image to the reference position (histogram mode) ...
#define VERBOSE_DEBUG_NORMAL