R/xform.R
mirror.Rdmirroring with a warping registration can be used to account e.g. for the asymmetry between brain hemispheres.
mirror.character handles images on disk
mirror(x, ...)
# S3 method for character
mirror(x, output, mirrorAxisSize = NULL, target = x, ...)
# S3 method for default
mirror(
x,
mirrorAxisSize,
mirrorAxis = c("X", "Y", "Z"),
warpfile = NULL,
transform = c("warp", "affine", "flip"),
...
)
# S3 method for neuronlist
mirror(x, subset = NULL, OmitFailures = NA, ...)Object with 3D points (with named cols X,Y,Z) or path to image on disk.
additional arguments passed to methods or eventually to
xform
Path to the output image
A single number specifying the size of the axis to
mirror or a 2 vector (recommended) or 2x3 matrix specifying the
boundingbox (see details).
Path to the image defining the target grid (defaults to the input image - hard to see when this would not be wanted).
Axis to mirror (default "X"). Can also be an integer
in range 1:3.
Optional registration or reglist to be applied
after the simple mirroring.. It is called warpfile for historical
reasons, since it is normally the path to a CMTK registration that
specifies a non-rigid transformation to correct asymmetries in an image.
whether to use warp (default) or affine component of registration, or simply flip about midplane of axis.
For mirror.neuronlist indices
(character/logical/integer) that specify a subset of the members of
x to be transformed.
Whether to omit neurons for which FUN gives an
error. The default value (NA) will result in nlapply stopping with
an error message the moment there is an error. For other values, see
details.
Object with transformed points
The mirrorAxisSize argument can be specified in 3 ways for
the x axis with extreme values, x0+x1:
a single number equal to x0+x1
a 2-vector c(x0, x1) (recommended)
the boundingbox for the 3D data to be mirrored: the
relevant axis specified by mirrorAxis will be extracted.
This function is agnostic re node vs cell data, but for node data
BoundingBox should be supplied while for cell, it should be bounds. See
boundingbox for details of BoundingBox vs bounds.
See nlapply for details of the subset and
OmitFailures arguments.
nopen3d()
x=Cell07PNs[[1]]
mx=mirror(x,168)
# \donttest{
plot3d(x,col='red')
plot3d(mx,col='green')
# }
# also works with dotprops objects
nclear3d()
y=kcs20[[1]]
my=mirror(y,mirrorAxisSize=564.2532,transform='flip')
# \donttest{
plot3d(y, col='red')
plot3d(my, col='green')
# }
if (FALSE) {
## Example with an image
# note that we must specify an output image (obviously) but that as a
# convenience mirror calculates the mirrorAxisSize for us
mirror('myimage.nrrd', output='myimage-mirrored.nrrd',
warpfile='myimage_mirror.list')
# Simple flip along a different axis
mirror('myimage.nrrd', output='myimage-flipped.nrrd', mirrorAxis="Y",
transform='flip')
}