34 addUsageLine(
"Enhance volume contrast by applying a non-linear transformation to gray levels");
35 addUsageLine(
"+The contrast enhancement is based on an evolution of an article of");
36 addUsageLine(
"+[[http://www.ncbi.nlm.nih.gov/pubmed/16579377][Sean Matz]] and is further ");
37 addUsageLine(
"+explained [[http://biocomp.cnb.csic.es/~coss/Articulos/Fuentes2010.pdf][here]]");
38 addUsageLine(
"+The algorithm detects the molecule borders and applies a nonlinear transformation ");
43 addParamsLine(
" [--removeBackground] : Remove the noise of the background");
44 addParamsLine(
" [--alpha+ <a=0.01>] : Confidence interval for background identification");
45 addParamsLine(
" [--lowerIntensity+ <intensity=0>] : Only process if the gray value is higher than this value");
46 addParamsLine(
" [--saveMask+ <filename=\"\">] : Filename for the background mask");
47 addExampleLine(
"xmipp_volume_enhance_contrast -i volume.vol -o volumeEnhanced.vol");
77 <<
"Input: " <<
fnIn << std::endl
78 <<
"Output: " <<
fnOut << std::endl
79 <<
"Alpha: " <<
alpha << std::endl
81 <<
"removeBackground: " <<
removeBg << std::endl
82 <<
"saveMask: " <<
fnMask << std::endl;
89 double minVal=0., maxVal=0.;
111 save.
write(
"PPP1_init.vol");
121 save.
write(
"PPPmask.vol");
138 save.
write(
"PPPmask_c.vol");
155 save.
write(
"PPP2_no_bg.vol");
164 save.
write(
"PPP3_edge.vol");
169 #define COMPUTE_STATISTICS(V,N,k,i,j,avg,stddev,cubeSize) \ 171 int k0,kF,i0,iF,j0,jF; \ 172 k0=XMIPP_MAX(k-N,STARTINGZ(V)); \ 173 kF=XMIPP_MIN(k+N,FINISHINGZ(V)); \ 174 i0=XMIPP_MAX(i-N,STARTINGY(V)); \ 175 iF=XMIPP_MIN(i+N,FINISHINGY(V)); \ 176 j0=XMIPP_MAX(j-N,STARTINGX(V)); \ 177 jF=XMIPP_MIN(j+N,FINISHINGX(V)); \ 178 double sum=0, sum2=0; \ 179 for (int kk=k0; kk<=kF; ++kk) \ 180 for (int ii=i0; ii<=iF; ++ii) \ 181 for (int jj=j0; jj<=jF; ++jj) \ 183 double v=A3D_ELEM(V,kk,ii,jj); \ 187 cubeSize=(kF-k0+1)*(iF-i0+1)*(jF-j0+1); \ 189 stddev=sum2/cubeSize-avg*avg; \ 190 stddev=sqrt(XMIPP_MAX(stddev,0)); \ 208 double avgSmall, stddevSmall, NSmall;
214 newCubeDim=newCubeDim+1;
215 double avgBig, stddevBig, NBig;
227 K=
sqrt(((stddevSmall*stddevSmall)/NSmall)+((stddevBig*stddevBig)/NBig));
234 if (newCubeDim>=max_tam)
242 stddevSmall=stddevBig;
257 save.
write(
"PPP4_vol_tam.vol");
265 #define COMPUTE_MEGV(VxE,V_E,N,k,i,j,pixel) \ 267 int k0,kF,i0,iF,j0,jF; \ 268 k0=XMIPP_MAX(k-N,STARTINGZ(V_E)); \ 269 kF=XMIPP_MIN(k+N,FINISHINGZ(V_E)); \ 270 i0=XMIPP_MAX(i-N,STARTINGY(V_E)); \ 271 iF=XMIPP_MIN(i+N,FINISHINGY(V_E)); \ 272 j0=XMIPP_MAX(j-N,STARTINGX(V_E)); \ 273 jF=XMIPP_MIN(j+N,FINISHINGX(V_E)); \ 274 double sum1=0, sum2=0; \ 275 for (int kk=k0; kk<=kF; kk++) \ 276 for (int ii=i0; ii<=iF; ii++) \ 277 for (int jj=j0; jj<=jF; jj++) \ 279 double v1=A3D_ELEM(VxE,kk,ii,jj); \ 281 double v2=A3D_ELEM(V_E,kk,ii,jj); \ 303 save.
write(
"PPP5_vol_megv.vol");
319 if ((x>=0) && (x<=3))
324 else if ((x>3) && (x<=8))
329 else if ((x>8) && (x<=16))
334 else if ((x>16) && (x<=30))
339 else if ((x>30) && (x<=49))
344 else if ((x>49) && (x<=75))
349 else if ((x>75) && (x<=107))
354 else if ((x>107) && (x<=147))
359 else if ((x>147) && (x<=196))
373 x_new=E-
sqrt(((E-a)*(E-a))-((x-a)*(x-a)));
377 x_new=E+
sqrt(((b-E)*(b-E))-((x-b)*(x-b)));
384 save.
write(
"PPP6_vol_f.vol");
404 x_ns=((maxVal-minVal)/255)*(x_s+((255*minVal)/(maxVal-minVal)));
void selfWindow(int n0, int z0, int y0, int x0, int nF, int zF, int yF, int xF, T init_value=0)
void resize(size_t Ndim, size_t Zdim, size_t Ydim, size_t Xdim, bool copy=true)
double getDoubleParam(const char *param, int arg=0)
#define COMPUTE_MEGV(VxE, V_E, N, k, i, j, pixel)
void sqrt(Image< double > &op)
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)
#define COMPUTE_STATISTICS(V, N, k, i, j, avg, stddev, cubeSize)
double icdf_gauss(double p)
void rangeAdjust(T minF, T maxF)
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY3D(V)
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 addSeeAlsoLine(const char *seeAlso)
void detectBackground(const MultidimArray< double > &vol, MultidimArray< double > &mask, double alpha, double &final_mean)
void threshold(double *phi, unsigned long nvox, double limit)
#define A3D_ELEM(V, k, i, j)
#define FOR_ALL_ELEMENTS_IN_ARRAY3D(V)
const char * getParam(const char *param, int arg=0)
void computeDoubleMinMax(double &minval, double &maxval) const
void addExampleLine(const char *example, bool verbatim=true)
void computeEdges(const MultidimArray< double > &vol, MultidimArray< double > &vol_edge)
int verbose
Verbosity level.
#define DIRECT_A3D_ELEM(v, k, i, j)
void enhance(MultidimArray< double > &vol)
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 addUsageLine(const char *line, bool verbatim=false)
double computeAvg() const
void addParamsLine(const String &line)