Class MixedTransform
- java.lang.Object
-
- net.imglib2.transform.integer.AbstractMixedTransform
-
- net.imglib2.transform.integer.MixedTransform
-
- All Implemented Interfaces:
Concatenable<Mixed>,PreConcatenable<Mixed>,BoundingBoxTransform,Mixed,Transform
public class MixedTransform extends AbstractMixedTransform implements Concatenable<Mixed>, PreConcatenable<Mixed>
Mixed transform allows to express common integer view transformations such as translation, rotation, rotoinversion, and projection.It transform a n-dimensional source vector to a m-dimensional target vector, and can be represented as a m+1 × n+1 homogeneous matrix. The mixed transform can be decomposed as follows:
- project down (discard some components of the source vector)
- component permutation
- component inversion
- project up (add zero components in the target vector)
- translation
The project down and component permutation steps are implemented by the
component mapping. This is a lookup array that specifies for each target dimension from which source dimension it is taken. Note, that it is not allowed to set this array such that a source component is mapped to several target components!
-
-
Field Summary
Fields Modifier and Type Field Description protected int[]componentfor each component of the target vector (before translation).protected boolean[]invertfor each component of the target vector (before translation).protected intnumSourceDimensionsdimension of source vector.protected long[]translationtranslation is added to the target vector after applying permutation, projection, inversion operations.protected boolean[]zerofor each component of the target vector (before translation).-
Fields inherited from class net.imglib2.transform.integer.AbstractMixedTransform
numTargetDimensions
-
-
Constructor Summary
Constructors Constructor Description MixedTransform(int sourceDim, int targetDim)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidapply(int[] source, int[] target)Apply theTransformto a source vector to obtain a target vector.voidapply(long[] source, long[] target)Apply theTransformto a source vector to obtain a target vector.voidapply(Localizable source, Positionable target)MixedTransformconcatenate(Mixed t)Concatenate this object with a.voidgetComponentInversion(boolean[] invert)Get an array indicating for each target component, whether the source component it is taken from should be inverted.booleangetComponentInversion(int d)Get the d-th component of inversion vector (seeMixed.getComponentInversion(boolean[])).intgetComponentMapping(int d)Get the source dimension which is mapped to the d-th target dimension (seeMixed.getComponentMapping(int[])).voidgetComponentMapping(int[] component)Get an array indicating for each target dimensions from which source dimension it is taken.voidgetComponentZero(boolean[] zero)Get a boolean array indicating which target dimensions are _not_ taken from source dimensions.booleangetComponentZero(int d)Get the d-th component of zeroing vector (seeMixed.getComponentZero(boolean[])).java.lang.Class<Mixed>getConcatenableClass()double[][]getMatrix()Get the matrix that transforms homogeneous source points to homogeneous target points.java.lang.Class<Mixed>getPreConcatenableClass()longgetTranslation(int d)Get the d-th component of translation (seeMixed.getTranslation(long[])).voidgetTranslation(long[] t)Get the translation.booleanhasFullSourceMapping()Check whether the transforms has a full mapping of source to target components (no source component is discarded).intnumSourceDimensions()Returns n, the dimension of the source vector.MixedTransformpreConcatenate(Mixed t)Pre-concatenate this object with a.voidset(Mixed transform)set parameters totransform.voidsetComponentInversion(boolean[] invert)Set for each target component, whether the source component it is taken from should be inverted.voidsetComponentMapping(int[] component)Set for each target dimensions from which source dimension it is taken.voidsetComponentZero(boolean[] zero)Set which target dimensions are _not_ taken from source dimensions.voidsetInverseTranslation(long[] tinv)voidsetTranslation(long[] t)java.lang.StringtoString()-
Methods inherited from class net.imglib2.transform.integer.AbstractMixedTransform
numTargetDimensions, transform
-
-
-
-
Field Detail
-
numSourceDimensions
protected final int numSourceDimensions
dimension of source vector.
-
translation
protected final long[] translation
translation is added to the target vector after applying permutation, projection, inversion operations.
-
zero
protected final boolean[] zero
for each component of the target vector (before translation). should the value be taken from a source vector component (false) or should it be zero (true).
-
invert
protected final boolean[] invert
for each component of the target vector (before translation). should the source vector component be inverted (true).
-
component
protected final int[] component
for each component of the target vector (before translation). from which source vector component should it be taken.
-
-
Method Detail
-
numSourceDimensions
public int numSourceDimensions()
Description copied from interface:TransformReturns n, the dimension of the source vector.- Specified by:
numSourceDimensionsin interfaceTransform- Overrides:
numSourceDimensionsin classAbstractMixedTransform- Returns:
- the dimension of the source vector.
-
getTranslation
public void getTranslation(long[] t)
Description copied from interface:MixedGet the translation. Translation is added to the target vector after applying permutation, projection, inversion operations.- Specified by:
getTranslationin interfaceMixed- Overrides:
getTranslationin classAbstractMixedTransform- Parameters:
t- array of size at least the target dimension to store the result.
-
getTranslation
public long getTranslation(int d)
Description copied from interface:MixedGet the d-th component of translation (seeMixed.getTranslation(long[])).- Specified by:
getTranslationin interfaceMixed- Overrides:
getTranslationin classAbstractMixedTransform
-
setTranslation
public void setTranslation(long[] t)
-
setInverseTranslation
public void setInverseTranslation(long[] tinv)
-
getComponentZero
public void getComponentZero(boolean[] zero)
Description copied from interface:MixedGet a boolean array indicating which target dimensions are _not_ taken from source dimensions.For instance, if the transform maps 2D (x,y) coordinates to the first two components of a 3D (x,y,z) coordinate, the result will be [false, false, true]
- Specified by:
getComponentZeroin interfaceMixed- Overrides:
getComponentZeroin classAbstractMixedTransform- Parameters:
zero- array of size at least the target dimension to store the result.
-
getComponentZero
public boolean getComponentZero(int d)
Description copied from interface:MixedGet the d-th component of zeroing vector (seeMixed.getComponentZero(boolean[])).- Specified by:
getComponentZeroin interfaceMixed- Overrides:
getComponentZeroin classAbstractMixedTransform
-
setComponentZero
public void setComponentZero(boolean[] zero)
Set which target dimensions are _not_ taken from source dimensions.For instance, if the transform maps 2D (x,y) coordinates to the first two components of a 3D (x,y,z) coordinate, this will be [false, false, true]
- Parameters:
zero- array that says for each component of the target vector (before translation) whether the value should be taken from a source vector component (false) or should be set to zero (true).
-
getComponentMapping
public void getComponentMapping(int[] component)
Description copied from interface:MixedGet an array indicating for each target dimensions from which source dimension it is taken.For instance, if the transform maps 2D (x,y) coordinates to the first two components of a 3D (x,y,z) coordinate, the result will be [0, 1, x]. Here, the value of x is undefined because the third target dimension does not correspond to any source dimension. See
Mixed.getComponentZero(boolean[]).- Specified by:
getComponentMappingin interfaceMixed- Overrides:
getComponentMappingin classAbstractMixedTransform- Parameters:
component- array of size at least the target dimension to store the result.
-
getComponentMapping
public int getComponentMapping(int d)
Description copied from interface:MixedGet the source dimension which is mapped to the d-th target dimension (seeMixed.getComponentMapping(int[])).- Specified by:
getComponentMappingin interfaceMixed- Overrides:
getComponentMappingin classAbstractMixedTransform
-
setComponentMapping
public void setComponentMapping(int[] component)
Set for each target dimensions from which source dimension it is taken.For instance, if the transform maps 2D (x,y) coordinates to the first two components of a 3D (x,y,z) coordinate, this will be [0, 1, x]. Here, x can be any value because the third target dimension does not correspond to any source dimension, which can be realized using
setComponentZero(boolean[]).Note, that it is not allowed to set the
componentarray such that a source component is mapped to several target components!- Parameters:
component- array that says for each component of the target vector (before translation) from which source vector component it should be taken.
-
getComponentInversion
public void getComponentInversion(boolean[] invert)
Description copied from interface:MixedGet an array indicating for each target component, whether the source component it is taken from should be inverted.For instance, if rotating a 2D (x,y) coordinates by 180 degrees will map it to (-x,-y). In this case, the result will be [true, true].
- Specified by:
getComponentInversionin interfaceMixed- Overrides:
getComponentInversionin classAbstractMixedTransform- Parameters:
invert- array of size at least the target dimension to store the result.
-
getComponentInversion
public boolean getComponentInversion(int d)
Description copied from interface:MixedGet the d-th component of inversion vector (seeMixed.getComponentInversion(boolean[])).- Specified by:
getComponentInversionin interfaceMixed- Overrides:
getComponentInversionin classAbstractMixedTransform
-
setComponentInversion
public void setComponentInversion(boolean[] invert)
Set for each target component, whether the source component it is taken from should be inverted.For instance, if rotating a 2D (x,y) coordinates by 180 degrees will map it to (-x,-y). In this case, this will be [true, true].
- Parameters:
invert- array that says for each component of the target vector (before translation) whether the source vector component it is taken from should be inverted (true).
-
apply
public void apply(long[] source, long[] target)Description copied from interface:TransformApply theTransformto a source vector to obtain a target vector.
-
apply
public void apply(int[] source, int[] target)Description copied from interface:TransformApply theTransformto a source vector to obtain a target vector.
-
apply
public void apply(Localizable source, Positionable target)
Description copied from interface:Transform
-
concatenate
public MixedTransform concatenate(Mixed t)
Description copied from interface:ConcatenableConcatenate this object with a. The result will be an object that can be concatenated with another A. The conventional meaning for concatenating transformations is the following: Let ba = b.concatenate(a). Applying ba to x is equivalent to first applying a to x and then applying b to the result.- Specified by:
concatenatein interfaceConcatenable<Mixed>
-
getConcatenableClass
public java.lang.Class<Mixed> getConcatenableClass()
- Specified by:
getConcatenableClassin interfaceConcatenable<Mixed>
-
preConcatenate
public MixedTransform preConcatenate(Mixed t)
Description copied from interface:PreConcatenablePre-concatenate this object with a. The result will be an object that can be pre-concatenated with another A. The conventional meaning for concatenating transformations is the following: Let ba = a.preConcatenate(b). Applying ba to x is equivalent to first applying a to x and then applying b to the result.- Specified by:
preConcatenatein interfacePreConcatenable<Mixed>
-
getPreConcatenableClass
public java.lang.Class<Mixed> getPreConcatenableClass()
- Specified by:
getPreConcatenableClassin interfacePreConcatenable<Mixed>
-
set
public void set(Mixed transform)
set parameters totransform.- Parameters:
transform-
-
getMatrix
public double[][] getMatrix()
Get the matrix that transforms homogeneous source points to homogeneous target points. For testing purposes.
-
hasFullSourceMapping
public boolean hasFullSourceMapping()
Check whether the transforms has a full mapping of source to target components (no source component is discarded).- Returns:
- whether there is a full mapping of source to target components.
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-