31 #define PR(x) std::cout << #x " = " << x << std::endl; 32 #define ZERNIKE_ORDER(n) ceil((-3+sqrt(9+8*(double)(n)))/2.); 41 for (
int nZ = 0; nZ < nMax; ++nZ)
59 int q = ((n % 2 != 0) ? (
abs(l)-1)/2 : (( l > 0 ) ?
abs(l)/2-1 :
abs(l)/2 ) );
63 for (
int i = 0;
i <= q; ++
i)
66 for (
int j = 0;
j <=
m; ++
j)
68 int factor = ( (
i+
j)%2 ==0 ) ? 1 : -1 ;
70 for (
int k = 0;
k <= (m-
j); ++
k)
72 int ypow = 2 * (
i+
k) + p;
73 int xpow = n - 2 * (
i+
j+
k) - p;
80 fMatV.push_back(*fMatT);
90 size_t xdim =
XSIZE(im);
91 size_t ydim =
YSIZE(im);
93 int numZer = (size_t)coef.
sum();
108 double iMaxDim2 = 2./
std::max(xdim,ydim);
113 weightedLeastSquaresHelper.
w.
resizeNoCopy(weightedLeastSquaresHelper.
b);
128 for (
int py = 0; py < polOrder; ++py)
130 double ypy=std::pow(y,py);
131 for (
int px = 0; px < polOrder; ++px)
132 dMij(polValue,px,py) = ypy*std::pow(x,px);
138 for (
int k=0;
k < numZer; ++
k)
146 for (
size_t px = 0; px < (*fMat).Xdim(); ++px)
147 for (
size_t py = 0; py < (*fMat).Ydim(); ++py)
148 temp +=
dMij(*fMat,py,px)*
dMij(polValue,py,px);
150 dMij(zerMat,pixel_idx,
k) = temp;
173 for (
int k=0;
k < numZer; ++
k)
187 save()=reconstructed;
188 save.
write(
"reconstructedZernikes.xmp");
189 ROI.
write(
"ROI.txt");
199 int numZer = coef.
size();
201 int xdim =
XSIZE(im);
202 int ydim =
YSIZE(im);
207 double iMaxDim2 = 2./
std::max(xdim,ydim);
222 for (
int py = 0; py < polOrder; ++py)
224 double ypy=std::pow(y,py);
225 for (
int px = 0; px < polOrder; ++px)
226 dMij(polValue,px,py) = ypy*std::pow(x,px);
232 for (
int k=0;
k < numZer; ++
k)
239 for (
size_t px = 0; px < (*fMat).Xdim(); ++px)
240 for (
size_t py = 0; py < (*fMat).Ydim(); ++py)
255 save.
write(
"PPP1.xmp");
#define A2D_ELEM(v, i, j)
void resizeNoCopy(const MultidimArray< T1 > &v)
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)
void abs(Image< double > &op)
void zernikePols(const Matrix1D< int > coef, MultidimArray< double > &im, const MultidimArray< bool > &ROI, int verbose=0)
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
#define FOR_ALL_ELEMENTS_IN_ARRAY2D(m)
void resizeNoCopy(int Ydim, int Xdim)
Matrix1D< double > fittedCoeffs
void write(const FileName &fn) const
void max(Image< double > &op1, const Image< double > &op2)
double sum(bool average=false) const
void create(const Matrix1D< int > &coef)
void resizeNoCopy(int Xdim)
void fit(const Matrix1D< int > &coef, MultidimArray< double > &im, const MultidimArray< double > &weight, const MultidimArray< bool > &ROI, int verbose=0)
void weightedLeastSquares(WeightedLeastSquaresHelper &h, Matrix1D< double > &result)
size_t binom(int n, int k)