31 #ifndef CORE_FILTERS_H 32 #define CORE_FILTERS_H 33 constexpr
double LOG2 = 0.693147181;
95 float stop_colour = 1,
96 float filling_colour = 1,
98 int neighbourhood = 8);
116 float stop_colour = 1,
117 float filling_colour = 1,
151 int neighbourhood = 8);
169 int neighbourhood = 8);
178 double percentage = 0,
179 int neighbourhood = 8);
243 bool binarizeVolume=
true);
248 template <
typename T>
275 for (k = 0; k < Slices; k++)
278 if (kp < 0 || kp >= Slices)
280 for (i = 0; i < Rows; i++)
283 if (ip < 0 || ip >= Rows)
285 for (j = 0; j < Cols; j++)
289 if (jp >= 0 && jp < Cols)
309 template <
typename T>
327 template <
typename T>
331 T * __restrict__ refX = x.
data;
332 T * __restrict__ refY = y.
data;
339 retval += (*refX++)*(*refY++);
340 retval += (*refX++)*(*refY++);
341 retval += (*refX++)*(*refY++);
342 retval += (*refX++)*(*refY++);
360 template <
typename T>
365 double isigma=1.0/sigma;
380 template <
typename T>
385 double K=-0.5/(sigma*sigma);
389 retval+=exp(K*diff*diff);
468 double &shiftX,
double &shiftY,
double &shiftZ,
CorrelationAux &aux,
501 double &shiftX,
double &shiftY,
541 bool wrap=xmipp_transformation::WRAP);
597 const String &eulerAngles,
629 bool wrap=xmipp_transformation::WRAP,
641 int Niter=10,
bool considerMirror=
true);
666 bool estimateMu=
true,
int iterations=10);
671 template <
typename T>
684 if (!(*mask)(
k,
i,
j))
714 template <
typename T>
724 template <
typename T>
737 if (Contributions !=
nullptr)
742 if (!(*mask)(
k,
i,
j))
761 if (!(*mask)(
k,
i,
j))
771 return sqrt(retval / n);
797 template <
typename T>
840 template <
typename T>
847 while ((i1 < 3) && (i2 < 3))
866 template <
typename T>
1054 template <
typename T>
1087 template <
typename T>
1106 int finalY =
YSIZE(m) - 2;
1107 int finalX =
XSIZE(m) - 2;
1110 for (
int i = initialY;
i <= finalY;
i++)
1114 for (
int j = initialX;
j <= finalX;
j += 2)
1192 int RefinementLoops,
1193 bool adjust_range =
true);
1290 int Niter=10,
bool limitShift=
true);
1308 template <
typename T>
1325 for (
int kk=-2; kk<=2; kk++)
1328 if (kkk<0 || kkk>=
ZSIZE(V))
1330 for (
int ii=-2; ii<=2; ii++)
1333 if (iii<0 || iii>=
YSIZE(V))
1335 for (
int jj=-2; jj<=2; jj++)
1338 if (jjj<0 || jjj>=
XSIZE(V))
1346 while (index > 0 && neighbours[index-1] > neighbours[index])
1348 SWAP(neighbours[index-1], neighbours[index], aux);
1355 badRemaining =
true;
1368 while (badRemaining);
1377 template <
typename T>
1380 if (thresFactor > 0 )
1388 avg = stddev = low = high = 0;
1390 low = (avg - thresFactor * stddev);
1391 high = (avg + thresFactor * stddev);
1410 template <
typename T>
1514 typedef enum { PLANE, ROLLINGBALL } BackgroundType;
1515 BackgroundType
type;
1550 int Shah_refinement;
double alignImagesConsideringMirrors(const MultidimArray< double > &Iref, MultidimArray< double > &I, Matrix2D< double > &M, bool wrap)
double fastBestRotationAroundZ(const MultidimArray< double > &IrefCylZ, const MultidimArray< double > &I, CorrelationAux &aux, VolumeAlignmentAux &aux2)
void computeEdges(const MultidimArray< double > &vol, MultidimArray< double > &vol_edge)
void denoiseTVFilter(MultidimArray< double > &V, int maxIter)
void centerImageRotationally(MultidimArray< double > &I, RotationalCorrelationAux &aux)
double giniCoeff(MultidimArray< double > &I, int varKernelSize=50)
MultidimArray< double > IauxRS
void centerImageTranslationally(MultidimArray< double > &I, CorrelationAux &aux)
double rms(const MultidimArray< T > &x, const MultidimArray< T > &y, const MultidimArray< int > *mask=nullptr, MultidimArray< double > *Contributions=nullptr)
double correlation(const MultidimArray< T > &x, const MultidimArray< T > &y, const MultidimArray< int > *mask=nullptr, int l=0, int m=0, int q=0)
void forcePositive(MultidimArray< double > &V)
MultidimArray< double > Icyl
void regionGrowing3D(const MultidimArray< double > &V_in, MultidimArray< double > &V_out, int k, int i, int j, float stop_colour=1, float filling_colour=1, bool less=true)
double alignImages(const MultidimArray< double > &Iref, MultidimArray< double > &I, Matrix2D< double > &M, bool wrap=xmipp_transformation::WRAP)
double OtsuSegmentation(MultidimArray< double > &V)
void rotationalInvariantMoments(const MultidimArray< double > &img, const MultidimArray< int > *mask, MultidimArray< double > &v_out)
void sqrt(Image< double > &op)
MultidimArray< double > IauxSR
void computeStats(double &avg, double &stddev, T &minval, T &maxval) const
#define DIRECT_A2D_ELEM(v, i, j)
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY3D(V)
void estimateGaussian2D(const MultidimArray< double > &I, double &a, double &b, Matrix1D< double > &mu, Matrix2D< double > &sigma, bool estimateMu=true, int iterations=10)
void sort(T a, T b, T c, MultidimArray< T > &v)
void fourierBesselDecomposition(const MultidimArray< double > &img_in, double r2, int k1, int k2)
void matlab_filter(Matrix1D< double > &B, Matrix1D< double > &A, const MultidimArray< double > &X, MultidimArray< double > &Y, MultidimArray< double > &Z)
void bestNonwrappingShift(const MultidimArray< double > &I1, const MultidimArray< double > &I2, double &shiftX, double &shiftY, CorrelationAux &aux)
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 median(MultidimArray< T > &x, MultidimArray< T > &y, T &m)
virtual void readParams(XmippProgram *program)
double mutualInformation(const MultidimArray< T > &x, const MultidimArray< T > &y, int nx=0, int ny=0, const MultidimArray< int > *mask=nullptr)
Matrix2D< double > centerImage(MultidimArray< double > &I, CorrelationAux &aux, RotationalCorrelationAux &aux2, int Niter=10, bool limitShift=true)
void detectBackground(const MultidimArray< double > &vol, MultidimArray< double > &mask, double alpha, double &final_mean)
#define A3D_ELEM(V, k, i, j)
double imedNormalizedDistance(const MultidimArray< double > &I1, const MultidimArray< double > &I2)
AlignmentAux & operator=(const AlignmentAux &)=delete
void varianceFilter(MultidimArray< double > &I, int kernelSize=10, bool relative=false)
#define FOR_ALL_ELEMENTS_IN_ARRAY3D(V)
double unnormalizedGaussian2D(const Matrix1D< double > &r, const Matrix1D< double > &mu, const Matrix2D< double > &sigmainv)
void log(Image< double > &op)
MultidimArray< double > I12
void regionGrowing3DEqualValue(const MultidimArray< double > &V_in, MultidimArray< int > &V_out, int filling_value)
void distanceTransform(const MultidimArray< int > &in, MultidimArray< int > &out, bool wrap=false)
double fastMaskedCorrelation(const MultidimArray< T > &x, const MultidimArray< T > &y, const MultidimArray< int > &mask)
double EntropyOtsuSegmentation(MultidimArray< double > &V, double percentil=0.05, bool binarizeVolume=true)
double fastBestRotationAroundY(const MultidimArray< double > &IrefCylY, const MultidimArray< double > &I, CorrelationAux &aux, VolumeAlignmentAux &aux2)
MultidimArray< double > corr
void forceDWTSparsity(MultidimArray< double > &V, double eps)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
Polar< std::complex< double > > polarFourierI
void removeSmallComponents(MultidimArray< double > &I, int size, int neighbourhood=8)
void contrastEnhancement(Image< double > *I)
MultidimArray< double > rotationalCorr
double euclidianDistance(const MultidimArray< T > &x, const MultidimArray< T > &y, const MultidimArray< int > *mask=nullptr)
void regionGrowing2D(const MultidimArray< double > &I_in, MultidimArray< double > &I_out, int i, int j, float stop_colour=1, float filling_colour=1, bool less=true, int neighbourhood=8)
#define DIRECT_MULTIDIM_ELEM(v, n)
double imedDistance(const MultidimArray< double > &I1, const MultidimArray< double > &I2)
double getValue(double x) const
void smoothingShah(MultidimArray< double > &img, MultidimArray< double > &surface_strength, MultidimArray< double > &edge_strength, const Matrix1D< double > &W, int OuterLoops, int InnerLoops, int RefinementLoops, bool adjust_range=true)
#define DIRECT_A3D_ELEM(v, k, i, j)
MultidimArray< double > I1
double correlationMasked(const MultidimArray< double > &I1, const MultidimArray< double > &I2)
void pixelDesvFilter(MultidimArray< T > &V, double thresFactor)
double bestRotationAroundZ(const MultidimArray< double > &Iref, const MultidimArray< double > &I, CorrelationAux &aux, VolumeAlignmentAux &aux2)
void mergeSort(MultidimArray< T > &v1, MultidimArray< T > &v2, MultidimArray< T > &v)
T fastCorrelation(const MultidimArray< T > &x, const MultidimArray< T > &y)
double correlationWeighted(MultidimArray< double > &I1, MultidimArray< double > &I2)
void fastBestRotation(const MultidimArray< double > &IrefCylZ, const MultidimArray< double > &IrefCylY, const MultidimArray< double > &IrefCylX, MultidimArray< double > &I, const String &eulerAngles, Matrix2D< double > &R, CorrelationAux &aux, VolumeAlignmentAux &aux2)
MultidimArray< double > I123
int labelImage2D(const MultidimArray< double > &I, MultidimArray< double > &label, int neighbourhood=8)
void boundMedianFilter(MultidimArray< T > &V, const MultidimArray< char > &mask, int n=0)
void fillBinaryObject(MultidimArray< double > &I, int neighbourhood=8)
double bestShiftRealSpace(const MultidimArray< double > &I1, MultidimArray< double > &I2, double &shiftX, double &shiftY, const MultidimArray< int > *mask=nullptr, int maxShift=5, double shiftStep=1.0)
MultidimArray< double > IrefCyl
double bestShift(const MultidimArray< double > &I1, const MultidimArray< double > &I2, double &shiftX, double &shiftY, CorrelationAux &aux, const MultidimArray< int > *mask=nullptr, int maxShift=-1)
void covarianceMatrix(const MultidimArray< double > &I, Matrix2D< double > &C)
void logFilter(MultidimArray< T > &V, double a, double b, double c)
void keepBiggestComponent(MultidimArray< double > &I, double percentage=0, int neighbourhood=8)
void medianFilter3x3(MultidimArray< T > &m, MultidimArray< T > &out)
void substractBackgroundRollingBall(MultidimArray< double > &I, int radius)
void alignSetOfImages(MetaData &MD, MultidimArray< double > &Iavg, int Niter=10, bool considerMirror=true)
double tomographicDiffusion(MultidimArray< double > &V, const Matrix1D< double > &alpha, double lambda)
void fillTriangle(MultidimArray< double > &img, int *tx, int *ty, double color)
void noisyZonesFilter(MultidimArray< double > &I, int kernelSize=10)
double fastCorrentropy(const MultidimArray< T > &x, const MultidimArray< T > &y, double sigma, const GaussianInterpolator &G)
double EntropySegmentation(MultidimArray< double > &V)
double svdCorrelation(const MultidimArray< double > &I1, const MultidimArray< double > &I2, const MultidimArray< int > *mask=nullptr)
#define SPEED_UP_tempsInt
void fastMergeSort(MultidimArray< T > &x, MultidimArray< T > &y, MultidimArray< T > &v)
void initZeros(const MultidimArray< T1 > &op)
#define FOR_ALL_ELEMENTS_IN_COMMON_IN_ARRAY3D(V1, V2)
void localThresholding(MultidimArray< double > &img, double C, double dimLocal, MultidimArray< int > &result, MultidimArray< int > *mask=nullptr)
int labelImage3D(const MultidimArray< double > &V, MultidimArray< double > &label)
double correntropy(const MultidimArray< T > &x, const MultidimArray< T > &y, double sigma)
void substractBackgroundPlane(MultidimArray< double > &I)
void inertiaMoments(const MultidimArray< double > &img, const MultidimArray< int > *mask, Matrix1D< double > &v_out, Matrix2D< double > &u)
double fastBestRotationAroundX(const MultidimArray< double > &IrefCylX, const MultidimArray< double > &I, CorrelationAux &aux, VolumeAlignmentAux &aux2)