| Description |
Registration of two 2D color/grayscale images or 3D volumes both rigid and non-rigid with smooth b-spline grid. No landmarks are needed because registration is image region based, but landmarks can be added as transformation regularization.
This function can use normalized mutual information as registration error, allowing the images or volumes to be of a different type for instance a MRI T1 and T2 patient scan.
Description:
This function is an (enhanced) implementation of the b-spline registration algorithm in D. Rueckert et al. "Nonrigid Registration Using Free-Form Deformations: Application to Breast MR Images". Including the smoothness penalty of Rueckert (thin sheet of metal bending energy).
How it works:
A grid of b-spline control points is constructed which controls the transformation of an input image. An error measure is used to measure the registration error between the moving and static image. The quasi newton Matlab optimizer fminlbfgs (also on Mathworks) is used to move the control points to achieve the optimal registration between both images with minimal registration error.
Usage:
The functions register_images.m and register_volumes.m are easy to use, have some examples in the help, and will fit most applications. (If you want to write your own specialized registration code study the registration examples)
First, you need to compile mex / C code with compile_c_files.m. (2D registration also works without mex files but will be slower)
The multi-threaded mex code supports Windows, Linux (and Mac OS?)
Some Features:
- 2-D / 3-D Eulerian strain tensor images can be made from the transformations fields. For example to describe cardiac motion in the images.
- Landmarks can be used for already known corresponding points (for example from Sift). Influence of every landmark on the registration process can be adjust.
- It is possible to register a number of movie frames by using the registration grid of previous two images as initial registration grid of the next two images.
- It is possible to mask parts of the images, to decrease or increase the influence of an image structure on the registration result.
note:
- In 2D b-spline registration approximately 30% of the registration time is used for calculating the grid smoothness penalty, setting this penalty to zero saves registration time. Also setting the option max-refinement steps will save a large amount of registration time.
- B-spline registration is slow and complex in comparison with demon registration see:
http://www.mathworks.fr/matlabcentral/fileexchange/loadFile.do?objectId=21451
Please report bugs, successes and questions. |
| Other Files |
compile_c_files.m, functions/backwards2forwards.m, functions/backwards2forwards_2d_double.c, functions/backwards2forwards_2d_double.m, functions/backwards2forwards_3d_double.c, functions/backwards2forwards_3d_single.c, functions/fminlbfgs.m, functions/image_difference.m, functions/imgaussian.c, functions/imgaussian.m, functions/imresize3d.m, functions/make_grid_image.m, functions/make_init_grid.m, functions/maple_penalties_smoothing_2d.mw, functions/maple_penalties_smoothing_3d.mw, functions/mutual_histogram_double.c, functions/mutual_histogram_double.m, functions/mutual_histogram_single.c, functions/penalties_smoothness.m, functions/penalty_matrix.mat, functions/refine_grid.m, functions/showcs3.fig, functions/showcs3.m, functions/squared_difference_double.c, functions/squared_difference_double.m, functions/squared_difference_single.c, functions/strain.m, functions_affine/affine_error_3d_double.c, functions_affine/affine_error_3d_single.c, functions_affine/affine_registration_error.m, functions_affine/affine_registration_image.m, functions_affine/affine_transform.m, functions_affine/affine_transform_2d_double.c, functions_affine/affine_transform_2d_double.m, functions_affine/affine_transform_3d_double.c, functions_affine/affine_transform_3d_single.c, functions_affine/image_interpolation.c, functions_affine/image_interpolation.h, functions_affine/make_transformation_matrix.m, functions_nonrigid/bspline_error_2d_double.c, functions_nonrigid/bspline_error_3d_double.c, functions_nonrigid/bspline_error_3d_single.c, functions_nonrigid/bspline_registration_gradient.m, functions_nonrigid/bspline_registration_image.m, functions_nonrigid/bspline_transform.m, functions_nonrigid/bspline_transform_2d_double.c, functions_nonrigid/bspline_transform_2d_double.m, functions_nonrigid/bspline_transform_3d_double.c, functions_nonrigid/bspline_transform_3d_single.c, functions_nonrigid/image_interpolation.c, functions_nonrigid/image_interpolation.h, functions_nonrigid/movepixels.m, functions_nonrigid/movepixels_2d_double.c, functions_nonrigid/movepixels_2d_double.m, functions_nonrigid/movepixels_3d_double.c, functions_nonrigid/movepixels_3d_single.c, images/brain1.png, images/brain2.png, images/brain3.png, images/landmarks.mat, images/landmarks1.png, images/landmarks2.png, images/lena.jpg, images/lenag1.png, images/lenag2.png, images/lenag3.png, images/lenag4.png, license.txt, low_level_examples/addpaths.m, low_level_examples/example_2d_affine.m, low_level_examples/example_2d_nonrigid_1.m, low_level_examples/example_2d_nonrigid_2.m, low_level_examples/example_2d_nonrigid_3.m, low_level_examples/example_3d_affine.m, low_level_examples/example_3d_nonrigid.m, low_level_examples/get_example_data.m, register_images.m, register_volumes.m
|