import type { Image } from '../../Image.js';
import type { Point } from '../../geometry/index.js';
export interface GetAffineTransformOptions {
    /**
     * @default `31`
     */
    centroidPatchDiameter?: number;
    /**
     * @default `10`
     */
    bestKeypointRadius?: number;
    /**
     * Should only the crossckeck matches be considered.
     * @default `true`
     */
    crosscheck?: boolean;
    /**
     * Should the contrast of the images be enhanced before feature matching.
     * @default `true`
     */
    enhanceContrast?: boolean;
    /**
     * Origin of the destination image relative to the top-left corner of the source image.
     * Roughly indicates the position of the destination image in the source image. Is used
     * to filter matches by distance as well as to define a subarea of the source image to
     * use for contrast enhancement.
     * @default `{ column: 0, row: 0 }`
     */
    destinationOrigin?: Point;
    /**
     * Max number of iterations of the ransac algorithm.
     */
    maxRansacNbIterations?: number;
    /**
     * Save images with matches for debugging.
     * @default `false`
     */
    debug?: boolean;
    /**
     * Path of the debug image.
     * @default `${import.meta.dirname}/montage.png`
     */
    debugImagePath?: string;
}
export interface AffineTransform {
    /**
     * Translation of source points along x and y axes.
     */
    translation: Point;
    /**
     * Clockwise angle in degrees.
     */
    rotation: number;
    /**
     * Scaling factor from source to destination.
     */
    scale: number;
}
export interface GetAffineTransformResult {
    /**
     * Affine transformation from source to destination.
     */
    transform: AffineTransform;
    stats: {
        /**
         * Number of matches of feature matching between source and destination.
         * The bigger this number is, the better.
         */
        nbMatches: number;
        /**
         * Number of inliers resulting from the ransac algorithm.
         */
        nbInliers: number;
        /**
         * Number of iterations of the RANSAC algorithm.
         */
        nbRansacIterations: number;
        /**
         * Number of source keypoints used for matching.
         */
        nbSourceKeypoints: number;
        /**
         * Number of destination keypoints used for matching.
         */
        nbDestinationKeypoints: number;
    };
}
/**
 * Get the affine transformation from the source to the destination image.
 * @param source - Source image. Should be the image to align on the reference image.
 * It can have an additional margin, specified in the options.
 * @param destination - Destination image. Should be the reference image.
 * @param options - Get destination translation options.
 * @returns The affine transformation from source to destination image.
 */
export declare function getAffineTransform(source: Image, destination: Image, options?: GetAffineTransformOptions): GetAffineTransformResult;
//# sourceMappingURL=getAffineTransform.d.ts.map