RSGISLib Image Registration
The image registration module contains algorithms for matching images together, either to find a whole image shift or for generating tie points matching two image which can then be used to warp the input image.
There are two tie point generation algorithms are available for registration: basic, and singlelayer. The single layer algorithm is a simplified version of the algorithm proposed in:
Bunting, P.J., Labrosse, F. & Lucas, R.M., 2010. A multi-resolution area-based technique for automatic multi-modal image registration. Image and Vision Computing, 28(8), pp.1203-1219.
Image distance metrics:
METRIC_EUCLIDEAN = 1
METRIC_SQDIFF = 2
METRIC_MANHATTEN = 3
METRIC_CORELATION = 4
GCP Output Types:
TYPE_ENVI_IMG2IMG = 1
TYPE_ENVI_IMG2MAP = 2
TYPE_RSGIS_IMG2MAP = 3
TYPE_RSGIS_MAPOFFS = 4
Whole Image Shift
- rsgislib.imageregistration.find_image_offset(in_ref_img: str, in_float_img: str, ref_img_bands: list, flt_img_bands: list, metric_type: int, x_search: int, y_search: int, sub_pxl_res: int)
Calculate and X/Y offset between the input reference and float images. This function will calculate the similarity intersecting regions of the two images and identified an X/Y where the similarity is greatest.
- Parameters:
in_ref_img – is a string providing reference image which to which the floating image is to be registered.n:param in_float_img: is a string providing the floating image to be registered to the reference image
ref_img_bands – is a list of image bands which are to be used to calculate the image similarity from the reference image.
flt_img_bands – is a list of image bands which are to be used to calculate the image similarity from the floating image.
metric_type – is an the similarity metric used to compare images of type rsgislib.imageregistration.METRIC_*
x_search – is the number of pixels in the x-axis the image can be moved either side of the centre.
y_search – is the number of pixels in the y-axis the image can be moved either side of the centre.
sub_pxl_res – is an optional (if not specified then no sub-pixel component will be estimated) int specifying the sub-pixel resolution to which the pixel shifts are estimated. Note that the values are positive integers such that a value of 2 will result in a sub pixel resolution of 0.5 of a pixel and a value 4 will be 0.25 of a pixel.
- Returns:
(x_offset, y_offset)
- rsgislib.imageregistration.apply_offset_to_image(input_img: str, output_img: str, gdalformat: str, datatype: int, x_offset: float, y_offset: float)
Apply a linear X,Y offset to the image header - does not change the pixel values.
- Parameters:
input_img – is a string providing the input image.
output_img – is a string providing the output image.
gdalformat – is a string providing the output format (e.g., KEA).
datatype – is a rsgislib.TYPE_* value providing the output data type.
x_offset – is a float specifying the X offset to be applied to the image.
y_offset – is a float specifying the Y offset to be applied to the image.
from rsgislib import imageregistration inputImage = './Rasters/injune_p142_casi_sub_utm_single_band_offset3x3y.vrt' outputImage = './TestOutputs/injune_p142_casi_sub_utm_single_band_offset3x3y_fixed.kea' gdalformat = 'KEA' datatype = rsgislib.TYPE_32INT imageregistration.apply_offset_to_image(inputImage, outputImage, gdalformat, datatype, -3.0, -3.0)
Tie Point Generation
- rsgislib.imageregistration.basic_registration(in_ref_img: str, in_float_img: str, out_gcp_file: str, pixel_gap: int, threshold: float, win_size: int, search_area: int, sd_ref_thres: float, sd_flt_thres: float, sub_pxl_res: float, metric_type: int, output_type: int)
Generate tie points between floating and reference image using basic algorithm.
- Parameters:
in_ref_img – is a string providing reference image which to which the floating image is to be registered.n:param in_float_img: is a string providing the floating image to be registered to the reference image
out_gcp_file – is a string giving specifying the output file, containing the generated tie points
pixel_gap – is an int specifying the gap, in image pixels, between the initial tie points (this is for both the x and y axis)
threshold – is a float providing the threshold for the image metric above/below (depending on image metric) which matching is consider insufficient to be reliable and therefore the match will be ignored.
win_size – is an int providing the size of the window around each tie point which will be used for the matching
search_area – is an int providing the distance (in pixels) from the tie point start point which will be searched.
sd_ref_thres – is a float which defines the standard deviation for the window around each tie point below which it is deemed there is insufficient information to perform a match
sd_flt_thres – is a float which defines the standard deviation for the window around each tie point below which it is deemed there is insufficient information to perform a match. Note, that the tie point window has to be below the threshold for both the reference and floating image to be ignored
sub_pxl_res – is an int specifying the sub-pixel resolution to which the pixel shifts are estimated. Note that the values are positive integers such that a value of 2 will result in a sub pixel resolution of 0.5 of a pixel and a value 4 will be 0.25 of a pixel.
metric_type – is an the similarity metric used to compare images of type rsgislib.imageregistration.METRIC_*
output_type – is an the format of the output file of type rsgislib.imageregistration.TYPE_*
reference = 'ref.kea' floating = 'float.kea' pixelGap = 50 threshold = 0.4 window = 100 search = 5 stddevRef = 2 stddevFloat = 2 subpixelresolution = 4 metric = imageregistration.METRIC_CORELATION outputType = imageregistration.TYPE_RSGIS_IMG2MAP output = './TestOutputs/injune_p142_casi_sub_utm_tie_points.txt' imageregistration.basic_registration(reference, floating, pixelGap, threshold, window, search, stddevRef, stddevFloat, subpixelresolution, metric, outputType, output)
- rsgislib.imageregistration.single_layer_registration(in_ref_img: str, in_float_img: str, out_gcp_file: str, pixel_gap: int, threshold: float, win_size: int, search_area: int, sd_ref_thres: float, sd_flt_thres: float, sub_pxl_res: float, dist_threshold: float, max_n_iters: int, move_chng_thres: float, p_smooth: float, metric_type: int, output_type: int)
Generate tie points between floating and reference image using a single connected layer of tie points.
- Parameters:
in_ref_img – is a string providing reference image which to which the floating image is to be registered.n:param in_float_img: is a string providing the floating image to be registered to the reference image
out_gcp_file – is a string giving specifying the output file, containing the generated tie points
pixel_gap – is an int specifying the gap, in image pixels, between the initial tie points (this is for both the x and y axis) which matching is consider insufficient to be reliable and therefore the match will be ignored.
threshold – is a float providing the threshold for the image metric above/below (depending on image metric) which matching is consider insufficient to be reliable and therefore the match will be ignored.
win_size – is an int providing the size of the window around each tie point which will be used for the matching
search_area – is an int providing the distance (in pixels) from the tie point start point which will be searched.
sd_ref_thres – is a float which defines the standard deviation for the window around each tie point below which it is deemed there is insufficient information to perform a match
sd_flt_thres – is a float which defines the standard deviation for the window around each tie point below which it is deemed there is insufficient information to perform a match. Note, that the tie point window has to be below the threshold for both the reference and floating image to be ignored
sub_pxl_res – is an int specifying the sub-pixel resolution to which the pixel shifts are estimated. Note that the values are positive integers such that a value of 2 will result in a sub pixel resolution of 0.5 of a pixel and a value 4 will be 0.25 of a pixel.
dist_threshold – is an int giving the distance (in pixels) to be connected within the layer.
max_n_iters – is an int giving the maximum number of iterations of the tie point grid to find an optimal set of tie points
move_chng_thres – is a float providing the threshold for the average amount of tie point movement for the optimisation to be terminated
p_smooth – is a float providing the ‘p’ parameter for the inverse weighted distance calculation. A value of 2 should be used by default
metric_type – is an the similarity metric used to compare images of type rsgislib.imageregistration.METRIC_*
output_type – is an the format of the output file of type rsgislib.imageregistration.TYPE_*
from rsgislib import imageregistration reference = 'ref.kea' floating = 'float.kea' pixelGap = 50 threshold = 0.4 window = 100 search = 5 stddevRef = 2 stddevFloat = 2 subpixelresolution = 4 metric = imageregistration.METRIC_CORELATION outputType = imageregistration.TYPE_RSGIS_IMG2MAP output = './TestOutputs/injune_p142_casi_sub_utm_tie_points.txt' imageregistration.single_layer_registration(reference, floating, pixelGap, threshold, window, search, stddevRef, stddevFloat, subpixelresolution, metric, outputType, output)
Warping
- rsgislib.imageregistration.warp_with_gcps_with_gdal(in_ref_img: str, in_process_img: str, output_img: str, gdalformat: str, interp_method: int = 0, use_tps: bool = False, use_poly: bool = True, poly_order: int = 3, use_multi_thread: bool = False)
A utility function to warp an image file (in_process_img) using GCPs defined within the image header - this is the same as using the gdalwarp utility. However, the output image will have the same pixel grid and dimensions as the input reference image (in_ref_img).
- Parameters:
in_ref_img – is the input reference image to which the processing image is to resampled to.
in_process_img – is the image which is to be resampled.
output_img – is the output image file.
gdalformat – is the gdal format for the output image.
interp_method – is the interpolation method used to resample the image [bilinear, lanczos, cubicspline, nearestneighbour, cubic, average, mode]
use_tps – is a boolean specifying that the thin plated splines method of warping should be used (i.e., rubbersheet); Default False.
use_poly – is a boolean specifying that a polynomial method of warping is used; Default True
poly_order – is the order of the polynomial used to represent the transformation (1, 2 or 3). Only used if use_poly=True
use_multi_thread – is a boolean specifying whether multiple processing cores should be used for the warping.
Other
- rsgislib.imageregistration.gcp_to_gdal(input_img: str, in_gcp_file: str, output_img: str, gdalformat: str, datatype: int)
Adds tie points to GDAL file, suitable for warping using the gdalwarp command.
- Parameters:
input_img – is a string providing the input image.
in_gcp_file – is a string providing the input text file containing the tie points.
output_img – is a string providing the output image.
gdalformat – is a string providing the output format (e.g., KEA).
datatype – is a rsgislib.TYPE_* value providing the output data type.
from rsgislib import imageregistration inputImage = './Rasters/injune_p142_casi_sub_utm_single_band_offset3x3y.vrt' inputGCPs = './TestOutputs/injune_p142_casi_sub_utm_tie_points_basic.txt' outputImage = './TestOutputs/injune_p142_casi_sub_utm_single_band_offset3x3y_gcps.kea' gdalformat = 'KEA' datatype = rsgislib.TYPE_32INT imageregistration.gcp_to_gdal(inputImage,inputGCPs, outputImage, gdalformat, gdaltype)
- rsgislib.imageregistration.add_vec_pts_as_gcps_to_img(input_img: str, output_img: str, vec_file: str, vec_lyr: str = None, gcp_x_col: str = 'x_match', gcp_y_col: str = 'y_match', gcp_z_col: str = None, gcp_epsg: int = None)
A function which uses a points vector layer to specify GCP locations within the image with attributes to the vector layer used to specify the GCP spatial location.
Note. input_img and output_img can be the same file path if you do not want an new output image to be created (i.e., for the input file to be edited)
- Parameters:
input_img – The input image file path
output_img – The output image path
vec_file – the vector file path
vec_lyr – the vector layer name
gcp_x_col – column within the vector layer specifying the GCP x coordinates
gcp_y_col – column within the vector layer specifying the GCP y coordinates
gcp_z_col – column within the vector layer specifying the GCP x coordinates. The Z coordinate is optional, Default is None.
gcp_epsg – Optionally specify an EPSG code for the projection the GCP points. If None (Default) then the projection of the input image will used.