This document is archived and information here might be outdated.  Recommended version.


How to perform automatic image-to-image matching (ArcObjects .NET 10.8 SDK)
ArcObjects Help for .NET developers > ArcObjects Help for .NET developers > Developing with ArcGIS > Learning ArcObjects > Managing data > Working with image and raster data > How to perform automatic image-to-image matching

How to perform automatic image-to-image matching


Summary
ArcGIS 10.1 supports automatic image-to-image matching. This topic shows how to automatically georeference an image to an image of a known coordinate system using the ImageRegistration and RasterGeometryProc classes.

Performing automatic image-to-image matching

The basic steps for performing automatic image-to-image matching are as follows:
  1. Compute the match points of the two images (assuming the two images have overlaps) using the ImageRegistration class.
  2. Extract source and target control points from the matching points for use in the RasterGeometryProc class.
See the following code example:
[C#]
void ImageMatchingExample(IRaster ras, IRaster ras_ref)
{
    // Create the ImageRegistration object and compute the image matching points.
    IImageRegistration imageRegistration=new ImageRegistrationClass();
    IImageMatchPoints matchPoints=imageRegistration.ExtractMatchPoints(ras,
        ras_ref);

    // Extract the collection of matching points as source and target points.
    IPointCollection sourcePoints=new MultipointClass();
    IPointCollection targetPoints=new MultipointClass();
    for (int i=0; i < matchPoints.Count; i++)
    {
        IImageMatchPoint matchPoint=matchPoints.get_Element(i);
        IImageFeaturePoint imageFromPoint=matchPoint.From;
        IImageFeaturePoint imageToPoint=matchPoint.To;
        sourcePoints.AddPoint(imageFromPoint.Location);
        targetPoints.AddPoint(imageToPoint.Location);
    }
    IRasterGeometryProc rasProc=new RasterGeometryProcClass();
    rasProc.Warp(sourcePoints, targetPoints,
        esriGeoTransTypeEnum.esriGeoTransPolyOrder2, ras);
    rasProc.Register(ras);
}
[VB.NET]
Private Sub ImageMatchingExample(ras As IRaster, ras_ref As IRaster)
    ' Create the ImageRegistration object and compute the image matching points.
    Dim imageRegistration As IImageRegistration=New ImageRegistrationClass()
    Dim matchPoints As IImageMatchPoints=imageRegistration.ExtractMatchPoints(ras, ras_ref)
    
    ' Extract the collection of matching points as source and target points.
    Dim sourcePoints As IPointCollection=New MultipointClass()
    Dim targetPoints As IPointCollection=New MultipointClass()
    For i As Integer=0 To matchPoints.Count - 1
        Dim matchPoint As IImageMatchPoint=matchPoints.get_Element(i)
        Dim imageFromPoint As IImageFeaturePoint=matchPoint.From
        Dim imageToPoint As IImageFeaturePoint=matchPoint.[To]
        sourcePoints.AddPoint(imageFromPoint.Location)
        targetPoints.AddPoint(imageToPoint.Location)
    Next
    Dim rasProc As IRasterGeometryProc=New RasterGeometryProcClass()
    rasProc.Warp(sourcePoints, targetPoints, esriGeoTransTypeEnum.esriGeoTransPolyOrder2, ras)
    rasProc.Register(ras)
End Sub






To use the code in this topic, reference the following assemblies in your Visual Studio project. In the code files, you will need using (C#) or Imports (VB .NET) directives for the corresponding namespaces (given in parenthesis below if different from the assembly name):
Development licensing Deployment licensing
ArcGIS Desktop Standard ArcGIS Desktop Standard
ArcGIS Desktop Advanced ArcGIS Desktop Advanced