Xmipp  v3.23.11-Nereus
Public Member Functions | Public Attributes | List of all members
Wiener2D Class Reference

#include <wiener2d.h>

Collaboration diagram for Wiener2D:
Collaboration graph
[legend]

Public Member Functions

void applyWienerFilter (MultidimArray< double > &ptrImg, CTFDescription &ctf)
 
void applyWienerFilter (const FileName &fnImg, const FileName &fnImgOut, const MDRow &rowIn, MDRow &rowOut)
 
void wienerFilter (MultidimArray< double > &Mwien, CTFDescription &ctf)
 

Public Attributes

bool phase_flipped
 
double pad
 
bool isIsotropic
 
bool correct_envelope
 
double wiener_constant
 Wiener filter constant. More...
 
double sampling_rate
 Sampling rate. More...
 
Image< double > img
 
CTFDescription ctf
 
size_t Ydim
 
size_t Xdim
 
MultidimArray< double > Mwien
 
MultidimArray< std::complex< double > > Faux
 
FourierTransformer transformer
 

Detailed Description

Definition at line 36 of file wiener2d.h.

Member Function Documentation

◆ applyWienerFilter() [1/2]

void Wiener2D::applyWienerFilter ( MultidimArray< double > &  ptrImg,
CTFDescription ctf 
)

Definition at line 101 of file wiener2d.cpp.

102 {
103  ptrImg.setXmippOrigin();
104  Ydim = YSIZE(ptrImg);
105  Xdim = XSIZE(ptrImg);
106  int paddimY = Ydim*pad;
107  int paddimX = Xdim*pad;
108 
109  wienerFilter(Mwien, ctf);
110 
111  if (paddimX >= Xdim)
112  {
113  // pad real-space image
114  int x0 = FIRST_XMIPP_INDEX(paddimX);
115  int xF = LAST_XMIPP_INDEX(paddimX);
116  int y0 = FIRST_XMIPP_INDEX(paddimY);
117  int yF = LAST_XMIPP_INDEX(paddimY);
118  ptrImg.selfWindow(y0, x0, yF, xF);
119  }
120 
122  transformer.FourierTransform(ptrImg, Faux);
124  {
125  dAij(Faux,i,j) *= dAij(Mwien,i,j);
126  }
127 
128  transformer.inverseFourierTransform(Faux, ptrImg);
129 
130 
131  if (paddimX >= Xdim)
132  {
133  // de-pad real-space image
134  int x0 = FIRST_XMIPP_INDEX(Xdim);
135  int y0 = FIRST_XMIPP_INDEX(Ydim);
136  int xF = LAST_XMIPP_INDEX(Xdim);
137  int yF = LAST_XMIPP_INDEX(Ydim);
138  ptrImg.selfWindow(y0, x0, yF, xF);
139  }
140 }
void selfWindow(int n0, int z0, int y0, int x0, int nF, int zF, int yF, int xF, T init_value=0)
#define YSIZE(v)
size_t Ydim
Definition: wiener2d.h:66
void inverseFourierTransform()
Definition: xmipp_fftw.cpp:329
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY2D(m)
#define dAij(M, i, j)
size_t Xdim
Definition: wiener2d.h:66
void wienerFilter(MultidimArray< double > &Mwien, CTFDescription &ctf)
Definition: wiener2d.cpp:30
#define i
MultidimArray< double > Mwien
Definition: wiener2d.h:68
MultidimArray< std::complex< double > > Faux
Definition: wiener2d.h:69
#define y0
double pad
Definition: wiener2d.h:42
#define x0
#define XSIZE(v)
#define xF
void FourierTransform(T &v, T1 &V, bool getCopy=true)
Definition: xmipp_fftw.h:166
#define j
#define FIRST_XMIPP_INDEX(size)
Definition: xmipp_macros.h:439
#define LAST_XMIPP_INDEX(size)
Definition: xmipp_macros.h:448
#define yF
FourierTransformer transformer
Definition: wiener2d.h:70

◆ applyWienerFilter() [2/2]

void Wiener2D::applyWienerFilter ( const FileName fnImg,
const FileName fnImgOut,
const MDRow rowIn,
MDRow rowOut 
)

Definition at line 143 of file wiener2d.cpp.

144 {
145  rowOut = rowIn;
146 
147  img.read(fnImg);
148  ctf.readFromMdRow(rowIn);
149  ctf.phase_shift = (ctf.phase_shift*PI)/180;
150 
151  MultidimArray<double> &ptrImg =img();
152  applyWienerFilter(ptrImg, ctf);
153 
154  img.write(fnImgOut);
155  rowOut.setValue(MDL_IMAGE, fnImgOut);
156 }
void applyWienerFilter(MultidimArray< double > &ptrImg, CTFDescription &ctf)
Definition: wiener2d.cpp:101
CTFDescription ctf
Definition: wiener2d.h:64
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 phase_shift
Definition: ctf.h:305
void readFromMdRow(const MDRow &row, bool disable_if_not_K=true)
Definition: ctf.cpp:1172
void setValue(MDLabel label, const T &d, bool addLabel=true)
int read(const FileName &name, DataMode datamode=DATA, size_t select_img=ALL_IMAGES, bool mapData=false, int mode=WRITE_READONLY)
#define PI
Definition: tools.h:43
Name of an image (std::string)
Image< double > img
Definition: wiener2d.h:62

◆ wienerFilter()

void Wiener2D::wienerFilter ( MultidimArray< double > &  Mwien,
CTFDescription ctf 
)

Definition at line 30 of file wiener2d.cpp.

31 {
32  int paddimY;
33  paddimY = Ydim*pad;
34  int paddimX = Xdim*pad;
35  ctf.enable_CTF = true;
36  ctf.enable_CTFnoise = false;
37  ctf.produceSideInfo();
38 
41 
42  Mwien.resize(paddimY,paddimX);
43 
44  ctf.Tm = sampling_rate;
45 
46  if (isIsotropic)
47  {
48  double avgdef = (ctf.DeltafU + ctf.DeltafV)/2.;
49  ctf.DeltafU = avgdef;
50  ctf.DeltafV = avgdef;
51  }
52 
53  ctfIm.resize(1, 1, paddimY, paddimX,false);
54  //Esto puede estar mal. Cuidado con el sampling de la ctf!!!
55  if (correct_envelope)
56  ctf.generateCTF(paddimY, paddimX, ctfComplex);
57  else
58  ctf.generateCTFWithoutDamping(paddimY, paddimX, ctfComplex);
59 
60  if (phase_flipped)
61  {
63  dAij(ctfIm, i, j) = fabs(dAij(ctfComplex, i, j).real());
64  }
65  else
66  {
68  dAij(ctfIm, i, j) = dAij(ctfComplex, i, j).real();
69  }
70 
71  double result;
73  {
74  result = (DIRECT_N_YX_ELEM (ctfIm, 0, i, j));
75  dAij(Mwien,i,j) = (result *result);
76  }
77 
78  // Add Wiener constant
79  if (wiener_constant < 0.)
80  {
81 
82  // Use Grigorieff's default for Wiener filter constant: 10% of average over all Mwien terms
83  // Grigorieff JSB 157(1) (2006), pp 117-125
84  double valueW = 0.1*Mwien.computeAvg();
86  {
87  dAij(Mwien,i,j) += valueW;
88  dAij(Mwien,i,j) = dAij(ctfIm, i, j)/dAij(Mwien, i, j);
89  }
90  }
91  else
92  {
94  {
95  dAij(Mwien,i,j) += wiener_constant;
96  dAij(Mwien,i,j) = dAij(ctfIm, i, j)/dAij(Mwien, i, j);
97  }
98  }
99 }
size_t Ydim
Definition: wiener2d.h:66
void resize(size_t Ndim, size_t Zdim, size_t Ydim, size_t Xdim, bool copy=true)
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY2D(m)
#define dAij(M, i, j)
size_t Xdim
Definition: wiener2d.h:66
bool isIsotropic
Definition: wiener2d.h:44
double DeltafV
Defocus in V (in Angstroms). Negative values are underfocused.
Definition: ctf.h:830
#define i
double DeltafU
Global gain. By default, 1.
Definition: ctf.h:828
bool enable_CTF
Enable CTF part.
Definition: ctf.h:275
double pad
Definition: wiener2d.h:42
double Tm
Sampling rate (A/pixel)
Definition: ctf.h:240
#define j
void generateCTF(const MultidimArray< T1 > &sample_image, MultidimArray< T2 > &CTF, double Ts=-1)
Definition: ctf.h:1194
double wiener_constant
Wiener filter constant.
Definition: wiener2d.h:49
void produceSideInfo()
Produce Side information.
Definition: ctf.cpp:1392
bool phase_flipped
Definition: wiener2d.h:39
#define DIRECT_N_YX_ELEM(v, l, i, j)
double computeAvg() const
bool enable_CTFnoise
Enable CTFnoise part.
Definition: ctf.h:273
double sampling_rate
Sampling rate.
Definition: wiener2d.h:52
bool correct_envelope
Definition: wiener2d.h:46
void generateCTFWithoutDamping(int Ydim, int Xdim, MultidimArray< T > &CTF, double Ts=-1)
Definition: ctf.h:1245

Member Data Documentation

◆ correct_envelope

bool Wiener2D::correct_envelope

Definition at line 46 of file wiener2d.h.

◆ ctf

CTFDescription Wiener2D::ctf

Definition at line 64 of file wiener2d.h.

◆ Faux

MultidimArray<std::complex<double> > Wiener2D::Faux

Definition at line 69 of file wiener2d.h.

◆ img

Image<double> Wiener2D::img

Definition at line 62 of file wiener2d.h.

◆ isIsotropic

bool Wiener2D::isIsotropic

Definition at line 44 of file wiener2d.h.

◆ Mwien

MultidimArray<double> Wiener2D::Mwien

Definition at line 68 of file wiener2d.h.

◆ pad

double Wiener2D::pad

Padding factor

Definition at line 42 of file wiener2d.h.

◆ phase_flipped

bool Wiener2D::phase_flipped

Definition at line 39 of file wiener2d.h.

◆ sampling_rate

double Wiener2D::sampling_rate

Sampling rate.

Definition at line 52 of file wiener2d.h.

◆ transformer

FourierTransformer Wiener2D::transformer

Definition at line 70 of file wiener2d.h.

◆ wiener_constant

double Wiener2D::wiener_constant

Wiener filter constant.

Definition at line 49 of file wiener2d.h.

◆ Xdim

size_t Wiener2D::Xdim

Definition at line 66 of file wiener2d.h.

◆ Ydim

size_t Wiener2D::Ydim

Definition at line 66 of file wiener2d.h.


The documentation for this class was generated from the following files: