Fractals/Mathematics/LIC
line Integral Convolution (LIC):
- visualize dense flow fields by imaging its integral curves
- "emulates what happens when an area of fine sand is blown by strong wind" ( Zhanping Liu)[1]
Method
- vover domain with a input texture
- blur (convolve) the input texture along the path lines using a specified filter kernel
- smear out the texture along stream lines
Dictionary
[edit | edit source]- the integral curve of the vector field = field line of vector field = streamline of steady ( time independent) flow
- In mathematics, convolution is a special type of binary operation on two functions. Here discrete convolution is used
elements
[edit | edit source]input:
- texture, usually stationary white noise ( random texture)
- vector field: a stationary vector field defined by a map
kernel:[2]
- one dimensional matrix ( array) of weights
- with an odd kernel size to ensure there is a valid integer (x, y)-coordinate at the center of the image
- normalized. Normalization is defined as the division of each element in the kernel by the sum of all kernel elements, so that the sum of the elements of a normalized kernel is unity. This will ensure the average pixel in the modified image is as bright as the average pixel in the original image.
- often simple box filter
- often symmetric (isotropic) = the convolution kernel is symmetric across its zero point.
Convolution formula ( convolution is not matrix multiplication, when kernel matrix is used )
output image = Final LIC image of input vector field. It is a smeared version of the input texture , where the direction of smearing is determined by the vector field.
vector field
[edit | edit source]Source
- synthetic data
- experimental data
Method
- array of values
- functions defining vector field
algorithm
[edit | edit source]General steps for LIC image:
- For each pixel of output 2D array compute it's color
- save complete output array as 2D static image file
Substeps performed for each pixel of LIC image:
- choose pixel from output array
- go to the Vector array
- choose value at pixel
- find segment of local field line
dimensions
[edit | edit source]- all images ( textures, domains) have the same dimensions =
segment of field line
[edit | edit source]- The field lines are calculated on basis of a vector field
- a segment of locations where
- a segment of pixels intensities of length 2L + 1
tuple
[edit | edit source]In mathematics, a tuple is a finite ordered list (sequence) of elements.
Properties The general rule for the identity of two n-tuples is
Thus a tuple has properties that distinguish it from a set:
- A tuple may contain multiple instances of the same element, so
tuple ; but set . - Tuple elements are ordered: tuple , but set .
- A tuple has a finite number of elements, while a set or a multiset may have an infinite number of elements.
weighted mean
[edit | edit source]Color of output pixel is computed using weighted mean
The weighted mean of a non-empty finite tuple of:
- data ,
- corresponding non-negative weights
is
Therefore, data elements with a high weight contribute more to the weighted mean than do elements with a low weight.
The weights cannot be negative. Some may be zero, but not all of them (since division by zero is not allowed).
versions
[edit | edit source]line Integral Convolution (LIC)
- Oriented Line Integral Convolution (OLIC)
Implementation
[edit | edit source]- GPU-Based-Image-Processing-Tools by RaymondMcGuire in python
- LIC (Line Integral Convolution) principle and Python implementation
- github
- LicPy