Estimate displacement field that aligns two 2-D or 3-D images
estimates the displacement field
D that aligns the image to be
moving, with the reference image,
fixed. The displacement vectors at each pixel location map locations
fixed image grid to a corresponding location in the
moving_reg is a warped version of
moving image that is warped according to the displacement field
D and resampled using linear interpolation.
You optionally can estimate the displacement field
This example shows how to solve a registration problem in which the same hand has been photographed in two different poses. The misalignment of the images varies locally throughout each image. This is therefore a non-rigid registration problem.
Read the two images into the workspace.
fixed = imread('hands1.jpg'); moving = imread('hands2.jpg');
Convert the images to grayscale for processing.
fixed = rgb2gray(fixed); moving = rgb2gray(moving);
Observe the initial misalignment. Fingers are in different poses.
Overlay the two images to make it easy to see where the images differ. The differences are highlighted in green and magenta.
Correct illumination differences between the
fixed images using histogram matching. This is a common pre-processing step.
moving = imhistmatch(moving,fixed);
Estimate the transformation needed to bring the two images into alignment.
[~,movingReg] = imregdemons(moving,fixed,[500 400 200],... 'AccumulatedFieldSmoothing',1.3);
Display the results of the registration. In the first figure, the images are overlaid to show the alignment.
moving— Image to be registered
Image to be registered, specified as a 2-D or 3-D grayscale image.
fixed— Reference image in the target orientation
Reference image in the target orientation, specified as a 2-D or 3-D grayscale image.
N— Number of iterations
100(default) | positive integer scalar or vector
Number of iterations, specified as a positive integer scalar or vector.
When you specify a vector,
N is the number of iterations per pyramid
level (resolution level). For example, if there are 3 pyramid levels, then you can
specify the vector
performs 100 iterations at the lowest resolution level, 50 iterations at the next
pyramid level, and 25 iterations at the last iteration level — the level with
full resolution. Because it takes less time to process the lower resolution levels,
running more iterations at low resolution and fewer iterations at the higher resolutions
of the pyramid can help performance.
comma-separated pairs of
the argument name and
Value is the corresponding value.
Name must appear inside quotes. You can specify several name and value
pair arguments in any order as
[D,movingReg] = imregdemons(moving,fixed,[500 400 200],'AccumulatedFieldSmoothing',1.5);
'AccumulatedFieldSmoothing'— Smoothing applied at each iteration
1.0(default) | positive scalar
Smoothing applied at each iteration, specified as the comma-separated
pair consisting of
a numeric value. This parameter controls the amount of diffusion-like
imregdemons applies the standard
deviation of the Gaussian smoothing to regularize the accumulated
field at each iteration. Larger values result in smoother output displacement
fields. Smaller values result in more localized deformation in the
output displacement field. Values typically are in the range [0.5,
3.0]. When you specify multiple
the standard deviation used in the Gaussian smoothing remains the
same at each pyramid level.
'PyramidLevels'— Number of multi-resolution image pyramid levels to use
3(default) | positive integer
Number of multi-resolution image pyramid levels to use, specified as the comma-separated pair
'PyramidLevels' and a positive integer.
'DisplayWaitbar'— Display waitbar to indicate progress
Display waitbar to indicate progress, specified as the comma-separated
pair consisting of
'DisplayWaitbar' and the value
When set to
a waitbar to indicate progress for long-running operations. To prevent
displaying a waitbar, set
D— Displacement field
Displacement field, specified as a numeric array. Displacement values are in units of pixels.
fixed is a 2-D
grayscale image of size
the displacement field array is
D(:,:,1) contains displacements
along the x-axis and
D(:,:,2) contains displacements
along the y-axis.
fixed is a 3-D
grayscale image of size
then the displacement field array is
displacements along the x-axis,
displacements along the y-axis.
displacements along the
moving_reg— Aligned image
Registered image, returned as a 2-D or 3-D grayscale image. The image is warped according to
the displacement field
D and resampled using linear
 Thirion, J.-P. "Image matching as a diffusion process: an analogy with Maxwell’s demons". Medical Image Analysis. Vol. 2, Number 3, 1998, pp. 243–260.
 Vercauteren, T., X. Pennec, A. Perchant, N. Ayache, "Diffeomorphic Demons: Efficient Non-parametric Image Registration", NeuroImage. Vol. 45, Number 1, Supplement 1, March 2009, pp. 61–72.
Usage notes and limitations:
'DisplayWaitbar' is not supported on the
For more information, see Image Processing on a GPU.