Code covered by the BSD License  

Highlights from
B-spline Grid, Image and Point based Registration

image thumbnail

B-spline Grid, Image and Point based Registration

by

 

26 May 2008 (Updated )

B-spline registration of two 2D / 3D images or corrsp. points, affine and with smooth b-spline grid.

O_error=bspline_registration_image(O_grid,sizes,Spacing,I1,I2,type)
function O_error=bspline_registration_image(O_grid,sizes,Spacing,I1,I2,type)
% Function Registration_image. This function will create
% an small registration error image after b-spline non-rigid registration
% of two images / volumes.
%
% Ierror=bspline_registration_image(grid,sizes,I1,I2,type);
%
% inputs,
%   grid: b-spline control grid created by make_init_grid.m, (and reshaped
%         to one long vector.)
%   sizes: sizes need tot reshape the grid to matrix format.
%   Spacing: Spacing of the b-spline grid knot vector
%   I1 and I2: The input images, of which I1 is transformed.
%   type: Type of registration error (see registration_error.m)
%
% outputs,
%   Ierror: The error image, resized for usage by lsqnonlin optimizer.
%
% example,
%   I1=im2double(imread('lenag1.png')); 
%   I2=im2double(imread('lenag2.png'));
%   O_trans=make_init_grid([8 8],size(I1)); sizes=size(O_trans);
%   O_trans = lsqnonlin(@(x)bspline_registration_image(x,sizes,I1,I2,'d'),O_trans(:),[],[],optimset('Display','iter','MaxIter',10));
%   Icor=bspline_transform(reshape(O_trans,sizes),I1); 
%   figure, imshow(I1), figure, imshow(I2), figure, imshow(Icor)
%
%
% This function is written by D.Kroon University of Twente (July 2008)


O_grid=reshape(O_grid,sizes);

% Transform the image with the B-spline grid
I_tran=bspline_transform(O_grid,I1,Spacing);

% Calculate the current registration error/image
[t,I_error]=image_difference(I_tran,I2,type);

% Calculate error image resize percentage.
perc=max([(size(O_grid,1)*3)/size(I1,1) (size(O_grid,2)*3)/size(I1,2)]);
if(size(I1,3)>3), perc=max([perc (size(O_grid,3)*3)/size(I1,3)]); end

if(size(I1,3)<4)
    % Make the error image small to save memory
    O_error=imresize(I_error,perc);
else
    % Make the error image small to save memory
    O_error=imresize3d(I_error,perc,[],'linear','bound');
end

Contact us