55 <<
"Volume1: " <<
fnV1 << std::endl
56 <<
"Volume2: " <<
fnV2 << std::endl
57 <<
"Rootname: " <<
fnRoot << std::endl
58 <<
"Denoising Iterations: " <<
NiterReal << std::endl
59 <<
"Deconvolution Iterations: " <<
NiterFourier << std::endl
60 <<
"Sigma0: " <<
sigma0 << std::endl
61 <<
"Lambda: " <<
lambda << std::endl
62 <<
"Bank step:" <<
bankStep << std::endl
64 <<
"Weight fun:" <<
weightFun << std::endl
66 <<
"Difference Iterations: " <<
NiterDiff << std::endl
67 <<
"Kdiff: " <<
Kdiff << std::endl
75 addUsageLine(
"Given two halves of a volume (and an optional mask), produce a better estimate of the volume underneath");
78 addParamsLine(
" [--oroot <root=\"volumeRestored\">] : Output rootname");
79 addParamsLine(
" [--denoising <N=0>] : Number of iterations of denoising in real space");
80 addParamsLine(
" [--deconvolution <N=0> <sigma0=0.2> <lambda=0.001>] : Number of iterations of deconvolution in Fourier space, initial sigma and lambda");
81 addParamsLine(
" [--filterBank <step=0> <overlap=0.5> <weightFun=1> <weightPower=3>] : Frequency step for the filter bank (typically, 0.01; between 0 and 0.5)");
82 addParamsLine(
" : filter overlap is between 0 (no overlap) and 1 (full overlap)");
83 addParamsLine(
" : Weight function (0=mean, 1=min, 2=mean*diff");
84 addParamsLine(
" [--difference <N=0> <K=1.5>] : Number of iterations of difference evaluation in real space");
92 V1().setXmippOrigin();
93 V2().setXmippOrigin();
130 std::cout <<
"Denoising iteration " <<
iter << std::endl;
141 std::cout <<
"Deconvolution iteration " <<
iter << std::endl;
163 std::cout <<
"Difference iteration " <<
iter << std::endl;
173 S().resizeNoCopy(
V1r());
221 N().resizeNoCopy(Vi);
260 double H1=exp(K1*R2n);
261 double H2=exp(K2*R2n);
279 double K=-0.5/(sigmaConv*sigmaConv);
285 double H1=exp(K*R2n);
297 if (sigma1<0 || sigma2<0 || sigma1>2 || sigma2>2)
299 double K1=-0.5/(sigma1*sigma1);
300 double K2=-0.5/(sigma2*sigma2);
312 double H1=exp(K1*R2n);
313 double H2=exp(K2*R2n);
346 if (R2n>=w2 && R2n<w2Step)
369 mV1r.initZeros(Vfiltered2);
373 int imax=ceil(0.5/filterStep);
374 std::cerr <<
"Calculating filter bank ..." << std::endl;
380 for(; w<0.5; w+=filterStep)
386 N().resizeNoCopy(Vfiltered1);
409 case 0: weight=0.5*(w1+w2);
break;
410 case 1: weight=
std::min(w1,w2);
break;
411 case 2: weight=0.5*(w1+w2)*(1-fabs(w1-w2)/(w1+w2));
break;
429 save.
write(
"PPP1.vol");
431 save.
write(
"PPP1r.vol");
433 save.
write(
"PPP2.vol");
435 save.
write(
"PPPS.vol");
436 save()=Vfiltered2-Vfiltered1;
437 save.
write(
"PPPdiff.vol");
439 save.
write(
"PPPweight.vol");
441 save.
write(
"PPPsumWeight.vol");
442 std::cout <<
"w=" << w <<
" Press";
443 char c; std::cin >>
c;
467 N().computeAvgStdev(mean,stddev);
469 N().computeAvgStdev_within_binary_mask(*
pMask,mean,stddev);
476 double k=-0.5/(stddev*stddev);
void init_progress_bar(long total)
void min(Image< double > &op1, const Image< double > &op2)
void readParams()
Read argument from command line.
double getDoubleParam(const char *param, int arg=0)
void produceSideInfo()
Side information.
void resizeNoCopy(const MultidimArray< T1 > &v)
FourierTransformer transformer1
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)
MultidimArray< std::complex< double > > fV2r
MultidimArray< int > * pMask
void evaluateDifference()
void abs(Image< double > &op)
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY3D(V)
FourierTransformer transformer
void calculateCDF(MultidimArray< double > &V, double probStep=0.005)
Calculate the CDF of V with a probability step of 0.005 (p is between 0 and 1)
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
static void defineParams(XmippProgram *program, int allowed_data_types=ALL_KINDS, const char *prefix=nullptr, const char *comment=nullptr, bool moreOptions=false)
MultidimArray< double > R2
#define A3D_ELEM(V, k, i, j)
double restorationSigmaCost(double *x, void *_prm)
const char * getParam(const char *param, int arg=0)
void defineParams()
Define parameters.
void progress_bar(long rlen)
double getProbability(double x)
Get the probability Pr{V<=x}.
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
FourierTransformer transformer2
#define DIRECT_MULTIDIM_ELEM(v, n)
MultidimArray< std::complex< double > > fV1r
void significanceRealSpace(const MultidimArray< double > &V1, MultidimArray< double > &V1r)
void readParams(XmippProgram *program)
int verbose
Verbosity level.
void filterBand(const MultidimArray< std::complex< double > > &Vin, FourierTransformer &transformer, double w)
__device__ float FFT_IDX2DIGFREQ(int idx, int size)
void generate_mask(bool apply_geo=false)
bool checkParam(const char *param)
int read(const FileName &name, DataMode datamode=DATA, size_t select_img=ALL_IMAGES, bool mapData=false, int mode=WRITE_READONLY)
void estimateS()
Different estimates.
void addUsageLine(const char *line, bool verbatim=false)
void initZeros(const MultidimArray< T1 > &op)
const MultidimArray< int > & get_binary_mask() const
int getIntParam(const char *param, int arg=0)
void addParamsLine(const String &line)
MultidimArray< std::complex< double > > fVol