We give an algorithm which extracts vortex filaments ("smoke rings") from a given 3D velocity field. For given filament strength, an optimal number of vortex filaments, together with their extent and placement, is given by the zero set of a complex valued function over the domain. This function is the global minimizer of a quadratic energy based on a Schrödinger operator. Computationally this amounts to finding the eigenvector belonging to the smallest eigenvalue of a Laplacian type sparse matrix.
Turning traditional vector field representations of flows, for example, on a regular grid, into a corresponding set of vortex filaments is useful for visualization, analysis of measured flows, hybrid simulation methods, and sparse representations. To demonstrate our method we give examples from each of these.