level — Leveling and background removal
#include <libprocess/gwyprocess.h>
void gwy_data_field_area_fit_plane (GwyDataField *data_field
,GwyDataField *mask
,gint col
,gint row
,gint width
,gint height
,gdouble *pa
,gdouble *pbx
,gdouble *pby
);
Fits a plane through a rectangular part of a data field.
The coefficients can be used for plane leveling using the same relation as in gwy_data_field_fit_plane()
, counting
indices from area top left corner.
data_field |
A data field |
|
mask |
Mask of values to take values into account, or |
|
col |
Upper-left column coordinate. |
|
row |
Upper-left row coordinate. |
|
width |
Area width (number of columns). |
|
height |
Area height (number of rows). |
|
pa |
Where constant coefficient should be stored (or |
|
pbx |
Where x plane coefficient should be stored (or |
|
pby |
Where y plane coefficient should be stored (or |
void gwy_data_field_area_fit_plane_mask (GwyDataField *data_field
,GwyDataField *mask
,GwyMaskingType masking
,gint col
,gint row
,gint width
,gint height
,gdouble *pa
,gdouble *pbx
,gdouble *pby
);
Fits a plane through a rectangular part of a data field with masking.
The coefficients can be used for plane leveling using the same relation as in gwy_data_field_fit_plane()
, counting
indices from area top left corner.
data_field |
A data field |
|
mask |
Mask specifying which values to take into account/exclude, or |
|
masking |
Masking mode to use. |
|
col |
Upper-left column coordinate. |
|
row |
Upper-left row coordinate. |
|
width |
Area width (number of columns). |
|
height |
Area height (number of rows). |
|
pa |
Where constant coefficient should be stored (or |
|
pbx |
Where x plane coefficient should be stored (or |
|
pby |
Where y plane coefficient should be stored (or |
Since: 2.56
void gwy_data_field_fit_plane (GwyDataField *data_field
,gdouble *pa
,gdouble *pbx
,gdouble *pby
);
Fits a plane through a data field.
The coefficients can be used for plane leveling using relation data[i] := data[i] - (pa + pby*i + pbx*j);
data_field |
A data field. |
|
pa |
Where constant coefficient should be stored (or |
|
pbx |
Where x plane coefficient should be stored (or |
|
pby |
Where y plane coefficient should be stored (or |
gboolean gwy_data_field_fit_facet_plane (GwyDataField *data_field
,GwyDataField *mfield
,GwyMaskingType masking
,gdouble *pa
,gdouble *pbx
,gdouble *pby
);
Calculates the inclination of a plane close to the dominant plane in a data field.
The dominant plane is determined by taking into account larger local slopes with exponentially smaller weight.
This is the basis of so-called facet levelling algorithm. Usually, the plane found by this method is subtracted
using gwy_data_field_plane_level()
and the entire process is repeated until it converges. A convergence criterion
may be sufficiently small values of the x and y plane coefficients. Note that since gwy_data_field_plane_level()
uses pixel-based lateral coordinates, the coefficients must be divided by gwy_data_field_get_dx(data_field) and
gwy_data_field_get_dy(data_field) to obtain physical plane coefficients.
data_field |
A data field. |
|
mfield |
Mask specifying which values to take into account/exclude, or |
|
masking |
Masking mode to use. |
|
pa |
Where constant coefficient should be stored (or |
|
pbx |
Where x plane coefficient should be stored. |
|
pby |
Where y plane coefficient should be stored. |
TRUE
if any plane was actually fitted; FALSE
if there was an insufficient number of unmasked pixels.
Since: 2.37
gboolean gwy_data_field_facet_level (GwyDataField *data_field
,GwyDataField *mask
,GwyMaskingType masking
,gint maxiter
,GwySetFractionFunc set_fraction
);
Performs facet-levelling of a data field.
The levelling consists of repeated computation of the dominant plane using gwy_data_field_fit_facet_plane()
and
subtraction of the dominant plane. Usually only several iterations are required for convergence.
data_field |
A data field. It the procedure is cancelled it will be unchanged. |
|
mask |
Mask field specifying which values to take into account/exclude, or |
|
masking |
Masking mode to use. |
|
maxiter |
Maximum number of levelling iterations. Pass a non-positive number for (a high) default. |
|
set_fraction |
Function that sets progress fraction to output (or |
TRUE
if levelling has finished (either by converging or reaching the maximum number of iterations);
FALSE
if it was cancelled or there was an insufficient number of unmasked pixels.
Since: 2.67
void gwy_data_field_plane_level (GwyDataField *data_field
,gdouble a
,gdouble bx
,gdouble by
);
Subtracts plane from a data field.
See gwy_data_field_fit_plane()
for details.
data_field |
A data field. |
|
a |
Constant coefficient. |
|
bx |
X plane coefficient. |
|
by |
Y plane coefficient. |
void gwy_data_field_plane_rotate (GwyDataField *data_field
,gdouble xangle
,gdouble yangle
,GwyInterpolationType interpolation
);
Performs rotation of plane along x and y axis.
data_field |
A data field. |
|
xangle |
Rotation angle in x direction (rotation along y axis, in radians). |
|
yangle |
Rotation angle in y direction (rotation along x axis, in radians). |
|
interpolation |
Interpolation type (can be only of two-point type). |
void gwy_data_field_fit_lines (GwyDataField *data_field
,gint col
,gint row
,gint width
,gint height
,gint degree
,gboolean exclude
,GwyOrientation orientation
);
Independently levels profiles on each row/column in a data field.
Lines that have no intersection with area selected by ulcol
, ulrow
, brcol
, brrow
are always leveled as a whole.
Lines that have intersection with selected area, are leveled using polynomial coefficients computed only from data
inside (or outside for exclude
= TRUE
) the area.
data_field |
A data field. |
|
col |
Upper-left column coordinate. |
|
row |
Upper-left row coordinate. |
|
width |
Area width (number of columns). |
|
height |
Area height (number of rows). |
|
degree |
Fitted polynomial degree. |
|
exclude |
If |
|
orientation |
Line orientation. |
gdouble * gwy_data_field_fit_polynom (GwyDataField *data_field
,gint col_degree
,gint row_degree
,gdouble *coeffs
);
Fits a two-dimensional polynomial to a data field.
data_field |
A data field. |
|
col_degree |
Degree of polynomial to fit column-wise (x-coordinate). |
|
row_degree |
Degree of polynomial to fit row-wise (y-coordinate). |
|
coeffs |
An array of size ( |
Either coeffs
if it was not NULL
, or a newly allocated array
with coefficients.
gdouble * gwy_data_field_area_fit_polynom (GwyDataField *data_field
,gint col
,gint row
,gint width
,gint height
,gint col_degree
,gint row_degree
,gdouble *coeffs
);
Fits a two-dimensional polynomial to a rectangular part of a data field.
The coefficients are stored by row into coeffs
, like data in a datafield. Row index is y-degree, column index is
x-degree.
Note naive x^n y^m polynomial fitting is numerically unstable, therefore this method works only up to col_degree
= row_degree
= 6.
data_field |
A data field. |
|
col |
Upper-left column coordinate. |
|
row |
Upper-left row coordinate. |
|
width |
Area width (number of columns). |
|
height |
Area height (number of rows). |
|
col_degree |
Degree of polynomial to fit column-wise (x-coordinate). |
|
row_degree |
Degree of polynomial to fit row-wise (y-coordinate). |
|
coeffs |
An array of size ( |
Either coeffs
if it was not NULL
, or a newly allocated array with coefficients.
void gwy_data_field_subtract_polynom (GwyDataField *data_field
,gint col_degree
,gint row_degree
,const gdouble *coeffs
);
Subtracts a two-dimensional polynomial from a data field.
data_field |
A data field. |
|
col_degree |
Degree of polynomial to subtract column-wise (x-coordinate). |
|
row_degree |
Degree of polynomial to subtract row-wise (y-coordinate). |
|
coeffs |
An array of size ( |
void gwy_data_field_area_subtract_polynom (GwyDataField *data_field
,gint col
,gint row
,gint width
,gint height
,gint col_degree
,gint row_degree
,const gdouble *coeffs
);
Subtracts a two-dimensional polynomial from a rectangular part of a data field.
data_field |
A data field. |
|
col |
Upper-left column coordinate. |
|
row |
Upper-left row coordinate. |
|
width |
Area width (number of columns). |
|
height |
Area height (number of rows). |
|
col_degree |
Degree of polynomial to subtract column-wise (x-coordinate). |
|
row_degree |
Degree of polynomial to subtract row-wise (y-coordinate). |
|
coeffs |
An array of size ( |
gdouble * gwy_data_field_fit_legendre (GwyDataField *data_field
,gint col_degree
,gint row_degree
,gdouble *coeffs
);
Fits two-dimensional Legendre polynomial to a data field.
See gwy_data_field_area_fit_legendre()
for details.
data_field |
A data field. |
|
col_degree |
Degree of polynomial to fit column-wise (x-coordinate). |
|
row_degree |
Degree of polynomial to fit row-wise (y-coordinate). |
|
coeffs |
An array of size ( |
Either coeffs
if it was not NULL
, or a newly allocated array with coefficients.
gdouble * gwy_data_field_area_fit_legendre (GwyDataField *data_field
,gint col
,gint row
,gint width
,gint height
,gint col_degree
,gint row_degree
,gdouble *coeffs
);
Fits two-dimensional Legendre polynomial to a rectangular part of a data field.
The col_degree
and row_degree
parameters limit the maximum powers of x and y exactly as if simple powers were
fitted, therefore if you do not intend to interpret contents of coeffs
youself, the only difference is that this
method is much more numerically stable.
The coefficients are organized exactly like in gwy_data_field_area_fit_polynom()
, but they are not coefficients of
x^n y^m, instead they are coefficients of P_n(x) P_m(x), where P are Legendre polynomials. The polynomials are
evaluated in coordinates where first row (column) corresponds to -1.0, and the last row (column) to 1.0.
Note the polynomials are normal Legendre polynomials that are not exactly orthogonal on a discrete point set (if their degrees are equal mod 2).
data_field |
A data field. |
|
col |
Upper-left column coordinate. |
|
row |
Upper-left row coordinate. |
|
width |
Area width (number of columns). |
|
height |
Area height (number of rows). |
|
col_degree |
Degree of polynomial to fit column-wise (x-coordinate). |
|
row_degree |
Degree of polynomial to fit row-wise (y-coordinate). |
|
coeffs |
An array of size ( |
Either coeffs
if it was not NULL
, or a newly allocated array with coefficients.
void gwy_data_field_subtract_legendre (GwyDataField *data_field
,gint col_degree
,gint row_degree
,const gdouble *coeffs
);
Subtracts a two-dimensional Legendre polynomial fit from a data field.
data_field |
A data field. |
|
col_degree |
Degree of polynomial to subtract column-wise (x-coordinate). |
|
row_degree |
Degree of polynomial to subtract row-wise (y-coordinate). |
|
coeffs |
An array of size ( |
void gwy_data_field_area_subtract_legendre (GwyDataField *data_field
,gint col
,gint row
,gint width
,gint height
,gint col_degree
,gint row_degree
,const gdouble *coeffs
);
Subtracts a two-dimensional Legendre polynomial fit from a rectangular part of a data field.
Due to the transform of coordinates to [-1,1] x [-1,1], this method can be used on an area of dimensions different than the area the coefficients were calculated for.
data_field |
A data field. |
|
col |
Upper-left column coordinate. |
|
row |
Upper-left row coordinate. |
|
width |
Area width (number of columns). |
|
height |
Area height (number of rows). |
|
col_degree |
Degree of polynomial to subtract column-wise (x-coordinate). |
|
row_degree |
Degree of polynomial to subtract row-wise (y-coordinate). |
|
coeffs |
An array of size ( |
gdouble * gwy_data_field_fit_poly_max (GwyDataField *data_field
,gint max_degree
,gdouble *coeffs
);
Fits two-dimensional polynomial with limited total degree to a data field.
See gwy_data_field_area_fit_poly_max()
for details.
data_field |
A data field. |
|
max_degree |
Maximum total polynomial degree, that is the maximum of m+n in x^n y^m terms. |
|
coeffs |
An array of size ( |
Either coeffs
if it was not NULL
, or a newly allocated array with coefficients.
gdouble * gwy_data_field_area_fit_poly_max (GwyDataField *data_field
,gint col
,gint row
,gint width
,gint height
,gint max_degree
,gdouble *coeffs
);
Fits two-dimensional polynomial with limited total degree to a rectangular part of a data field.
See gwy_data_field_area_fit_legendre()
for description. This function differs by limiting the total maximum
degree, while gwy_data_field_area_fit_legendre()
limits the maximum degrees in horizontal and vertical directions
independently.
data_field |
A data field. |
|
col |
Upper-left column coordinate. |
|
row |
Upper-left row coordinate. |
|
width |
Area width (number of columns). |
|
height |
Area height (number of rows). |
|
max_degree |
Maximum total polynomial degree, that is the maximum of m+n in x^n y^m terms. |
|
coeffs |
An array of size ( |
Either coeffs
if it was not NULL
, or a newly allocated array with coefficients.
void gwy_data_field_subtract_poly_max (GwyDataField *data_field
,gint max_degree
,const gdouble *coeffs
);
Subtracts a two-dimensional polynomial with limited total degree from a data field.
data_field |
A data field. |
|
max_degree |
Maximum total polynomial degree, that is the maximum of m+n in x^n y^m terms. |
|
coeffs |
An array of size ( |
void gwy_data_field_area_subtract_poly_max (GwyDataField *data_field
,gint col
,gint row
,gint width
,gint height
,gint max_degree
,const gdouble *coeffs
);
Subtracts a two-dimensional polynomial with limited total degree from a rectangular part of a data field.
Due to the transform of coordinates to [-1,1] x [-1,1], this method can be used on an area of dimensions different than the area the coefficients were calculated for.
data_field |
A data field. |
|
col |
Upper-left column coordinate. |
|
row |
Upper-left row coordinate. |
|
width |
Area width (number of columns). |
|
height |
Area height (number of rows). |
|
max_degree |
Maximum total polynomial degree, that is the maximum of m+n in x^n y^m terms. |
|
coeffs |
An array of size ( |
gdouble * gwy_data_field_fit_poly (GwyDataField *data_field
,GwyDataField *mask_field
,gint nterms
,const gint *term_powers
,gboolean exclude
,gdouble *coeffs
);
Fit a given set of polynomial terms to a data field.
data_field |
A data field. |
|
mask_field |
Mask of values to take values into account, or |
|
nterms |
The number of polynomial terms to take into account (half the number of items in |
|
term_powers |
Array of size 2* |
|
exclude |
Interpret values |
|
coeffs |
Array of size |
Either coeffs
if it was not NULL
, or a newly allocated array with coefficients.
Since: 2.11
gdouble * gwy_data_field_area_fit_poly (GwyDataField *data_field
,GwyDataField *mask_field
,gint col
,gint row
,gint width
,gint height
,gint nterms
,const gint *term_powers
,gboolean exclude
,gdouble *coeffs
);
Fit a given set of polynomial terms to a rectangular part of a data field.
The polynomial coefficients correspond to normalized coordinates that are always from the interval [-1,1] where -1 corresponds to the left/topmost pixel and 1 corresponds to the bottom/rightmost pixel of the area.
data_field |
A data field. |
|
mask_field |
Mask of values to take values into account, or |
|
col |
Upper-left column coordinate. |
|
row |
Upper-left row coordinate. |
|
width |
Area width (number of columns). |
|
height |
Area height (number of rows). |
|
nterms |
The number of polynomial terms to take into account (half the number of items in |
|
term_powers |
Array of size 2* |
|
exclude |
Interpret values |
|
coeffs |
Array of size |
Either coeffs
if it was not NULL
, or a newly allocated array with coefficients.
Since: 2.11
void gwy_data_field_subtract_poly (GwyDataField *data_field
,gint nterms
,const gint *term_powers
,const gdouble *coeffs
);
Subtract a given set of polynomial terms from a data field.
data_field |
A data field. |
|
nterms |
The number of polynomial terms to take into account (half the number of items in |
|
term_powers |
Array of size 2* |
|
coeffs |
Array of size |
Since: 2.11
void gwy_data_field_area_subtract_poly (GwyDataField *data_field
,gint col
,gint row
,gint width
,gint height
,gint nterms
,const gint *term_powers
,const gdouble *coeffs
);
Subtract a given set of polynomial terms from a rectangular part of a data field.
data_field |
A data field. |
|
col |
Upper-left column coordinate. |
|
row |
Upper-left row coordinate. |
|
width |
Area width (number of columns). |
|
height |
Area height (number of rows). |
|
nterms |
The number of polynomial terms to take into account (half the number of items in |
|
term_powers |
Array of size 2* |
|
coeffs |
Array of size |
Since: 2.11
GwyDataField ** gwy_data_field_area_fit_local_planes (GwyDataField *data_field
,gint size
,gint col
,gint row
,gint width
,gint height
,gint nresults
,const GwyPlaneFitQuantity *types
,GwyDataField **results
);
Fits a plane through neighbourhood of each sample in a rectangular part of a data field.
The sample is always in the origin of its local (x,y) coordinate system, even if the neighbourhood is not centered
about it (e.g. because sample is on the edge of data field). Z-coordinate is however not centered, that is
GWY_PLANE_FIT_A
is normal mean value.
data_field |
A data field. |
|
size |
Neighbourhood size (must be at least 2). It is centered around
each pixel, unless |
|
col |
Upper-left column coordinate. |
|
row |
Upper-left row coordinate. |
|
width |
Area width (number of columns). |
|
height |
Area height (number of rows). |
|
nresults |
The number of requested quantities. |
|
types |
The types of requested quantities. |
|
results |
An array to store quantities to, may be |
An array of data fields with requested quantities, that is results
unless it was NULL
and a new array
was allocated.
GwyDataField * gwy_data_field_area_local_plane_quantity (GwyDataField *data_field
,gint size
,gint col
,gint row
,gint width
,gint height
,GwyPlaneFitQuantity type
,GwyDataField *result
);
Convenience function to get just one quantity from gwy_data_field_area_fit_local_planes()
.
data_field |
A data field. |
|
size |
Neighbourhood size. |
|
col |
Upper-left column coordinate. |
|
row |
Upper-left row coordinate. |
|
width |
Area width (number of columns). |
|
height |
Area height (number of rows). |
|
type |
The type of requested quantity. |
|
result |
A data field to store result to, or |
result
if it isn't NULL
, otherwise a newly allocated data field.
GwyDataField ** gwy_data_field_fit_local_planes (GwyDataField *data_field
,gint size
,gint nresults
,const GwyPlaneFitQuantity *types
,GwyDataField **results
);
Fits a plane through neighbourhood of each sample in a data field.
See gwy_data_field_area_fit_local_planes()
for details.
data_field |
A data field. |
|
size |
Neighbourhood size. |
|
nresults |
The number of requested quantities. |
|
types |
The types of requested quantities. |
|
results |
An array to store quantities to. |
An array of data fields with requested quantities.
GwyDataField * gwy_data_field_local_plane_quantity (GwyDataField *data_field
,gint size
,GwyPlaneFitQuantity type
,GwyDataField *result
);
Convenience function to get just one quantity from gwy_data_field_fit_local_planes()
.
data_field |
A data field. |
|
size |
Neighbourhood size. |
|
type |
The type of requested quantity. |
|
result |
A data field to store result to, or |
result
if it isn't NULL
, otherwise a newly allocated data field.