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_edgesFunction
extract_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.PlaneType
Plane()

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.

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.

Misc

Some miscellaneous functions and helpers.

CorrelationFunctions.Utilities.read_cuboidFunction
read_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_ratioFunction
lowfreq_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_rotationFunction
make_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_arrayFunction
rotate_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_anisotropyFunction
detect_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.