ENH: Prostate MRUS Registration

ENH: 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
(3D 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.

ENH: 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

BUG: Normalize gives nan if norm is zero

ENH: 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

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

STYLE: Add function to get most recent transformed mesh

ENH: Start making test to investigate B-spline transforms

ENH: Also test B-spline parameters without bulk transform

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

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

ENH: Regression test on the RAS mesh centroids

BUG: 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

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

ENH: Add callback to the optimizer

BUG: Fix Jacobian computation

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

BUG: Fix callback for iteration print outs

ENH: Expose parameters to UI

ENH: Output blurred fixed image

BUG: 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

STYLE: 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 ultrasound fan compared to the black
background.