you first need to determine the type of transformation(Rigid, Affine,.... , or non_rigid). If you did not get result by rigid, similarity and affine transformation(I'm not sure the way you implemented these methods), you are better off using Non-Rigid registration strategies.
I would suggest to try 3D Slicer. It has several automatic and manual registration methods and it can of course morph images to each other based on the registration results.
I would recommend to first align the images using landmark-based registration (download SlicerIGT extension and use Fiducial registration wizard to specify matching landmarks on the images and align/warp based on those). Then you may refine results using automatic intensity-based registration (using General registration (BRAINS) module), using mutual information as similarity metric and bspline transformation.
You can have a look at Slicer's registration library for musculoskeletal CT/MRI registration examples.