Utilities
Edge detection
The function extract_edges
complements imfilter
from Images.jl
and can be used to extract edges from an image on CPU and GPU.
CorrelationFunctions.Utilities.extract_edges
— Functionextract_edges(array, filter, topology)
Perform edge extraction in the same way as in surfsurf
and surfvoid
functions from Map
and Directional
modules. array
may be a CUDA array or an ordinary array. filter
is a value of AbstractKernel
type which selects an edge extraction algorithm. Boundary conditions are affected by topology
. Periodic boundary conditions are assumed if topology
is Torus()
and reflection from the boundaries is used if topology
is Plane()
.
See also: AbstractKernel
, AbstractTopology
.
CorrelationFunctions.Utilities.AbstractTopology
— TypeCorrelationFunctions.Utilities.Plane
— TypePlane()
Topology for calculation of correlation functions in non-periodic mode. Usually this means zero-padding of an input for out-of-bounds array access.
NB: When extracting edges with Plane
topology, reflection from array borders is used for out-of-bounds access. Although, it's natural to assume zero padding must be used, we want an equality $F_{ss}^{(false)} = F_{ss}^{(true)}$ for two-phase system, hence we cannot pad the input with some constant value.
See also: AbstractTopology
.
CorrelationFunctions.Utilities.Torus
— TypeTorus()
Topology for calculation of correlation functions in periodic mode. An input is extended to the infinity periodically as if it was wrapped around a torus.
See also: AbstractTopology
.
CorrelationFunctions.Utilities.AbstractKernel
— TypeCorrelationFunctions.Utilities.ConvKernel
— TypeConvKernel(n)
Convolution kernel of width n
used in edge detection. Values 5
and 7
are possible values for n
. Using n = 7
works best for the most cases (lowfreq_energy_ratio(array) > 0.97
).
See also: AbstractKernel
, extract_edges
.
CorrelationFunctions.Utilities.ErosionKernel
— TypeErosionKernel(n)
Erosion kernel of width n
used in edge detection. Used in three-point surface correlation functions.
See also: AbstractKernel
, extract_edges
.
Patterns for three-point functions
These patterns can be used to generate array-like objects which can be used as ps1
and ps2
arguments to the functions based on three-point statistics.
CorrelationFunctions.Utilities.make_pattern
— Functionmake_pattern(array, plane)
Make a set of points for calculation of correlation functions based on three-point statistics. The created set is based of a right triangle with varying lengths of catheti. The second argument defines alignment of the pattern with one of the planes.
See also: AbstractPlane
, PlaneXY
, PlaneXZ
, PlaneYZ
.
CorrelationFunctions.Utilities.PlaneXY
— TypePlaneXY()
A designator for a plane defined by vectors [1, 0]
and [0, 1]
(2D case) or [1, 0, 0]
and [0, 1, 0]
(3D case).
See also: AbstractPlane
.
CorrelationFunctions.Utilities.PlaneYZ
— TypePlaneYZ()
A designator for a plane defined by vectors [0, 1, 0]
and [0, 0, 1]
.
See also: AbstractPlane
.
CorrelationFunctions.Utilities.PlaneXZ
— TypePlaneXZ()
A designator for a plane defined by vectors [1, 0, 0]
and [0, 0, 1]
.
See also: AbstractPlane
.
CorrelationFunctions.Utilities.AbstractPlane
— TypeMisc
Some miscellaneous functions and helpers.
CorrelationFunctions.Utilities.read_cuboid
— Functionread_cuboid(datapath :: String, side, dim)
Read 3D array from a disk. The data on the disk must be in binary format, one octet per sample. Totally, there must be $side^{dim}$ octets which are read into $side \times side \times \dots \times side$ array.
CorrelationFunctions.Utilities.lowfreq_energy_ratio
— Functionlowfreq_energy_ratio(array, fraction = 0.5)
Calculate a ratio $E_a/E$ where $E$ is a total energy of a signal array
and $E_a$ is the energy concentrated in frequencies $[0, af/2]$ where $f$ is the sampling rate and $a$ is set via parameter fraction
. mean(array)
is subtracted from the array before calculations.
This function can be helpful in estimating if array
is suitable for calculating surface-surface or surface-void function. An empirical criterion is that if this function returns a value greater than 0.97
, the array is good.
CorrelationFunctions.Utilities.make_rotation
— Functionmake_rotation(ϕ)
Make a rotation of 2-dimensional data by ϕ radians clockwise.
See also: rotate_array
.
make_rotation(vec :: SVector{3}, ϕ)
Make a rotation of 3-dimensional data by ϕ radians around a vector vec
clockwise.
See also: rotate_array
.
make_rotation(m :: SMatrix{D,D})
Make a rotation which transforms unit vectors to columns of m
. It is implicitly assumed that any two columns c₁
and c₂
have zero dot product: (c₁, c₂) = 0
and all columns are unit vectors.
CorrelationFunctions.Utilities.rotate_array
— Functionrotate_array(array, rot, topology)
Rotate an array using rotation defined by rot
. The coordinate system's origin is placed into the center of the array. Out-of-bounds array access is specified by topology
argument. It is periodic extension of the array if topology
is Torus()
and zero padding if topology
is Plane()
.
See also: AbstractTopology
, Torus
, Plane
, make_rotation
.
CorrelationFunctions.Utilities.detect_anisotropy
— Functiondetect_anisotropy(array, phase)
Return a square matrix which characterizes anisotropy of the specified phase in the input. Each column of the matrix is a unit vector. The first vector points toward anisotropy and the other two vectors are perpendicular to the first vector and to each other. The resulting matrix can be used as an argument to make_rotation
.
See also: rotate_array
, make_rotation
.