ENH: Prostate MRUS Registration

TEST: Allow specification of other sheetness parameters in test

For now, using test to generate sheetness images. In future, should make CLI.

ENH: Need to set image directions for eigenvector image

Otherwise it will not necessarily be in the same space as the input
image and the sheetness image.

ENH: Add skeleton of registration metric comparing mesh normals to a vector-valued image

ENH: Implement cost function

When model and image are aligned in 3D Slicer, then model is in RAS
space (slicer space) while image is read in as LPS space (ITK space).
Need to convert model from RAS to LPS space so that the relationship
between them is the same for Slicer vs. ITK.

TEST: Begin making 2D plots of solution space

BUG: Euler 3D transform parameters are rotation first, then translation

ENH: Blur vector image to increase capture range

ENH: Make plots of solution space for translations

ENH: Make plots of solution space for rotations

ENH: Increase space of solution exploration

ENH: Use compression when writing output files

STYLE: Rename metric and tests to start supporting non-rigid transforms

FIX: Normalize gives nan if norm is zero

TEST: Add test for rigid metric

Need test before refactoring metric to support non-rigid deformations too.

ENH: Infrastructure for generic transforms

Still need to work on the GetValue() function.

ENH: Update GetValue() to work on any type of transform

TEST: Test different transformations - translate and B-spline (bulk only)

STYLE: Add function to get most recent transformed mesh

TEST: Start making test to investigate B-spline transforms

TEST: Also test B-spline parameters without bulk transform

TEST: Actually have a transformation in the B-spline exploration test

FIX: Output good deformation field for single B-spline node displacement

TEST: regression test on the RAS mesh centroids

FIX: Output finer displacement field that is still around the moving model

ENH: Beginnings of CLI with optimizer

ENH: Use half squared dot product, instead of absolute dot product

STYLE: Small style fixes

ENH: Implement the gradient for rigid registration

ENH: Finish up the optimizer

FIX: Don't expect the derivative to be already allocated

ENH: Add callback to the optimizer

FIX: Fix Jacobian computation

Handle queries outside the image domain. Step one voxel instead of 1 mm.

FIX: Fix callback for iteration printouts

ENH: Expose parameters to UI

ENH: Output blurred fixed image

FIX: Print in radians, not degrees

Easier to see what the optimizer is doing this way.

ENH: Add learning rate

ENH: Set scales with expected values, output transformed mesh

Plus a few other small fixes.

ENH: Specify initial rigid parameters

Can specify initial transformations and see if it aligns properly.

ENH: Add upper sheetness threshold

Do not trust eigenvectors when the sheetness is too high. This is useful
to avoid getting signal from the edge of the US fan compared to the black
background.

Change-Id: I359ccd6b4be28ef01ab97b7c76e52a3e866becca