## correct

correct — Data correction

## Synopsis

    #include <libprocess/gwyprocess.h>

    void                (*GwyCoordTransform2DFunc)          (gdouble x,
                                                             gdouble y,
                                                             gdouble *px,
                                                             gdouble *py,
                                                             gpointer user_data);
    void                gwy_data_field_correct_laplace_iteration
                                                            (GwyDataField *data_field,
                                                             GwyDataField *mask_field,
                                                             GwyDataField *buffer_field,
                                                             gdouble corrfactor,
                                                             gdouble *error);
    void                gwy_data_field_correct_average      (GwyDataField *data_field,
                                                             GwyDataField *mask_field);
    void                gwy_data_field_mask_outliers        (GwyDataField *data_field,
                                                             GwyDataField *mask_field,
                                                             gdouble thresh);
    void                gwy_data_field_distort              (GwyDataField *source,
                                                             GwyDataField *dest,
                                                             GwyCoordTransform2DFunc invtrans,
                                                             gpointer user_data,
                                                             GwyInterpolationType interp,
                                                             GwyExteriorType exterior,
                                                             gdouble fill_value);
    GwyPlaneSymmetry    gwy_data_field_unrotate_find_corrections
                                                            (GwyDataLine *derdist,
                                                             gdouble *correction);

## Description

## Details

### GwyCoordTransform2DFunc ()

    void                (*GwyCoordTransform2DFunc)          (gdouble x,
                                                             gdouble y,
                                                             gdouble *px,
                                                             gdouble *py,
                                                             gpointer user_data);

The type of two-dimensional coordinate transform function.

`x` : | Old x coordinate.
`y` : | Old y coordinate.
`px` : | Location to store new x coordinate.
`py` : | Location to store new y coordinate.
`user_data` : | User data passed to the caller function.

Since 2.5

### gwy_data_field_correct_laplace_iteration ()

    void                gwy_data_field_correct_laplace_iteration
                                                            (GwyDataField *data_field,
                                                             GwyDataField *mask_field,
                                                             GwyDataField *buffer_field,
                                                             gdouble corrfactor,
                                                             gdouble *error);

Performs one interation of Laplace data correction.

Tries to remove all the points in mask off the data by using iterative method similar to solving heat flux equation.

Use this function repeatedly until reasonable `error` is reached.

`data_field` : | Data field to be corrected.
`mask_field` : | Mask of places to be corrected.
`buffer_field` : | Initialized to same size as mask and data.
`corrfactor` : | Correction factor within step.
`error` : | Maximum change within last step.

### gwy_data_field_correct_average ()

    void                gwy_data_field_correct_average      (GwyDataField *data_field,
                                                             GwyDataField *mask_field);

Fills data under mask with average value.

Simply puts average value of all the `data_field` values into points in `data_field` lying under points where `mask_field` values are nonzero.

`data_field` : | A data field.
`mask_field` : | Mask of places to be corrected.

### gwy_data_field_mask_outliers ()

    void                gwy_data_field_mask_outliers        (GwyDataField *data_field,
                                                             GwyDataField *mask_field,
                                                             gdouble thresh);

Creates mask of data that are above or below `thresh`*sigma from average height.

Sigma denotes root-mean square deviation of heights. This criterium corresponds to usual Gaussian distribution outliers detection for `thresh` = 3.

`data_field` : | A data field.
`mask_field` : | A data field to be filled with mask.
`thresh` : | Threshold value.

### gwy_data_field_distort ()

    void                gwy_data_field_distort              (GwyDataField *source,
                                                             GwyDataField *dest,
                                                             GwyCoordTransform2DFunc invtrans,
                                                             gpointer user_data,
                                                             GwyInterpolationType interp,
                                                             GwyExteriorType exterior,
                                                             gdouble fill_value);

Distorts a data field in the horizontal plane.

Note the transform function `invtrans` is the inverse transform, in other words it calculates the old coordinates from tne new coordinates (the transform would not be uniquely defined the other way round).

`source` : | Source data field.
`dest` : | Destination data field.

`invtrans` :

Inverse transform function, that is the transformation from new coordinates to old coordinates. It gets (`j`+0.5, `i`+0.5), where `i` and `j` are the new row and column indices, passed as the input coordinates. The output coordinates should follow the same convention. Unless a special exterior handling is requires, the transform function does not need to concern itself with coordinates being outside of the data.

`user_data` : | Pointer passed as `user_data` to `invtrans`.
`interp` : | Interpolation type to use.
`exterior` : | Exterior pixels handling.
`fill_value` : | The value to use with `GWY_EXTERIOR_FIXED_VALUE`.

Since 2.5

### gwy_data_field_unrotate_find_corrections ()

    GwyPlaneSymmetry    gwy_data_field_unrotate_find_corrections
                                                            (GwyDataLine *derdist,
                                                             gdouble *correction);

Finds rotation corrections.

Rotation correction is computed for for all symmetry types. In addition an estimate is made about the prevalent one.

`derdist` : | Angular derivation distribution (normally obrained from `gwy_data_field_slope_distribution()`).
`correction` : | Corrections for particular symmetry types will be stored here (indexed by GwyPlaneSymmetry). `correction`[0] contains the most probable correction. All angles are in radians.
Returns : | The estimate type of prevalent symmetry.