Xmipp  v3.23.11-Nereus
Macros | Functions
mask.cpp File Reference
#include "mask.h"
#include "core/xmipp_program.h"
#include "core/xmipp_image_generic.h"
#include "core/transformations.h"
#include "data/wavelet.h"
#include "core/xmipp_funcs.h"
Include dependency graph for mask.cpp:

Go to the source code of this file.

Macros

#define DWTCIRCULAR2D_BLOCK(s, quadrant)
 
#define DWTSPHERICALMASK_BLOCK(s, quadrant)
 
#define SHOW_MODE
 
#define SHOW_CENTER   std::cout << " (x0,y0,z0)=(" << x0 << "," << y0 << "," << z0 << ")\n";
 

Functions

void RaisedCosineMask (MultidimArray< double > &mask, double r1, double r2, int mode, double x0, double y0, double z0)
 
void RaisedCrownMask (MultidimArray< double > &mask, double r1, double r2, double pix_width, int mode, double x0, double y0, double z0)
 
void KaiserMask (MultidimArray< double > &mask, double delta, double Deltaw)
 
void SincMask (MultidimArray< double > &mask, double omega, int mode, double x0, double y0, double z0)
 
void SincKaiserMask (MultidimArray< double > &mask, double omega, double delta, double Deltaw)
 
void BlackmanMask (MultidimArray< double > &mask, int mode, double x0, double y0, double z0)
 
void SincBlackmanMask (MultidimArray< double > &mask, double omega, double power_percentage, double x0, double y0, double z0)
 
void BinaryCircularMask (MultidimArray< int > &mask, double radius, int mode, double x0, double y0, double z0)
 
void BlobCircularMask (MultidimArray< double > &mask, double r1, blobtype blob, int mode, double x0, double y0, double z0)
 
void BinaryCrownMask (MultidimArray< int > &mask, double R1, double R2, int mode, double x0, double y0, double z0)
 
void BinaryTubeMask (MultidimArray< int > &mask, double R1, double R2, double H, int mode, double x0, double y0, double z0)
 
void BlobCrownMask (MultidimArray< double > &mask, double r1, double r2, blobtype blob, int mode, double x0, double y0, double z0)
 
void BinaryFrameMask (MultidimArray< int > &mask, int Xrect, int Yrect, int Zrect, int mode, double x0, double y0, double z0)
 
void GaussianMask (MultidimArray< double > &mask, double sigma, int mode, double x0, double y0, double z0)
 
void BinaryDWTCircularMask2D (MultidimArray< int > &mask, double radius, int smin, int smax, const std::string &quadrant)
 
void SeparableSincKaiserMask2D (MultidimArray< double > &mask, double omega, double delta, double Deltaw)
 
void mask2D_4neig (MultidimArray< int > &mask, int value, int center)
 
void mask2D_8neig (MultidimArray< int > &mask, int value1, int value2, int center)
 
void BinaryDWTSphericalMask3D (MultidimArray< int > &mask, double radius, int smin, int smax, const std::string &quadrant)
 
void BinaryCylinderMask (MultidimArray< int > &mask, double R, double H, int mode, double x0, double y0, double z0)
 
void BinaryConeMask (MultidimArray< int > &mask, double theta, int mode, bool centerOrigin)
 
void BinaryWedgeMask (MultidimArray< int > &mask, double theta0, double thetaF, const Matrix2D< double > &A, bool centerOrigin)
 
void mask3D_6neig (MultidimArray< int > &mask, int value, int center)
 
void mask3D_18neig (MultidimArray< int > &mask, int value1, int value2, int center)
 
void mask3D_26neig (MultidimArray< int > &mask, int value1, int value2, int value3, int center)
 
int count_with_mask (const MultidimArray< int > &mask, const MultidimArray< std::complex< double > > &m, int mode, double th1, double th2)
 
void rangeAdjust_within_mask (const MultidimArray< double > *mask, const MultidimArray< double > &m1, MultidimArray< double > &m2)
 
Mask Tools

All Mask tools work only in the overlapping area of the given image/volume and the mask in logical coordinates. Ie, if you have a mask defined from -2 to 2 and you apply it to an image defined from 0 to 63 then only those values of the mask between 0 and 2 will be applied. The rest of the image will remain untouched. This region where the mask is active within the overlapping area will be called in this documentation: active area.

void apply_geo_binary_2D_mask (MultidimArray< int > &mask, const Matrix2D< double > &A)
 
void apply_geo_cont_2D_mask (MultidimArray< double > &mask, const Matrix2D< double > &A)
 

Macro Definition Documentation

◆ DWTCIRCULAR2D_BLOCK

#define DWTCIRCULAR2D_BLOCK (   s,
  quadrant 
)
Value:
SelectDWTBlock(s, mask, quadrant, \
XX(corner1),XX(corner2),YY(corner1),YY(corner2)); \
V2_PLUS_V2(center,corner1,corner2); \
V2_BY_CT(center,center,0.5); \
FOR_ALL_ELEMENTS_IN_ARRAY2D_BETWEEN(corner1,corner2) { \
double r2=(XX(r)-XX(center))*(XX(r)-XX(center))+ \
(YY(r)-YY(center))*(YY(r)-YY(center)); \
A2D_ELEM(mask,YY(r),XX(r))=(r2<=radius2); \
}
#define XX(v)
Definition: matrix1d.h:85
#define YY(v)
Definition: matrix1d.h:93
void SelectDWTBlock(int scale, const MultidimArray< T > &I, const std::string &quadrant, int &x1, int &x2)
Definition: wavelet.h:134
float r2

Definition at line 346 of file mask.cpp.

◆ DWTSPHERICALMASK_BLOCK

#define DWTSPHERICALMASK_BLOCK (   s,
  quadrant 
)
Value:
SelectDWTBlock(s, mask, quadrant, \
XX(corner1),XX(corner2),YY(corner1),YY(corner2), \
ZZ(corner1),ZZ(corner2)); \
V3_PLUS_V3(center,corner1,corner2); \
V3_BY_CT(center,center,0.5); \
FOR_ALL_ELEMENTS_IN_ARRAY3D_BETWEEN(corner1,corner2) { \
double r2=(XX(r)-XX(center))*(XX(r)-XX(center))+ \
(YY(r)-YY(center))*(YY(r)-YY(center))+ \
(ZZ(r)-ZZ(center))*(ZZ(r)-ZZ(center)); \
A3D_ELEM(mask,ZZ(r),YY(r),XX(r))=(r2<=radius2); \
}
#define XX(v)
Definition: matrix1d.h:85
#define YY(v)
Definition: matrix1d.h:93
void SelectDWTBlock(int scale, const MultidimArray< T > &I, const std::string &quadrant, int &x1, int &x2)
Definition: wavelet.h:134
float r2
#define ZZ(v)
Definition: matrix1d.h:101

Definition at line 431 of file mask.cpp.

◆ SHOW_CENTER

#define SHOW_CENTER   std::cout << " (x0,y0,z0)=(" << x0 << "," << y0 << "," << z0 << ")\n";

◆ SHOW_MODE

#define SHOW_MODE
Value:
if (mode==INNER_MASK) std::cout << " mode=INNER MASK\n"; \
else std::cout << " mode=OUTER MASK\n";
void mode
constexpr int INNER_MASK
Definition: mask.h:47

Function Documentation

◆ BinaryCylinderMask()

void BinaryCylinderMask ( MultidimArray< int > &  mask,
double  R,
double  H,
int  mode,
double  x0,
double  y0,
double  z0 
)

Definition at line 471 of file mask.cpp.

473 {
474  mask.initZeros();
475  double R2 = R * R;
476  double H_2 = H / 2;
478  {
479  double r2 = (i - y0) * (i - y0) + (j - x0) * (j - x0);
480  int in_cyilinder = (r2 <= R2 && ABS(k - z0) <= H_2);
481  if (in_cyilinder && mode == INNER_MASK)
482  A3D_ELEM(mask, k, i, j) = 1;
483  else if (!in_cyilinder && mode == OUTSIDE_MASK)
484  A3D_ELEM(mask, k, i, j) = 1;
485  }
486 }
#define z0
#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 A3D_ELEM(V, k, i, j)
#define FOR_ALL_ELEMENTS_IN_ARRAY3D(V)
#define y0
#define x0
#define ABS(x)
Definition: xmipp_macros.h:142
void mode
#define j
constexpr int OUTSIDE_MASK
Definition: mask.h:48
float r2
void initZeros(const MultidimArray< T1 > &op)
constexpr int INNER_MASK
Definition: mask.h:47

◆ BinaryDWTSphericalMask3D()

void BinaryDWTSphericalMask3D ( MultidimArray< int > &  mask,
double  radius,
int  smin,
int  smax,
const std::string &  quadrant 
)

Definition at line 443 of file mask.cpp.

445 {
446  mask.initZeros();
447  double radius2 = radius * radius / (4 * (smin + 1));
448  for (int s = smin; s <= smax; s++)
449  {
450  Matrix1D<int> corner1(3);
451  Matrix1D<int> corner2(3);
452  Matrix1D<int> r(3);
453  Matrix1D<double> center(3);
454  if (quadrant == "xxx")
455  {
456  DWTSPHERICALMASK_BLOCK(s, "001");
457  DWTSPHERICALMASK_BLOCK(s, "010");
458  DWTSPHERICALMASK_BLOCK(s, "011");
459  DWTSPHERICALMASK_BLOCK(s, "100");
460  DWTSPHERICALMASK_BLOCK(s, "101");
461  DWTSPHERICALMASK_BLOCK(s, "110");
462  DWTSPHERICALMASK_BLOCK(s, "111");
463  }
464  else
465  DWTSPHERICALMASK_BLOCK(s, quadrant);
466  radius2 /= 4;
467  }
468 }
#define DWTSPHERICALMASK_BLOCK(s, quadrant)
Definition: mask.cpp:431
void initZeros(const MultidimArray< T1 > &op)
double radius
Spatial radius in Universal System units.
Definition: blobs.h:115

◆ BinaryTubeMask()

void BinaryTubeMask ( MultidimArray< int > &  mask,
double  R1,
double  R2,
double  H,
int  mode,
double  x0,
double  y0,
double  z0 
)

Definition at line 261 of file mask.cpp.

263 {
264  mask.initZeros();
265  double R12 = R1 * R1;
266  double R22 = R2 * R2;
268  {
269  double r2 = (i - y0) * (i - y0) + (j - x0) * (j - x0);
270  bool in_tube = (r2 >= R12 && r2 <= R22 && ABS(k)<H);
271  if (in_tube && mode == INNER_MASK)
272  A3D_ELEM(mask, k, i, j) = 1;
273  else if (!in_tube && mode == OUTSIDE_MASK)
274  A3D_ELEM(mask, k, i, j) = 1;
275  }
276 }
#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 A3D_ELEM(V, k, i, j)
#define FOR_ALL_ELEMENTS_IN_ARRAY3D(V)
#define y0
#define x0
#define ABS(x)
Definition: xmipp_macros.h:142
void mode
#define j
constexpr int OUTSIDE_MASK
Definition: mask.h:48
float r2
void initZeros(const MultidimArray< T1 > &op)
constexpr int INNER_MASK
Definition: mask.h:47