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

#include <geometry.h>

Collaboration diagram for Bspline_model:
Collaboration graph
[legend]

Public Member Functions

double evaluate (double x, double y) const
 Evaluate the model at the point (x,y) More...
 

Public Attributes

int l0
 l0 More...
 
int lF
 lF; More...
 
int m0
 m0 More...
 
int mF
 mF; More...
 
double x0
 x0 More...
 
double y0
 y0 More...
 
int SplineDegree
 Order of the Bspline. More...
 
double h_x
 Scale X. More...
 
double h_y
 Scale Y. More...
 
MultidimArray< double > c_ml
 

Detailed Description

Bspline model class

When you fit a Bspline model this is the type returned. You can use it to evaluate it anywhere.

The model is f(x,y)=sum_{l=l0}^{lF} {sum_{m=m0}^{mF} {c_{ml}Beta_n((x-x0)/h_x-l) Beta_n((y-y0)/h_y-m) } }.

The parameter n is the Bspline degree. l0, lF, m0 and mF are the Bspline indexes. hx and hy are related to the extent of the Bspline.

Definition at line 273 of file geometry.h.

Member Function Documentation

◆ evaluate()

double Bspline_model::evaluate ( double  x,
double  y 
) const

Evaluate the model at the point (x,y)

Definition at line 1238 of file geometry.cpp.

1239 {
1240  int SplineDegree_1 = SplineDegree - 1;
1241  double x_arg = (x - x0) / h_x;
1242  double y_arg = (y - y0) / h_y;
1243 
1244  int l1 = CLIP(CEIL(x_arg - SplineDegree_1), l0, lF);
1245  int l2 = CLIP(l1 + SplineDegree, l0, lF);
1246  int m1 = CLIP(CEIL(y_arg - SplineDegree_1), m0, mF);
1247  int m2 = CLIP(m1 + SplineDegree, m0, mF);
1248  double columns = 0.0;
1249  for (int m = m1; m <= m2; m++)
1250  {
1251  double rows = 0.0;
1252  for (int l = l1; l <= l2; l++)
1253  {
1254  double xminusl = x_arg - (double)l;
1255  double Coeff = c_ml(m, l);
1256  switch (SplineDegree)
1257  {
1258  case 2:
1259  rows += Coeff * Bspline02(xminusl);
1260  break;
1261  case 3:
1262  rows += Coeff * Bspline03(xminusl);
1263  break;
1264  case 4:
1265  rows += Coeff * Bspline04(xminusl);
1266  break;
1267  case 5:
1268  rows += Coeff * Bspline05(xminusl);
1269  break;
1270  case 6:
1271  rows += Coeff * Bspline06(xminusl);
1272  break;
1273  case 7:
1274  rows += Coeff * Bspline07(xminusl);
1275  break;
1276  case 8:
1277  rows += Coeff * Bspline08(xminusl);
1278  break;
1279  case 9:
1280  rows += Coeff * Bspline09(xminusl);
1281  break;
1282  }
1283  }
1284 
1285  double yminusm = y_arg - (double)m;
1286  switch (SplineDegree)
1287  {
1288  case 2:
1289  columns += rows * Bspline02(yminusm);
1290  break;
1291  case 3:
1292  columns += rows * Bspline03(yminusm);
1293  break;
1294  case 4:
1295  columns += rows * Bspline04(yminusm);
1296  break;
1297  case 5:
1298  columns += rows * Bspline05(yminusm);
1299  break;
1300  case 6:
1301  columns += rows * Bspline06(yminusm);
1302  break;
1303  case 7:
1304  columns += rows * Bspline07(yminusm);
1305  break;
1306  case 8:
1307  columns += rows * Bspline08(yminusm);
1308  break;
1309  case 9:
1310  columns += rows * Bspline09(yminusm);
1311  break;
1312  }
1313  }
1314  return columns;
1315 }
double Bspline05(double Argument)
double y0
y0
Definition: geometry.h:288
int lF
lF;
Definition: geometry.h:279
static double * y
int l0
l0
Definition: geometry.h:277
doublereal * x
double x0
x0
Definition: geometry.h:286
double Bspline04(double Argument)
#define CLIP(x, x0, xF)
Definition: xmipp_macros.h:260
#define CEIL(x)
Definition: xmipp_macros.h:225
int SplineDegree
Order of the Bspline.
Definition: geometry.h:291
double Bspline03(double Argument)
double Bspline07(double Argument)
double Bspline08(double Argument)
int m
double Bspline02(double Argument)
MultidimArray< double > c_ml
Definition: geometry.h:302
double Bspline09(double Argument)
int mF
mF;
Definition: geometry.h:283
double Bspline06(double Argument)
double h_y
Scale Y.
Definition: geometry.h:296
int m0
m0
Definition: geometry.h:281
double h_x
Scale X.
Definition: geometry.h:294

Member Data Documentation

◆ c_ml

MultidimArray< double > Bspline_model::c_ml

Bspline coefficients, c_{ml}

The logical indexes of this matrix go from Y=[m0...mF] and X=[l0...lF]

Definition at line 302 of file geometry.h.

◆ h_x

double Bspline_model::h_x

Scale X.

Definition at line 294 of file geometry.h.

◆ h_y

double Bspline_model::h_y

Scale Y.

Definition at line 296 of file geometry.h.

◆ l0

int Bspline_model::l0

l0

Definition at line 277 of file geometry.h.

◆ lF

int Bspline_model::lF

lF;

Definition at line 279 of file geometry.h.

◆ m0

int Bspline_model::m0

m0

Definition at line 281 of file geometry.h.

◆ mF

int Bspline_model::mF

mF;

Definition at line 283 of file geometry.h.

◆ SplineDegree

int Bspline_model::SplineDegree

Order of the Bspline.

Definition at line 291 of file geometry.h.

◆ x0

double Bspline_model::x0

x0

Definition at line 286 of file geometry.h.

◆ y0

double Bspline_model::y0

y0

Definition at line 288 of file geometry.h.


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