1376 int thread_id = master->myThreadID;
1377 int Nimg=parent->
Nimg;
1379 const std::vector< std::vector< Matrix2D<double> > > &affineTransformations=
1382 master->chainList=
new std::vector<LandmarkChain>;
1383 std::vector<LandmarkChain> candidateChainList;
1391 mask.
resize(2*radius+1,2*radius+1);
1396 for (
int ii=thread_id; ii<=Nimg-1; ii+=numThreads)
1413 FilterBP.
w1=2.0/
XSIZE(Ifiltered);
1414 FilterBP.
w2=128.0/
XSIZE(Ifiltered);
1428 std::vector< Matrix1D<double> > Q;
1430 if (Ifiltered(
i,
j)<th && largeMask(
i,
j))
1433 bool localMinimum=
true;
1455 size_t qmax=Q.size();
1457 minDistance.
resize(qmax);
1459 for (
size_t q1=0;
q1<qmax;
q1++)
1460 for (
size_t q2=
q1+1;
q2< qmax;
q2++)
1464 double d12=diffX*diffX+diffY*diffY;
1465 if (d12<minDistance(
q1))
1466 minDistance(
q1)=d12;
1467 if (d12<minDistance(
q2))
1468 minDistance(
q2)=d12;
1472 std::vector< Matrix1D<double> > Qaux;
1474 for (
int q=0; q<qlimit; q++)
1475 Qaux.push_back(Q[idxDistanceSort(qmax-1-q)-1]);
1486 for (
int q=0; q<qmax; q++)
1501 int jjmin=
XMIPP_MAX(0,ii-halfSeqLength);
1505 for (
int jj=jjmax; jj>=jjmin; --jj)
1512 Aij=affineTransformations[jj][jj_1];
1513 Aji=affineTransformations[jj_1][jj];
1526 jjmax=
XMIPP_MIN(Nimg-1,ii+halfSeqLength);
1528 for (
int jj=jjmin; jj<=jjmax; ++jj)
1535 Aij=affineTransformations[jj_1][jj];
1536 Aji=affineTransformations[jj][jj_1];
1549 candidateChainList.push_back(chain);
1558 for (
int iq=0; iq<imax; iq++)
1560 int q=idx(
XSIZE(idx)-1-iq)-1;
1563 master->chainList->push_back(candidateChainList[q]);
1566 std::cout <<
"Corr " << iq <<
": " << corrQ(q) <<
":";
1567 for (
int i=0; i<candidateChainList[q].size(); i++)
1568 std::cout << candidateChainList[q][i].imgIdx <<
" ";
1569 std::cout << std::endl;
1574 std::cout <<
"It's recommended to reduce the number of critical points\n";
1576 candidateChainList.
clear();
1582 save.
write(
"PPPoriginal.xmp");
1584 save.
write(
"PPPfiltered.xmp");
1587 if (Ifiltered(i,j)>=th || !largeMask(i,j))
1589 for (
int q=0; q<Q.size(); q++)
1593 save(
YY(Q[q])+
i,
XX(Q[q])+
j)=minval;
1595 for (
int iq=0; iq<imax; iq++)
1597 int q=idx(
XSIZE(idx)-1-iq)-1;
1601 save(
YY(Q[q])+i,
XX(Q[q])+j)=(minval+th)/2;
1604 save.
write(
"PPPcritical.xmp");
1605 std::cout <<
"Number of critical points=" << Q.size() << std::endl;
1606 std::cout <<
"CorrQ stats:";
1608 std::cout << std::endl;
1609 std::cout <<
"Press any key\n";
#define FOR_ALL_ELEMENTS_IN_MATRIX2D(m)
void init_progress_bar(long total)
void selfWindow(int n0, int z0, int y0, int x0, int nF, int zF, int yF, int xF, T init_value=0)
bool refineLandmark(int ii, int jj, const Matrix1D< double > &rii, Matrix1D< double > &rjj, double &maxCorr, bool tryFourier) const
#define A2D_ELEM(v, i, j)
void resize(size_t Ndim, size_t Zdim, size_t Ydim, size_t Xdim, bool copy=true)
size_t seqLength
Sequence Length.
void generateMask(const MultidimArray< double > &I, MultidimArray< unsigned char > &mask, int patchSize)
Matrix1D< int > isOutlier
void BinaryCircularMask(MultidimArray< int > &mask, double radius, int mode, double x0, double y0, double z0)
void write(const FileName &name="", size_t select_img=ALL_IMAGES, bool isStack=false, int mode=WRITE_OVERWRITE, CastWriteMode castMode=CW_CAST, int _swapWrite=0)
double percentil(double percent_mass)
bool refineChain(LandmarkChain &chain, double &corrChain)
#define FOR_ALL_ELEMENTS_IN_ARRAY2D(m)
size_t Ncritical
Number of critical points.
std::vector< std::string > name_list
void compute_hist(const MultidimArrayGeneric &array, Histogram1D &hist, int no_steps)
int numThreads
Number of threads to use for parallel computing.
std::vector< Landmark > LandmarkChain
void progress_bar(long rlen)
Matrix1D< double > vectorR2(double x, double y)
void printStats(std::ostream &out=std::cout) const
std::vector< MultidimArray< unsigned char > * > img
std::vector< std::vector< Matrix2D< double > > > affineTransformations
double localSize
Local refinement size.
void typeCast(const Matrix1D< T1 > &v1, Matrix1D< T2 > &v2)
constexpr int OUTSIDE_MASK
int read(const FileName &name, DataMode datamode=DATA, size_t select_img=ALL_IMAGES, bool mapData=false, int mode=WRITE_READONLY)
void initZeros(const MultidimArray< T1 > &op)
void generateMask(MultidimArray< double > &v)
void indexSort(MultidimArray< int > &indx) const
void applyMaskSpace(MultidimArray< double > &v)