Xmipp  v3.23.11-Nereus
program_filter.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  * Authors: J.M.de la Rosa Trevin (jmdelarosa@cnb.csic.es)
3  *
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 
27 #include "program_filter.h"
28 #include "data/fourier_filter.h"
29 #include "denoise.h"
30 #include "mean_shift.h"
31 
33 
35  delete filter;
36 }
37 
39 {
41  addUsageLine("Apply different type of filters to images or volumes.");
55 
56  //examples
57  addExampleLine("Filter a volume using a mask =volumeMask.vol= to remove bad pixels:", false);
58  addExampleLine("xmipp_transform_filter -i volume.vol -o volumeFiltered1.vol --bad_pixels mask volumeMask.vol");
59  addExampleLine("Remove extreme pixels:", false);
60  addExampleLine("xmipp_transform_filter -i volume.vol -o volumeFiltered2.vol --bad_pixels outliers 0.5");
61  addExampleLine("Apply a Fourier filter on a volume:", false);
62  addExampleLine("xmipp_transform_filter -i volume.vol -o volumeFiltered.vol --fourier low_pass 0.05");
63  addExampleLine("xmipp_transform_filter -i volume.vol -o volumeFiltered.vol -f band_pass 0.1 0.3");
64  addExampleLine("xmipp_transform_filter -i image.ser -o imageFiltered.xmp --background plane");
65  addExampleLine("xmipp_transform_filter -i smallStack.stk -o smallFiltered.stk -w DAUB12 difussion");
66  addExampleLine("Filter a volume using a wedge mask rotated 10 degress",false);
67  addExampleLine("xmipp_transform_filter --fourier wedge -60 60 0 0 10 -i ico.spi -o kk0.spi --verbose");
68  addExampleLine("Save filtering mask (do not filter)",false);
69  addExampleLine("xmipp_transform_filter --fourier wedge -60 60 0 0 10 -i ico.spi -o kk0.spi --verbose --save mask.spi");
70  addExampleLine("Preprocess image optained in the nikon coolscan",false);
71  addExampleLine("xmipp_transform_filter --log -i ico.spi -o kk0.spi --fa 4.431 --fb 0.4018 --fc 336.6");
72  addExampleLine("xmipp_transform_filter -i Falcon_2014_07_16-16_32_43_0.mrcs --denoiseTV 50");
73 }
74 
76 {
77  readCTF=false;
79 
80  if (checkParam("--fourier"))
81  {
82  filter = new FourierFilter();
83  String filterType=getParam("--fourier");
84  if (filterType=="astigmatism")
85  readCTF=true;
86  }
87  else if (checkParam("--wavelet"))
88  filter = new WaveletFilter();
89  else if (checkParam("--bad_pixels"))
90  filter = new BadPixelFilter();
91  else if (checkParam("--mean_shift"))
92  filter = new MeanShiftFilter();
93  else if (checkParam("--background"))
94  filter = new BackgroundFilter();
95  else if (checkParam("--median"))
96  filter = new MedianFilter();
97  else if (checkParam("--diffusion"))
98  filter = new DiffusionFilter();
99  else if (checkParam("--basis"))
100  filter = new BasisFilter();
101  else if (checkParam("--log"))
102  filter = new LogFilter();
103  else if (checkParam("--retinex"))
104  filter = new RetinexFilter();
105  else if (checkParam("--denoiseTV"))
106  filter = new DenoiseTVFilter();
107  else if (checkParam("--softnegative"))
108  filter = new SoftNegativeFilter();
109  else
110  REPORT_ERROR(ERR_ARG_MISSING, "You should provide some filter");
111  //Read params
112  filter->readParams(this);
113 }
114 
116 {
117  if (verbose)
118  filter->show();
119 }
120 
121 void ProgFilter::processImage(const FileName &fnImg, const FileName &fnImgOut, const MDRow &rowIn, MDRow &rowOut)
122 {
123  m_img.read(fnImg);
124  if (readCTF)
125  {
126  ((FourierFilter *)filter)->ctf.readFromMdRow(rowIn);
127  ((FourierFilter *)filter)->ctf.produceSideInfo();
128  ((FourierFilter *)filter)->generateMask(m_img());
129  }
130  filter->apply(m_img());
131  m_img.write(fnImgOut);
132 }
static void defineParams(XmippProgram *program)
Definition: filters.cpp:3640
Argument missing.
Definition: xmipp_error.h:114
static void defineParams(XmippProgram *program)
Definition: filters.cpp:3725
static void defineParams(XmippProgram *program)
Definition: denoise.cpp:49
#define REPORT_ERROR(nerr, ErrormMsg)
Definition: xmipp_error.h:211
virtual void apply(MultidimArray< double > &img)=0
static void defineParams(XmippProgram *program)
virtual void show()
Definition: filters.h:1456
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)
static void defineParams(XmippProgram *program)
Definition: mean_shift.cpp:288
static void defineParams(XmippProgram *program)
Definition: filters.cpp:3563
static void defineParams(XmippProgram *program)
Definition: filters.cpp:3704
void defineParams()
virtual void readParams(XmippProgram *program)
Definition: filters.h:1445
const char * getParam(const char *param, int arg=0)
static void defineParams(XmippProgram *program)
Definition: filters.cpp:3617
void addExampleLine(const char *example, bool verbatim=true)
static void defineParams(XmippProgram *program)
Definition: filters.cpp:3660
int verbose
Verbosity level.
static void defineParams(XmippProgram *program)
Definition: filters.cpp:3788
void processImage(const FileName &fnImg, const FileName &fnImgOut, const MDRow &rowIn, MDRow &rowOut)
std::string String
Definition: xmipp_strings.h:34
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)
bool each_image_produces_an_output
Indicate that an output is produced for each image in the input.
void addUsageLine(const char *line, bool verbatim=false)
static void defineParams(XmippProgram *program)
Definition: filters.cpp:3835
void readParams()
static void defineParams(XmippProgram *program)