Xmipp  v3.23.11-Nereus
Functions
radon.h File Reference
#include <core/xmipp_image.h>
Include dependency graph for radon.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void Radon_Transform (const MultidimArray< double > &vol, double rot, double psi, MultidimArray< double > &RT)
 
void Local_Radon_Transform (const MultidimArray< double > &vol, double rot, double tilt, int label, const MultidimArray< double > &vol_label, MultidimArray< double > &RT, MultidimArray< double > &RT_n)
 
void Radon_Transform (const MultidimArray< double > &I, double rot_step, MultidimArray< double > &RT)
 

Function Documentation

◆ Local_Radon_Transform()

void Local_Radon_Transform ( const MultidimArray< double > &  vol,
double  rot,
double  tilt,
int  label,
const MultidimArray< double > &  vol_label,
MultidimArray< double > &  RT,
MultidimArray< double > &  RT_n 
)

Radon transform of a piece of volume along a direction

Definition at line 51 of file radon.cpp.

55 {
58 
59  // Align the Radon direction with the Z axis
60  if (rot != 0 || tilt != 0)
61  {
62  Euler_rotate(vol, rot, tilt, 0.0F, Rvol);
63  Euler_rotate(vol_label, rot, tilt, 0.0F, Lvol);
64  }
65  else
66  {
67  Rvol = vol;
68  Lvol = vol_label;
69  }
70 
71  // Project onto one line
72  RT.initZeros(Rvol.zdim);
73  STARTINGX(RT) = STARTINGZ(Rvol);
74  RT_n = RT;
75 
76  for (int k = STARTINGZ(Rvol); k <= FINISHINGZ(Rvol); k++)
77  for (int i = STARTINGY(Rvol); i <= FINISHINGY(Rvol); i++)
78  for (int j = STARTINGX(Rvol); j <= FINISHINGX(Rvol); j++)
79  if (A3D_ELEM(Lvol, k, i, j) == label)
80  {
81  A1D_ELEM(RT, k) += A3D_ELEM(Rvol, k, i, j);
82  A1D_ELEM(RT_n, k)++;
83  }
84 }
#define FINISHINGX(v)
#define A1D_ELEM(v, i)
#define FINISHINGZ(v)
#define STARTINGX(v)
#define i
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
#define STARTINGY(v)
#define A3D_ELEM(V, k, i, j)
void Euler_rotate(const MultidimArray< double > &V, double rot, double tilt, double psi, MultidimArray< double > &result)
Definition: geometry.cpp:1061
#define j
#define FINISHINGY(v)
void initZeros(const MultidimArray< T1 > &op)
#define STARTINGZ(v)

◆ Radon_Transform() [1/2]

void Radon_Transform ( const MultidimArray< double > &  vol,
double  rot,
double  psi,
MultidimArray< double > &  RT 
)

Radon transform of a volume along a direction

Definition at line 30 of file radon.cpp.

32 {
34 
35  // Align the Radon direction with the Z axis
36  if (rot != 0 || tilt != 0) Euler_rotate(vol, rot, tilt, 0.0F, Rvol);
37  else Rvol = vol;
38 
39  // Project onto one line
40  RT.initZeros(Rvol.zdim);
41  STARTINGX(RT) = STARTINGZ(Rvol);
42 
43  for (int k = STARTINGZ(Rvol); k <= FINISHINGZ(Rvol); k++)
44  for (int i = STARTINGY(Rvol); i <= FINISHINGY(Rvol); i++)
45  for (int j = STARTINGX(Rvol); j <= FINISHINGX(Rvol); j++)
46  A1D_ELEM(RT, k) += A3D_ELEM(Rvol, k, i, j);
47 }
#define FINISHINGX(v)
#define A1D_ELEM(v, i)
#define FINISHINGZ(v)
#define STARTINGX(v)
#define i
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
#define STARTINGY(v)
#define A3D_ELEM(V, k, i, j)
void Euler_rotate(const MultidimArray< double > &V, double rot, double tilt, double psi, MultidimArray< double > &result)
Definition: geometry.cpp:1061
#define j
#define FINISHINGY(v)
void initZeros(const MultidimArray< T1 > &op)
#define STARTINGZ(v)

◆ Radon_Transform() [2/2]

void Radon_Transform ( const MultidimArray< double > &  I,
double  rot_step,
MultidimArray< double > &  RT 
)

Radon transform of an image.

Definition at line 87 of file radon.cpp.

89 {
91  RT.initZeros(CEIL(360.0 / rot_step), XSIZE(I));
92  STARTINGX(RT) = STARTINGX(I);
93  int iterRot = static_cast<int>(360.0 / rot_step);
94  for (int l=0; l<iterRot; l++)
95  {
96  double rot = l*rot_step;
97  // Rotate image
98  rotate(xmipp_transformation::LINEAR, rot_I, I, rot);
99  // Sum by columns
100  FOR_ALL_ELEMENTS_IN_ARRAY2D(rot_I) RT(l, j) += rot_I(i, j);
101  }
102 }
#define STARTINGX(v)
#define i
#define rotate(a, i, j, k, l)
#define FOR_ALL_ELEMENTS_IN_ARRAY2D(m)
#define CEIL(x)
Definition: xmipp_macros.h:225
#define XSIZE(v)
#define j
void initZeros(const MultidimArray< T1 > &op)