The jump flooding algorithm (JFA) is a flooding algorithm used in the construction of Voronoi diagrams and distance transforms. The JFA was introduced by Rong Guodong at an ACM symposium in 2006.[1]
The JFA has desirable attributes in GPU computation, notably for its efficient performance. However, it is only an approximate algorithm and does not always compute the correct result for every pixel, although in practice errors are few and the magnitude of errors is generally small.[1]
The JFA original formulation is simple to implement.
Take an N × N {\displaystyle N\times N} grid of pixels[2] (like an image or texture). All pixels will start with an "undefined" color unless it is a uniquely-colored "seed" pixel. As the JFA progresses, each undefined pixel will be filled with a color corresponding to that of a seed pixel.
For each step size k ∈ { N 2 , N 4 , … , 1 } {\displaystyle k\in \{{\tfrac {N}{2}},{\tfrac {N}{4}},\dots ,1\}} , run one iteration of the JFA:
Note that pixels may change color more than once in each step, and that the JFA does not specify a method for resolving cases where distances are equal, therefore the last-checked pixel's color is used above.
The JFA finishes after evaluating the last pixel in the last step size. Regardless of the content of the initial data, the innermost loop runs a total of 9 log 2 ( N ) {\displaystyle 9\log _{2}(N)} times over each pixel, for an overall computational complexity of O ( N 2 log 2 ( N ) ) {\displaystyle O(N^{2}\log _{2}(N))} .
Some variants of JFA are:
The jump flooding algorithm and its variants may be used for calculating Voronoi maps[1][3] and centroidal Voronoi tessellations (CVT),[4] generating distance fields,[5] point-cloud rendering,[6] feature matching,[7] the computation of power diagrams,[8] and soft shadow rendering.[9] The grand strategy game developer Paradox Interactive uses the JFA to render borders between countries and provinces.[10]
The JFA has inspired the development of numerous similar algorithms. Some have well-defined error properties which make them useful for scientific computing.[11]
In the computer vision domain, the JFA has inspired new belief propagation algorithms to accelerate the solution of a variety of problems.[12][13]
As of this edit, this article uses content from "Is Jump Flood Algorithm Separable?", authored by alan-wolfe, trichoplax at Stack Exchange, which is licensed in a way that permits reuse under the Creative Commons Attribution-ShareAlike 3.0 Unported License, but not under the GFDL. All relevant terms must be followed.