Xmipp  v3.23.11-Nereus
Classes | Functions | Variables
image_operate.cpp File Reference
#include "image_operate.h"
#include "core/transformations.h"
#include "core/xmipp_fft.h"
#include "data/numerical_tools.h"
#include "core/utils/memory_utils.h"
Include dependency graph for image_operate.cpp:

Go to the source code of this file.

Classes

class  MinusAdjustedPrm
 

Functions

void minus (Image< double > &op1, const Image< double > &op2)
 
double minusAdjusted_L1 (double *x, void *_prm)
 
void minusAdjusted (Image< double > &op1, const Image< double > &op2)
 
void imageDotProduct (Image< double > &op1, const Image< double > &op2)
 
void dropOut (Image< double > &op1)
 
void plus (Image< double > &op1, const Image< double > &op2)
 
void mult (Image< double > &op1, const Image< double > &op2)
 
void divide (Image< double > &op1, const Image< double > &op2)
 
void min (Image< double > &op1, const Image< double > &op2)
 
void max (Image< double > &op1, const Image< double > &op2)
 
void compare (Image< double > &op1, const Image< double > &op2)
 
void eq (Image< double > &op1, const Image< double > &op2)
 Be careful with integer images for relational operations...due to double comparisons. More...
 
void ne (Image< double > &op1, const Image< double > &op2)
 
void lt (Image< double > &op1, const Image< double > &op2)
 
void le (Image< double > &op1, const Image< double > &op2)
 
void gt (Image< double > &op1, const Image< double > &op2)
 
void ge (Image< double > &op1, const Image< double > &op2)
 
void sqrt (Image< double > &op)
 
void abs (Image< double > &op)
 
void log (Image< double > &op)
 
void log10 (Image< double > &op)
 
void power (Image< double > &op)
 
void getSlice (Image< double > &op)
 
void radialAvg (Image< double > &op)
 
void psdRadialAvg (Image< double > &op)
 
void reset (Image< double > &op)
 

Variables

double pDropout
 
double powerExp = 2
 
int nSlice
 
char axis
 
FileName fnOut
 

Function Documentation

◆ abs()

void abs ( Image< double > &  op)

Definition at line 219 of file image_operate.cpp.

220 {
221  MultidimArray<double> &mOp = op();
223  {
224  dAi(mOp, n) = ABS(dAi(mOp, n));
225  }
226 }
#define dAi(v, i)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define ABS(x)
Definition: xmipp_macros.h:142
int * n

◆ compare()

void compare ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 138 of file image_operate.cpp.

139 {
140  MultidimArray<double> &mOp1 = op1();
141  const MultidimArray<double> &mOp2 = op2();
143  {
144  dAi(mOp1, n) = dAi(mOp1, n) == dAi(mOp2, n) ? 0 : (dAi(mOp1, n) < dAi(mOp2, n) ? -1 : 1 );
145  }
146 }
#define dAi(v, i)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
int * n

◆ divide()

void divide ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 113 of file image_operate.cpp.

114 {
115  op1() /= op2();
116 }

◆ dropOut()

void dropOut ( Image< double > &  op1)

Definition at line 92 of file image_operate.cpp.

93 {
94  if (pDropout>0.0 && pDropout<1.0)
95  {
96  MultidimArray<double> &mOp1 = op1();
98  if (rnd_unif()<pDropout)
99  dAi(mOp1, n) = 0.0;
100  }
101 }
#define dAi(v, i)
double pDropout
double rnd_unif()
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
int * n

◆ eq()

void eq ( Image< double > &  op1,
const Image< double > &  op2 
)

Be careful with integer images for relational operations...due to double comparisons.

Definition at line 149 of file image_operate.cpp.

150 {
151  MultidimArray<double> &mOp1 = op1();
152  const MultidimArray<double> &mOp2 = op2();
154  {
155  dAi(mOp1, n) = dAi(mOp1, n) == dAi(mOp2, n) ? 1 : 0;
156  }
157 }
#define dAi(v, i)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
int * n

◆ ge()

void ge ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 199 of file image_operate.cpp.

200 {
201  MultidimArray<double> &mOp1 = op1();
202  const MultidimArray<double> &mOp2 = op2();
204  {
205  dAi(mOp1, n) = dAi(mOp1, n) >= dAi(mOp2, n) ? 1 : 0;
206  }
207 }
#define dAi(v, i)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
int * n

◆ getSlice()

void getSlice ( Image< double > &  op)

Definition at line 258 of file image_operate.cpp.

259 {
260  MultidimArray<double> &mOp = op();
261  MultidimArray<double> imAux;
262 
263  mOp.getSlice(nSlice, imAux, axis);
264  mOp = imAux;
265 }
void getSlice(int k, MultidimArray< T1 > &M, char axis='Z', bool reverse=false, size_t n=0) const
char axis
int nSlice

◆ gt()

void gt ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 189 of file image_operate.cpp.

190 {
191  MultidimArray<double> &mOp1 = op1();
192  const MultidimArray<double> &mOp2 = op2();
194  {
195  dAi(mOp1, n) = dAi(mOp1, n) > dAi(mOp2, n) ? 1 : 0;
196  }
197 }
#define dAi(v, i)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
int * n

◆ imageDotProduct()

void imageDotProduct ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 85 of file image_operate.cpp.

86 {
87  double dot=op1().dotProduct(op2());
88  std::cout << "<" << op1.name() << "," << op2.name() << ">=" << dot << std::endl;
89 }
const FileName & name() const
__host__ __device__ float dot(float2 a, float2 b)

◆ le()

void le ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 179 of file image_operate.cpp.

180 {
181  MultidimArray<double> &mOp1 = op1();
182  const MultidimArray<double> &mOp2 = op2();
184  {
185  dAi(mOp1, n) = dAi(mOp1, n) <= dAi(mOp2, n) ? 1 : 0;
186  }
187 }
#define dAi(v, i)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
int * n

◆ log()

void log ( Image< double > &  op)

Definition at line 228 of file image_operate.cpp.

229 {
230  MultidimArray<double> &mOp = op();
232  {
233  dAi(mOp, n) = log(dAi(mOp, n));
234  }
235 }
#define dAi(v, i)
void log(Image< double > &op)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
int * n

◆ log10()

void log10 ( Image< double > &  op)

Definition at line 237 of file image_operate.cpp.

238 {
239  MultidimArray<double> &mOp = op();
241  {
242  dAi(mOp, n) = log10(dAi(mOp, n));
243  }
244 }
#define dAi(v, i)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
void log10(Image< double > &op)
int * n

◆ lt()

void lt ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 169 of file image_operate.cpp.

170 {
171  MultidimArray<double> &mOp1 = op1();
172  const MultidimArray<double> &mOp2 = op2();
174  {
175  dAi(mOp1, n) = dAi(mOp1, n) < dAi(mOp2, n) ? 1 : 0;
176  }
177 }
#define dAi(v, i)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
int * n

◆ max()

void max ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 128 of file image_operate.cpp.

129 {
130  MultidimArray<double> &mOp1 = op1();
131  const MultidimArray<double> &mOp2 = op2();
133  {
134  dAi(mOp1, n) = XMIPP_MAX(dAi(mOp1, n), dAi(mOp2, n));
135  }
136 }
#define dAi(v, i)
#define XMIPP_MAX(x, y)
Definition: xmipp_macros.h:193
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
int * n

◆ min()

void min ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 118 of file image_operate.cpp.

119 {
120  MultidimArray<double> &mOp1 = op1();
121  const MultidimArray<double> &mOp2 = op2();
123  {
124  dAi(mOp1, n) = XMIPP_MIN(dAi(mOp1, n), dAi(mOp2, n));
125  }
126 }
#define dAi(v, i)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define XMIPP_MIN(x, y)
Definition: xmipp_macros.h:181
int * n

◆ minus()

void minus ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 33 of file image_operate.cpp.

34 {
35  op1() -= op2();
36 }

◆ minusAdjusted()

void minusAdjusted ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 60 of file image_operate.cpp.

61 {
62  MultidimArray<double> &pI1=op1();
63  const MultidimArray<double> &pI2=op2();
64 
66  prm.I1=&op1();
67  prm.I2=&op2();
68 
69  Matrix1D<double> p(2);
71  p(0)=1; // a in I'=a*I+b
72  p(1)=0; // b in I'=a*I+b
73  steps.initConstant(1);
74  double cost;
75  int iter;
76  powellOptimizer(p, 1, 2, &minusAdjusted_L1, &prm, 0.01, cost, iter, steps, false);
77 
78  double a=p(0);
79  double b=p(1);
82 }
const MultidimArray< double > * I1
void powellOptimizer(Matrix1D< double > &p, int i0, int n, double(*f)(double *x, void *), void *prm, double ftol, double &fret, int &iter, const Matrix1D< double > &steps, bool show)
glob_prnt iter
doublereal * b
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define DIRECT_MULTIDIM_ELEM(v, n)
double steps
const MultidimArray< double > * I2
ProgClassifyCL2D * prm
double minusAdjusted_L1(double *x, void *_prm)
int * n
doublereal * a

◆ minusAdjusted_L1()

double minusAdjusted_L1 ( double *  x,
void *  _prm 
)

Definition at line 45 of file image_operate.cpp.

46 {
47  double a=x[1];
48  double b=x[2];
49 
50  double retval=0;
51  auto *prm = (MinusAdjustedPrm *) _prm;
52  const MultidimArray<double> &pI1=*(prm->I1);
53  const MultidimArray<double> &pI2=*(prm->I2);
55  retval+=fabs(DIRECT_MULTIDIM_ELEM(pI1,n)-(a*DIRECT_MULTIDIM_ELEM(pI2,n)+b));
56  return retval;
57 }
doublereal * x
doublereal * b
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define DIRECT_MULTIDIM_ELEM(v, n)
ProgClassifyCL2D * prm
int * n
doublereal * a

◆ mult()

void mult ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 108 of file image_operate.cpp.

109 {
110  op1() *= op2();
111 }

◆ ne()

void ne ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 159 of file image_operate.cpp.

160 {
161  MultidimArray<double> &mOp1 = op1();
162  const MultidimArray<double> &mOp2 = op2();
164  {
165  dAi(mOp1, n) = dAi(mOp1, n) != dAi(mOp2, n) ? 1 : 0;
166  }
167 }
#define dAi(v, i)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
int * n

◆ plus()

void plus ( Image< double > &  op1,
const Image< double > &  op2 
)

Definition at line 103 of file image_operate.cpp.

104 {
105  op1() += op2();
106 }

◆ power()

void power ( Image< double > &  op)

Definition at line 247 of file image_operate.cpp.

248 {
249  MultidimArray<double> &mOp = op();
251  {
252  dAi(mOp, n) = pow(dAi(mOp, n), powerExp);
253  }
254 }
#define dAi(v, i)
double powerExp
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
int * n

◆ psdRadialAvg()

void psdRadialAvg ( Image< double > &  op)

Definition at line 288 of file image_operate.cpp.

289 {
290  MultidimArray<double> &mOp = op();
291  CenterFFT(mOp,true);
292  mOp.selfLog10();
293  mOp.setXmippOrigin();
294  Matrix1D<int> center(3);
295  center.initZeros();
296  MultidimArray<double> radial_mean;
297  MultidimArray<int> radial_count;
298  radialAverage(mOp, center, radial_mean, radial_count);
299  radial_mean.write((fnOut.withoutExtension()).addExtension("txt"));
300 
301  int my_rad;
303  {
304  my_rad = (int)floor(sqrt((double)(i * i + j * j + k * k)));
305  op(k, i, j) = radial_mean(my_rad);
306  }
307 }
__host__ __device__ float2 floor(const float2 v)
void sqrt(Image< double > &op)
#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
void CenterFFT(MultidimArray< T > &v, bool forward)
Definition: xmipp_fft.h:291
#define FOR_ALL_ELEMENTS_IN_ARRAY3D(V)
FileName fnOut
void write(const FileName &fn) const
void radialAverage(const MultidimArray< double > &VolFourierMag, const MultidimArray< double > &V, MultidimArray< double > &radial_mean)
#define j
FileName withoutExtension() const

◆ reset()

void reset ( Image< double > &  op)

Definition at line 309 of file image_operate.cpp.

310 {
311  op().initZeros();
312 }

◆ sqrt()

void sqrt ( Image< double > &  op)

Definition at line 210 of file image_operate.cpp.

211 {
212  MultidimArray<double> &mOp = op();
214  {
215  dAi(mOp, n) = sqrt(dAi(mOp, n));
216  }
217 }
#define dAi(v, i)
void sqrt(Image< double > &op)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
int * n

Variable Documentation

◆ axis

char axis

Definition at line 257 of file image_operate.cpp.

◆ fnOut

FileName fnOut

Definition at line 268 of file image_operate.cpp.

◆ nSlice

int nSlice

Definition at line 256 of file image_operate.cpp.

◆ pDropout

double pDropout

Definition at line 91 of file image_operate.cpp.

◆ powerExp

double powerExp = 2

Definition at line 246 of file image_operate.cpp.