Fit affine or thin plate spline transform to arbitrary transformation

```
fit_xform(
reg,
samplepts,
refpts = NULL,
type = c("affine", "rigid", "similarity", "tps"),
subsample = FALSE,
scale = c(1, 1),
...
)
```

## Arguments

- reg
Any registration compatible with `nat::xform`

,
including non-rigid and multi-step registrations. You must either supply
this or the `refpts`

argument.

- samplepts
A set of points in the sample (floating) space. Can be any
object compatible with `nat::xyzmatrix`

.

- refpts
An optional set of points in the target (fixed) space matching
`samplepts`

. You must either supply this or the `reg`

argument.

- type
A character string specifying the type of registration. See
`Morpho::computeTransform`

for details.

- subsample
A number of points to subsample from
`samplepts,refpts`

. The default value of `FALSE`

means use all
provided points to calculate the new transform.

- scale
a 2-vector indicating the amount to scale the sample and
reference points. You can supply one vector if this is the same. If the
transform expects points in microns and returns points in microns then you
would need `scale=c(1000,1)`

if you want the input to be in microns
and the output to be in nm.

- ...
Additional arguments passed to `Morpho::computeTransform`

## Value

A homogeneous affine matrix or a `nat::tpsreg`

object n.b. only
in development nat (>= 1.10.1)

## Details

NB this function relies on installation of the suggested package
Morpho.

## Examples

```
if (FALSE) {
library(nat.flybrains)
reg=shortest_bridging_seq(sample='FCWB', reference="JFRC2")
fit_xform(reg, nat::kcs20, subsample=200, type='affine')
# compute transform with translations in nm not microns
fit_xform(reg, nat::kcs20, subsample=200, type='affine', scale=1000)
}
```