A stick tensor in 2 dimensions, encoded as a complex number.
A 2D field of stick tensors.
A 2D field of stick tensors.
Each tensor requires only 2 components, so this is implemented with a complex field. This uses the Scala "Enriched" pattern, much like RichStrings, to automatically convert back and forth between complex fields and stick tensor fields.
A symmetric, positive semidefinite, order-2 tensor in 2 dimensions.
A symmetric, positive semidefinite, order-2 tensor in 2 dimensions. See the paper "An efficient method for tensor voting using steerable filters," Franken et al, 2006, for a description.
This is implemented as a vector for efficiency because the matrix representation is redundant. The matrix form of a symmetric tensor:
Axx Axy Axy Ayy
is represented as a length 3 vector:
Axx Axy Ayy
A 2D field of positive, semidefinite, symmetric tensors.
A 2D field of positive, semidefinite, symmetric tensors.
Each tensor requires only 3 components, so this is implemented with a vector field. This uses the Scala "Enriched" pattern, much like RichStrings, to automatically convert back and forth between vector fields and symmetric tensor fields.
Converts local (x, y) coordinates to (row, column) coordinates.
Implicit conversions between stick tensor fields and complex fields.
Helper object for creating symmetric tensors.
Implicit conversions between symmetric tensor fields and vector fields.
A stick tensor in 2 dimensions, encoded as a complex number.
Because orientation extends only from 0 to Pi while phase of a complex number extends from 0 to 2 Pi, we *define* orientation to be half the phase of the complex number. This means when creating the stick tensor from a given orientation and magnitude, the orientation must be doubled.
A stick tensor, represented as a complex number.