This does not work for arbitrary sized images. I haven't tried above 256x256 yet, but it won't work for smaller ROIs, I get the following error:
??? Attempted to access O_uniform(3,18,1); index out of bounds because size(O_uniform)=[17,17,2].
Error in ==> bspline_registration_gradient at 164
regBx=O_uniform(irp,jrp,1); regBy=O_uniform(irp,jrp,2);
Error in ==>
register_images>@(x)bspline_registration_gradient(x,sizes,Spacing/resize_per,imresize(ISmoving,1/resize_per),imresize(ISstatic,1/resize_per),options,MASKmovingsmall,MASKstaticsmall)
at 300
O_trans = resize_per*
fminlbfgs(@(x)bspline_registration_gradient(x,sizes,Spacing/resize_per,imresize(ISmoving,1/resize_per),imresize(ISstatic,1/resize_per),options,MASKmovingsmall,MASKstatic
Error in ==> fminlbfgs>gradient_function at 729
[fval, grad]=feval(funfcn,reshape(x,data.xsizes));
Error in ==> fminlbfgs at 154
[data,fval,grad]=gradient_function(data.xInitial,funfcn, data, optim);
Error in ==> register_images at 300
O_trans = resize_per*
fminlbfgs(@(x)bspline_registration_gradient(x,sizes,Spacing/resize_per,imresize(ISmoving,1/resize_per),imresize(ISstatic,1/resize_per),options,MASKmovingsmall,MASKstatic
Error in ==> example at 9
[Ireg,O_trans,Spacing,Bx,By,Fx,Fy] = register_images(Imoving,Istatic);