Xmipp  v3.23.11-Nereus
mask.h
Go to the documentation of this file.
1 /***************************************************************************
2  *
3  * Authors: Carlos Oscar S. Sorzano (coss@cnb.csic.es)
4  *
5  * Unidad de Bioinformatica of Centro Nacional de Biotecnologia , CSIC
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
20  * 02111-1307 USA
21  *
22  * All comments concerning this program package may be sent to the
23  * e-mail address 'xmipp@cnb.csic.es'
24  ***************************************************************************/
25 
26 #ifndef CORE_MASK_H
27 #define CORE_MASK_H
28 
29 #include "blobs.h"
30 #include "core/histogram.h"
32 
33 template<typename T>
34 class MultidimArray;
35 template<typename T>
36 class Matrix2D;
37 
39  const Matrix2D< double >& A);
41  const Matrix2D< double >& A);
42 
45 
46 
47 constexpr int INNER_MASK = 1;
48 constexpr int OUTSIDE_MASK = 2;
49 constexpr int NO_ACTIVATE = 0;
50 constexpr int ACTIVATE = 1;
51 
53 
54 
64  double r1, double r2, int mode = INNER_MASK, double x0 = 0,
65  double y0 = 0, double z0 = 0);
66 
77  double r1, double r2, double pix_width,
78  int mode = INNER_MASK,
79  double x0 = 0, double y0 = 0, double z0 = 0);
80 
86 void KaiserMask(MultidimArray<double> &mask, double delta = 0.01,
87  double Deltaw = 1.0 / 12.0);
88 
101  double omega, int mode = INNER_MASK, double x0 = 0, double y0 = 0, double z0 = 0);
102 
110  double omega, double delta = 0.01, double Deltaw = 1.0 / 12.0);
111 
117  double x0 = 0, double y0 = 0, double z0 = 0);
118 
125  double omega, double power_percentage,
126  double x0 = 0, double y0 = 0, double z0 = 0);
127 
137  double radius, int mode = INNER_MASK,
138  double x0 = 0, double y0 = 0, double z0 = 0);
139 
140 
150  double r1, blobtype blob, int mode,
151  double x0 = 0, double y0 = 0, double z0 = 0);
152 
153 
165  double R1, double R2, int mode = INNER_MASK,
166  double x0 = 0, double y0 = 0, double z0 = 0);
167 
179  double r1, double r2, blobtype blob, int mode,
180  double x0 = 0, double y0 = 0, double z0 = 0);
181 
192  double sigma, int mode = INNER_MASK,
193  double x0 = 0, double y0 = 0, double z0 = 0);
194 
197  double radius, int smin, int smax,
198  const std::string& quadrant);
199 
207  double omega, double delta = 0.01,
208  double Deltaw = 1.0 / 12.0);
209 
215 void mask2D_4neig(MultidimArray< int >& mask, int value = 1, int center = NO_ACTIVATE);
216 
222 void mask2D_8neig(MultidimArray< int >& mask, int value1 = 1, int value2 = 1,
223  int center = NO_ACTIVATE);
224 
234  double radius, int smin, int smax,
235  const std::string& quadrant);
236 
246  double R, double H, int mode = INNER_MASK,
247  double x0 = 0, double y0 = 0, int z0 = 0);
248 
260  int Xrect, int Yrect, int Zrect, int mode = INNER_MASK,
261  double x0 = 0, double y0 = 0, double z0 = 0);
262 
273  double theta, int mode = INNER_MASK, bool centerOrigin=false);
274 
283 void BinaryWedgeMask(MultidimArray< int >& mask, double theta0, double thetaF,
284  const Matrix2D< double > &A, bool centerOrigin=false);
285 
286 
292 void mask3D_6neig(MultidimArray< int >& mask, int value = 1, int center = NO_ACTIVATE);
293 
299 void mask3D_18neig(MultidimArray< int >& mask, int value1 = 1, int value2 = 1,
300  int center = NO_ACTIVATE);
301 
308 void mask3D_26neig(MultidimArray< int >& mask, int value1 = 1, int value2 = 1,
309  int value3 = 1, int center = NO_ACTIVATE);
311 
360 class Mask
361 {
362 public:
363 
364 #define NO_MASK 0
365 #define BINARY_CIRCULAR_MASK 1
366 #define BINARY_CROWN_MASK 2
367 #define BINARY_CYLINDER_MASK 3
368 #define BINARY_FRAME_MASK 4
369 #define GAUSSIAN_MASK 5
370 #define RAISED_COSINE_MASK 6
371 #define BLACKMAN_MASK 7
372 #define SINC_MASK 8
373 #define SINC_BLACKMAN_MASK 9
374 #define READ_BINARY_MASK 10
375 #define READ_REAL_MASK 11
376 #define RAISED_CROWN_MASK 12
377 #define BINARY_DWT_CIRCULAR_MASK 13
378 #define BINARY_DWT_SPHERICAL_MASK 14
379 #define BINARY_CONE_MASK 15
380 #define BINARY_WEDGE_MASK 16
381 #define BLOB_CIRCULAR_MASK 17
382 #define BLOB_CROWN_MASK 18
383 #define BINARY_TUBE 19
384 
385 #define INT_MASK 1
386 #define DOUBLE_MASK 2
387 #define ALL_KINDS INT_MASK | DOUBLE_MASK
388 
389  static void defineParams(XmippProgram * program, int allowed_data_types = ALL_KINDS,
390  const char* prefix=nullptr, const char* comment=nullptr, bool moreOptions=false);
391  void readParams(XmippProgram * program);
392 
393 
402  int type;
403 
407  int mode;
408 
413  double R1;
414 
418  double R2;
419 
423  double pix_width;
424 
429 
431  double blob_radius;
432  double blob_alpha;
433 
437  double H;
438 
442  double sigma;
443 
447  double omega;
448 
451  int Xrect;
452 
455  int Yrect;
456 
459  int Zrect;
460 
462  double z0;
463 
466  double y0;
467 
470  double x0;
471 
474  int smin;
475 
478  int smax;
479 
483  std::string quadrant;
484 
488 
492 
496 
500 
504 
507  std::string mask_type;
508 
509 
510 public:
511 
515  Mask(int _allowed_data_type = ALL_KINDS);
516 
519  void clear();
520 
524  void read(int argc, const char** argv);
525 
532  void show() const;
533 
536  void usage() const;
537 
540  void write_mask(const FileName& fn);
541 
544  int datatype()
545  {
546  if (type == BINARY_CIRCULAR_MASK || type == BINARY_CROWN_MASK ||
547  type == BINARY_CYLINDER_MASK || type == BINARY_FRAME_MASK ||
548  type == BINARY_TUBE ||
549  type == NO_MASK || type == READ_BINARY_MASK ||
550  type == BINARY_DWT_CIRCULAR_MASK || type == BINARY_CONE_MASK)
551  return INT_MASK;
552 
553  else if (type == GAUSSIAN_MASK || type == RAISED_COSINE_MASK ||
554  type == SINC_MASK || type == SINC_BLACKMAN_MASK ||
555  type == BLACKMAN_MASK || type == RAISED_CROWN_MASK ||
556  type == BINARY_WEDGE_MASK || type == BLOB_CIRCULAR_MASK ||
557  type == BLOB_CROWN_MASK|| type == READ_REAL_MASK)
558  return DOUBLE_MASK;
559 
560  return 0;
561  }
562 
565  void resize(size_t Xdim);
566 
569  void resize(size_t Ydim, size_t Xdim);
570 
573  void resize(size_t Zdim, size_t Ydim, size_t Xdim);
574 
577  template<typename T>
579  {
580  switch (datatype())
581  {
582  case INT_MASK:
583  imask.resizeNoCopy(m);
584  break;
585 
586  case DOUBLE_MASK:
587  dmask.resizeNoCopy(m);
588  break;
589  }
590  }
591 
596  void generate_mask(bool apply_geo = false );
597 
600  void generate_mask(size_t Zdim, size_t Ydim, size_t Xdim)
601  {
602  resize(Zdim, Ydim, Xdim);
603  generate_mask();
604  }
605 
608  void generate_mask(int Ydim, int Xdim, bool apply_geo = false)
609  {
610  resize(Ydim, Xdim);
611  generate_mask(apply_geo);
612  }
613 
616  void generate_mask(int Xdim)
617  {
618  resize(Xdim);
619  generate_mask();
620  }
621 
624  template<typename T>
625  void generate_mask(const MultidimArray< T >& m, bool apply_geo = false)
626  {
627  resize(m);
628  generate_mask(apply_geo);
629  }
630 
634  template<typename T>
636  T subs_val = 0, bool apply_geo = false)
637  {
638  switch (datatype())
639  {
640  case INT_MASK:
641  if (apply_geo)
642  apply_geo_binary_2D_mask(imask, mask_geo);
643 
644  apply_binary_mask(imask, I, result, subs_val);
645  break;
646 
647  case DOUBLE_MASK:
648  if (apply_geo)
649  apply_geo_cont_2D_mask(dmask, mask_geo);
650 
651  apply_cont_mask(dmask, I, result);
652  break;
653  }
654  }
655 
656 
665  template<typename T>
667  {
668  // Resize the output vector
669  if (XSIZE(result) == 0)
670  {
671  int size = 0;
672  switch (datatype())
673  {
674  case INT_MASK:
676  if (DIRECT_A2D_ELEM(imask, i, j) > 0)
677  size++;
678  break;
679 
680  case DOUBLE_MASK:
682  if (DIRECT_A2D_ELEM(dmask, i, j) > 0)
683  size++;
684  break;
685  }
686  result.initZeros(size);
687  }
688 
689  int p = 0;
690  switch (datatype())
691  {
692  case INT_MASK:
694  if (DIRECT_A2D_ELEM(imask, i, j) > 0)
695  DIRECT_A1D_ELEM(result, p++) = DIRECT_A3D_ELEM(I, k, i, j);
696  break;
697  case DOUBLE_MASK:
699  if (DIRECT_A2D_ELEM(dmask, i, j) > 0)
700  DIRECT_A1D_ELEM(result, p++) = DIRECT_A3D_ELEM(I, k, i, j);
701  break;
702  }
703  }
704 
708  {
709  return imask;
710  }
711 
715  {
716  return imask;
717  }
718 
722  {
723  imask = _imask;
724  }
725 
729  {
730  return dmask;
731  }
732 
736  {
737  return dmask;
738  }
739 
743  {
744  dmask = _dmask;
745  }
746 
752  {
753  if (datatype() == INT_MASK)
754  {
755  typeCast(imask, dmask);
756  }
757  }
758 
764  {
765  if (datatype() == DOUBLE_MASK)
766  {
767  typeCast(dmask, imask);
768  }
769  }
770 
771 };
772 
786  const Matrix2D< double >& A);
787 
791  const Matrix2D< double >& A);
792 
798 template<typename T1, typename T>
800  const MultidimArray< T >& m, double& min_val,
801  double& max_val,
802  double& avg, double& stddev)
803 {
805  double sum1 = 0;
806  double sum2 = 0;
807  int N = 0;
808 
809  max_val = min_val = DIRECT_A3D_ELEM(m, 0, 0, 0);
810 
812  {
813  if (A3D_ELEM(mask, k, i, j) > 0)
814  {
815  N++;
816 
817  double aux=A3D_ELEM(m, k, i, j);
818  // Minimum and maximum
819  if (aux < min_val)
820  min_val = aux;
821  else if (aux > max_val)
822  max_val = aux;
823 
824  // cumulative sums for average and standard deviation
825  sum1 += aux;
826  sum2 += aux*aux;
827  }
828  }
829 
830  // average and standard deviation
831  avg = sum1 / (double) N;
832  if (N > 1)
833  stddev = sqrt(fabs(sum2 / N - avg * avg) * N / (N - 1));
834  else
835  stddev = 0;
836 }
837 
839  const MultidimArrayGeneric &m, double& min_val,
840  double& max_val,
841  double& avg, double& stddev)
842 {
843 #define COMPUTESTATS(type) \
844 computeStats_within_binary_mask(mask,*((MultidimArray<type>*)m.im),min_val,max_val,avg,stddev);
845 
847 
848 #undef COMPUTESTATS
849 }
850 
856 template<typename T>
858  MultidimArray< T >& m_out, T subs_val = (T) 0)
859 {
860  m_out.resize(m_in);
862  // If in common with the mask
863  if (k >= STARTINGZ(mask) && k <= FINISHINGZ(mask) &&
864  i >= STARTINGY(mask) && i <= FINISHINGY(mask) &&
865  j >= STARTINGX(mask) && j <= FINISHINGX(mask))
866  if (A3D_ELEM(mask, k, i, j) == 0)
867  A3D_ELEM(m_out, k, i, j) = subs_val;
868  else
869  A3D_ELEM(m_out, k, i, j) = A3D_ELEM(m_in, k, i, j);
870  // It is not in common, leave the original one
871  else
872  A3D_ELEM(m_out, k, i, j) = A3D_ELEM(m_in, k, i, j);
873 }
874 
880 template<typename T>
882  MultidimArray< T >& m_out)
883 {
884  m_out.resize(m_in);
886  // If in common with the mask
887  if ((k >= STARTINGZ(mask)) && (k <= FINISHINGZ(mask)) &&
888  (i >= STARTINGY(mask)) && (i <= FINISHINGY(mask)) &&
889  (j >= STARTINGX(mask) && j <= FINISHINGX(mask)))
890  {
891  A3D_ELEM(m_out, k, i, j) = (T)(A3D_ELEM(m_in, k, i, j) * A3D_ELEM(mask, k, i, j));
892  }
893  // It is not in common, leave the original one
894  else
895  A3D_ELEM(m_out, k, i, j) = A3D_ELEM(m_in, k, i, j);
896 }
897 
905 template<typename T>
908  int no_steps)
909 {
910  T min_val;
911  T max_val;
912  double avg;
913  double stddev;
914 
915  computeStats_within_binary_mask(mask, v, min_val, max_val, avg, stddev);
916  compute_hist_within_binary_mask(mask, v, hist, min_val, max_val, no_steps);
917 }
918 
927 template<typename T>
929  const MultidimArray< T >& v, Histogram1D& hist,
930  T min, T max, int no_steps)
931 {
933  hist.init(min, max, no_steps);
935  if (A3D_ELEM(mask, k, i, j) != 0)
936  {
937  double value=A3D_ELEM(v, k, i, j);
938  INSERT_VALUE(hist,value);
939  }
940 }
941 
942 constexpr int COUNT_ABOVE = 1;
943 constexpr int COUNT_BELOW = 2;
944 constexpr int COUNT_BETWEEN = 3;
945 
951 #define count_with_mask_above(mask, m, th) \
952  count_with_mask(mask, m, COUNT_ABOVE, th, 0);
953 
959 #define count_with_mask_below(mask, m, th) \
960  count_with_mask(mask, m, COUNT_BELOW, th, 0);
961 
968 #define count_with_mask_between(mask, m, th1, th2) \
969  count_with_mask(mask, m, COUNT_BETWEEN, th1, th2);
970 
982 template<typename T>
984  const MultidimArray< T >& m, int mode, double th1, double th2)
985 {
987  int N = 0;
989  if (A3D_ELEM(mask, k, i, j))
990  switch (mode)
991  {
992  case COUNT_ABOVE:
993  if (A3D_ELEM(m, k, i, j) >= th1)
994  N++;
995  break;
996 
997  case COUNT_BELOW:
998  if (A3D_ELEM(m, k, i, j) <= th1)
999  N++;
1000  break;
1001 
1002  case COUNT_BETWEEN:
1003  if (A3D_ELEM(m, k, i, j) >= th1 && A3D_ELEM(m, k, i, j) <= th2)
1004  N++;
1005  break;
1006  }
1007  return N;
1008 }
1009 
1010 // Specialization for complex numbers
1011 int count_with_mask(const MultidimArray< int >& mask,
1012  const MultidimArray< std::complex< double > > & m, int mode,
1013  double th1, double th2);
1014 
1019 template<typename T>
1021 {
1022  T* ptr=NULL;
1023  unsigned long int n;
1025  *ptr = 1-(*ptr);
1026 }
1027 
1035  const MultidimArray< double >& m1,
1038 
1040 {
1041 public:
1042 
1047  double th_above;
1049  double th_below;
1050  double subs_val;
1051  std::string str_subs_val;
1052  int count;
1054 
1055  void defineParams();
1056  void readParams();
1057  void preProcess();
1058  void postProcess();
1059 
1060  void processImage(const FileName &fnImg, const FileName &fnImgOut, const MDRow &rowIn, MDRow &rowOut);
1061 };
1062 
1064 #endif
double z0
Definition: mask.h:462
void generate_mask(int Xdim)
Definition: mask.h:616
void set_binary_mask(MultidimArray< int > &_imask)
Definition: mask.h:721
#define SINC_BLACKMAN_MASK
Definition: mask.h:373
void SeparableSincKaiserMask2D(MultidimArray< double > &mask, double omega, double delta=0.01, double Deltaw=1.0/12.0)
Definition: mask.cpp:379
void BinaryConeMask(MultidimArray< int > &mask, double theta, int mode=INNER_MASK, bool centerOrigin=false)
Definition: mask.cpp:488
constexpr int NO_ACTIVATE
Definition: mask.h:49
void min(Image< double > &op1, const Image< double > &op2)
void resize(size_t Ndim, size_t Zdim, size_t Ydim, size_t Xdim, bool copy=true)
void BlobCircularMask(MultidimArray< double > &mask, double r1, blobtype blob, int mode, double x0=0, double y0=0, double z0=0)
Definition: mask.cpp:219
Matrix2D< double > mask_geo
Definition: mask.h:491
int smin
Definition: mask.h:474
#define BINARY_TUBE
Definition: mask.h:383
#define BLACKMAN_MASK
Definition: mask.h:371
void BinaryCrownMask(MultidimArray< int > &mask, double R1, double R2, int mode=INNER_MASK, double x0=0, double y0=0, double z0=0)
Definition: mask.cpp:244
int Xrect
Definition: mask.h:451
#define FINISHINGX(v)
void apply_binary_mask(const MultidimArray< int > &mask, const MultidimArray< T > &m_in, MultidimArray< T > &m_out, T subs_val=(T) 0)
Definition: mask.h:857
#define INSERT_VALUE(histogram, value)
Definition: histogram.h:205
FileName fn_mask
Definition: mask.h:487
double R2
Definition: mask.h:418
void resizeNoCopy(const MultidimArray< T1 > &v)
Definition: mask.h:360
int smax
Definition: mask.h:478
void BinaryWedgeMask(MultidimArray< int > &mask, double theta0, double thetaF, const Matrix2D< double > &A, bool centerOrigin=false)
Definition: mask.cpp:524
void sqrt(Image< double > &op)
#define BINARY_CROWN_MASK
Definition: mask.h:366
void BinaryCircularMask(MultidimArray< int > &mask, double radius, int mode=INNER_MASK, double x0=0, double y0=0, double z0=0)
Definition: mask.cpp:193
#define BLOB_CROWN_MASK
Definition: mask.h:382
#define RAISED_COSINE_MASK
Definition: mask.h:370
void generate_mask(size_t Zdim, size_t Ydim, size_t Xdim)
Definition: mask.h:600
#define BINARY_CYLINDER_MASK
Definition: mask.h:367
void SincMask(MultidimArray< double > &mask, double omega, int mode=INNER_MASK, double x0=0, double y0=0, double z0=0)
Definition: mask.cpp:127
#define DIRECT_A2D_ELEM(v, i, j)
double sigma
Definition: mask.h:442
int allowed_data_types
Definition: mask.h:495
void resize(size_t Xdim)
Definition: mask.cpp:654
FileName fn_mask
Definition: mask.h:1044
#define BINARY_FRAME_MASK
Definition: mask.h:368
void generate_mask(int Ydim, int Xdim, bool apply_geo=false)
Definition: mask.h:608
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY_ptr(v, n, ptr)
void apply_geo_cont_2D_mask(MultidimArray< double > &mask, const Matrix2D< double > &A)
Definition: mask.cpp:1703
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY3D(V)
#define z0
#define FINISHINGZ(v)
int max_length
Definition: mask.h:1053
double th_above
Definition: mask.h:1047
#define SINC_MASK
Definition: mask.h:372
#define NO_MASK
Definition: mask.h:364
double H
Definition: mask.h:437
void resize(const MultidimArray< T > &m)
Definition: mask.h:578
#define STARTINGX(v)
void init(double min_val, double max_val, int n_steps)
Definition: histogram.cpp:71
MultidimArray< int > & get_binary_mask()
Definition: mask.h:714
void force_to_be_binary()
Definition: mask.h:763
#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 computeStats_within_binary_mask(const MultidimArray< T1 > &mask, const MultidimArray< T > &m, double &min_val, double &max_val, double &avg, double &stddev)
Definition: mask.h:799
double theta
static void defineParams(XmippProgram *program, int allowed_data_types=ALL_KINDS, const char *prefix=nullptr, const char *comment=nullptr, bool moreOptions=false)
Definition: mask.cpp:1203
int count_above
Definition: mask.h:1046
#define STARTINGY(v)
#define COMPUTESTATS(type)
#define A3D_ELEM(V, k, i, j)
double blob_alpha
Definition: mask.h:432
Definition: mask.h:36
void read(int argc, const char **argv)
Definition: mask.cpp:701
void mask3D_6neig(MultidimArray< int > &mask, int value=1, int center=NO_ACTIVATE)
Definition: mask.cpp:589
MultidimArray< double > dmask
Definition: mask.h:503
#define RAISED_CROWN_MASK
Definition: mask.h:376
void apply_mask(const MultidimArray< T > &I, MultidimArray< T > &result, T subs_val=0, bool apply_geo=false)
Definition: mask.h:635
#define DIRECT_A1D_ELEM(v, i)
#define FOR_ALL_ELEMENTS_IN_ARRAY3D(V)
#define BINARY_CONE_MASK
Definition: mask.h:379
constexpr int COUNT_BETWEEN
Definition: mask.h:944
#define y0
#define ALL_KINDS
Definition: mask.h:387
#define x0
double y0
Definition: mask.h:466
#define READ_BINARY_MASK
Definition: mask.h:374
Mask(int _allowed_data_type=ALL_KINDS)
Definition: mask.cpp:634
void BinaryDWTSphericalMask2D(MultidimArray< int > &mask, double radius, int smin, int smax, const std::string &quadrant)
void produce_vector(const MultidimArray< T > &I, MultidimArray< T > &result)
Definition: mask.h:666
#define READ_REAL_MASK
Definition: mask.h:375
double R1
Definition: mask.h:413
Mask mask
Definition: mask.h:1043
#define DOUBLE_MASK
Definition: mask.h:386
void BlackmanMask(MultidimArray< double > &mask, int mode=INNER_MASK, double x0=0, double y0=0, double z0=0)
Definition: mask.cpp:151
MultidimArray< double > & get_cont_mask()
Definition: mask.h:735
void force_to_be_continuous()
Definition: mask.h:751
double x0
Definition: mask.h:470
#define XSIZE(v)
void apply_cont_mask(const MultidimArray< double > &mask, const MultidimArray< T > &m_in, MultidimArray< T > &m_out)
Definition: mask.h:881
void BlobCrownMask(MultidimArray< double > &mask, double r1, double r2, blobtype blob, int mode, double x0=0, double y0=0, double z0=0)
Definition: mask.cpp:278
void max(Image< double > &op1, const Image< double > &op2)
int type
Definition: mask.h:402
int Yrect
Definition: mask.h:455
void mask2D_8neig(MultidimArray< int > &mask, int value1=1, int value2=1, int center=NO_ACTIVATE)
Definition: mask.cpp:417
void BinaryDWTCircularMask2D(MultidimArray< int > &mask, double radius, int smin, int smax, const std::string &quadrant)
Definition: mask.cpp:356
std::string quadrant
Definition: mask.h:483
void readParams(XmippProgram *program)
Definition: mask.cpp:1284
void GaussianMask(MultidimArray< double > &mask, double sigma, int mode=INNER_MASK, double x0=0, double y0=0, double z0=0)
Definition: mask.cpp:325
void mode
const MultidimArray< double > & get_cont_mask() const
Definition: mask.h:728
double omega
Definition: mask.h:447
#define DIRECT_A3D_ELEM(v, k, i, j)
#define BINARY_DWT_CIRCULAR_MASK
Definition: mask.h:377
#define j
void SincBlackmanMask(MultidimArray< double > &mask, double omega, double power_percentage, double x0=0, double y0=0, double z0=0)
Definition: mask.cpp:166
int m
#define BLOB_CIRCULAR_MASK
Definition: mask.h:381
int count
Definition: mask.h:1052
std::string mask_type
Definition: mask.h:507
double th_below
Definition: mask.h:1049
void invert_binary_mask(MultidimArray< T > &mask)
Definition: mask.h:1020
void RaisedCrownMask(MultidimArray< double > &mask, double r1, double r2, double pix_width, int mode=INNER_MASK, double x0=0, double y0=0, double z0=0)
Definition: mask.cpp:67
double pix_width
Definition: mask.h:423
void apply_geo_binary_2D_mask(MultidimArray< int > &mask, const Matrix2D< double > &A)
Definition: mask.cpp:1682
#define FINISHINGY(v)
void rangeAdjust_within_mask(const MultidimArray< double > *mask, const MultidimArray< double > &m1, MultidimArray< double > &m2)
Definition: mask.cpp:1738
void generate_mask(bool apply_geo=false)
Definition: mask.cpp:1577
std::string str_subs_val
Definition: mask.h:1051
#define GAUSSIAN_MASK
Definition: mask.h:369
constexpr int ACTIVATE
Definition: mask.h:50
void typeCast(const Matrix1D< T1 > &v1, Matrix1D< T2 > &v2)
Definition: matrix1d.h:1227
int Zrect
Definition: mask.h:459
#define BINARY_CIRCULAR_MASK
Definition: mask.h:365
int blob_order
Definition: mask.h:428
int datatype()
Definition: mask.h:544
#define INT_MASK
Definition: mask.h:385
double blob_radius
Definition: mask.h:431
void usage() const
Definition: mask.cpp:1134
double subs_val
Definition: mask.h:1050
constexpr int COUNT_BELOW
Definition: mask.h:943
constexpr int OUTSIDE_MASK
Definition: mask.h:48
void write_mask(const FileName &fn)
Definition: mask.cpp:1192
int count_below
Definition: mask.h:1048
MultidimArray< int > imask
Definition: mask.h:499
void KaiserMask(MultidimArray< double > &mask, double delta=0.01, double Deltaw=1.0/12.0)
Definition: mask.cpp:83
float r2
#define SPEED_UP_tempsInt
Definition: xmipp_macros.h:408
void mask3D_18neig(MultidimArray< int > &mask, int value1=1, int value2=1, int center=NO_ACTIVATE)
Definition: mask.cpp:598
void initZeros(const MultidimArray< T1 > &op)
void mask3D_26neig(MultidimArray< int > &mask, int value1=1, int value2=1, int value3=1, int center=NO_ACTIVATE)
Definition: mask.cpp:612
const MultidimArray< int > & get_binary_mask() const
Definition: mask.h:707
#define FOR_ALL_ELEMENTS_IN_COMMON_IN_ARRAY3D(V1, V2)
void BinaryCylinderMask(MultidimArray< int > &mask, double R, double H, int mode=INNER_MASK, double x0=0, double y0=0, int z0=0)
void generate_mask(const MultidimArray< T > &m, bool apply_geo=false)
Definition: mask.h:625
constexpr int COUNT_ABOVE
Definition: mask.h:942
void mask2D_4neig(MultidimArray< int > &mask, int value=1, int center=NO_ACTIVATE)
Definition: mask.cpp:409
void RaisedCosineMask(MultidimArray< double > &mask, double r1, double r2, int mode=INNER_MASK, double x0=0, double y0=0, double z0=0)
Definition: mask.cpp:36
#define BINARY_WEDGE_MASK
Definition: mask.h:380
#define STARTINGZ(v)
void clear()
Definition: mask.cpp:641
int * n
int count_with_mask(const MultidimArray< int > &mask, const MultidimArray< T > &m, int mode, double th1, double th2)
Definition: mask.h:983
void set_cont_mask(MultidimArray< double > &_dmask)
Definition: mask.h:742
void compute_hist_within_binary_mask(const MultidimArray< int > &mask, MultidimArray< T > &v, Histogram1D &hist, int no_steps)
Definition: mask.h:906
void show() const
Definition: mask.cpp:1021
void BinaryFrameMask(MultidimArray< int > &mask, int Xrect, int Yrect, int Zrect, int mode=INNER_MASK, double x0=0, double y0=0, double z0=0)
Definition: mask.cpp:309
int mode
Definition: mask.h:407
int create_mask
Definition: mask.h:1045
#define SWITCHDATATYPE(datatype, OP)
double * delta
void SincKaiserMask(MultidimArray< double > &mask, double omega, double delta=0.01, double Deltaw=1.0/12.0)
Definition: mask.cpp:139
float r1
constexpr int INNER_MASK
Definition: mask.h:47