Typhoon retrieves vector motion fields from image sequences of turbulent flows.

Please log in to perform a job with this app.

Typhoon - Demo


Typhoon is a motion estimator primarily aimed at (turbulent) fluid flows.

This algorithm extracts the apparent motion within a given image pair, and returns a 2D vector field representing this motion. It uses a dense optical flow approach, and relies on a multiscale wavelet representation of the estimated motion.

The figure below shows an example of motion estimation. Top figures are two consecutive frames from a video sequence of a rotating vortex that is visualized with smoke. Bottom is a vector plot of the motion field estimated by Typhoon from the pair of frames. The first frame is shown in the background for reference, and the vector field has been subsampled by a factor of 10 in both dimensions.

Example of image-based fluid motion estimation

Note: this web app features an experimental demo version, with limited functionalities. In particular the following aspects are not supported here:

  • GPU-acceleration with CUDA (10-100 speedup);
  • batch processing for long sequences;
  • pyramidal estimation to handle large displacements;
  • client-server mode for custom IO and pre/post process.

For extended information please refer to http://www.pierrederian.net/typhoon.html


Basic demo

A demo is available by simply typing demo in the Parameters field. It features synthetic particle imagery (PIV) data. User-specified files, if any, are ignored. At the end, the two input image files are available ("run010050000.tif", ""run010050010.tif"") as well as the estimated and ground-truth motions ("UV.inr", "UVtruth.inr"). The corresponding set of parameters (see below) would be run010050000.tif run010050010.tif 3 3 1 1e-2.

Input data and parameters

The user should provide two image files using the Upload or URL fields, for instance "a.jpg" and "b.jpg". Most image formats are handled, more specifically all formats supported by Imagemagick.

Note: without the GPU-acceleration, the estimation can take some time with large images. For rapid results, it is highly recommended that no image dimension should be greater than 512 pixels.

The expected 6 parameters take the form img1 img2 scales_decomposed scales_estimated regul_code alpha_value which correspond to:

  • img1: the filename of the first image (here, "a.jpg");
  • img2: the filename of the second image (here, "b.jpg");
  • scales_decomposed: the number of wavelet scales to consider;
  • scales_estimated: the number of wavelet scales to estimate;
  • regul_code: the code number for the regularization, between -1 and 7. Typically 1 (Horn & Schunck) or -1 (no regularization);
  • alpha_value: the regularization factor, typically on the order of 0.001 - 0.1 for regul_code=1.

An example would be "a.jpg" "b.jpg" 8 6 -1 0 for an estimation featuring 6 motion scales estimated out of 8, and no regularization. See "More on parameters" below for detailed information.

Output motion

The estimated motion is written as an INR file "UV.inr". It is given in pixel units, in the usual image reference: origin top-left, x positive towards the right, y positive towards the bottom. Basic functions are provided to open these .inr files in Python and Matlab.

More on parameters

Wavelets parameters (scales_decomposed, scales_estimated)

These parameters are positive integers. Let scales_decomposed=D ≥ 0. It corresponds to a "subdivision" of the input images in square blocks of size 2^D (padding the images with 0 if necessary). Then, within each blocks, D wavelet scales are considered. The more scales, the better the algorithm can handle large displacements.

Now, regarding scales_estimated: it corresponds to the number of scales actually estimated with respect to the number of scales considered. Let scales_estimated=E ≥ 0, then 0 ≤ E ≤ D. E=0 means that only the very coarsest scale is estimated (faster, but coarse vector fields), while E=D means a full estimation (longer, but finer vector fields). In practice, it is often possible to get good results with E=D-1 or E=D-2. See Dérian et al. for more information on the wavelet-based optical flow.

Regularization parameters (regul_code, alpha_value)

The regul_code corresponds to the available regularization schemes. These can be:

  • -1: no regularization;
  • 0: L-2 norm of the vector field (u,v);
  • 1: Horn & Schunck (first order);
  • 2: curl of (u,v);
  • 3: divergence of (u,v);
  • 4: second order;
  • 5: Laplacian of (u,v);
  • 6: gradient(curl) of (u,v);
  • 7: gradient(div) of (u,v).

At first, the most useful are probably (-1) and (1). Note that with (-1), no regularization, scales_estimated=E ≤ D-1 in order to close the estimation problem. See Kadri et al. for more details on the regularization schemes.

The alpha_value balances the respective influence of the regularization term and the image data model. The larger alpha_value, the more regularization. Typical starting values range around 0.001. Note that alpha_value is ignored when regul_code=-1.


Wavelet-based optical flow for two-component wind field estimation from single aerosol lidar data
Dérian, P.; Mauzey, C. F. & Mayor, S. D.
Journal of Atmospheric and Oceanic Technology , Vol. 32 , pp. 1759-1778 , 2015

Wavelets and Optical Flow Motion Estimation
Dérian, P.; Héas, P.; Herzet, C. & Mémin, E.
Numerical Mathematics: Theory, Method and Applications , Vol. 6 , pp. 116-137 , 2013

Divergence-free Wavelets and High Order Regularization
Kadri Harouna, S.; Dérian, P.; Héas, P. & Mémin, E.
International Journal of Computer Vision , Vol. 103 , pp. 80-99 , 2013

Wavelets and Fluid Motion Estimation
Dérian, P.
PhD thesis, MATISSE, Université Rennes 1 , 2012


Fluminance team
CSU Chico Lidar group

In input :

In output :

24/06/2016 : Version 1.0, fixed demo mode

How to use our REST API :

Think to check your private token in your account first. You can find more detail in our documentation tab.

This app id is : 129

This curl command will create a job, and return your job url, and also the average execution time

files and/or dataset are optionnal, think to remove them if not wanted
curl -H 'Authorization: Token token=<your_private_token>' -X POST
-F job[webapp_id]=129
-F job[param]=""
-F job[queue]=standard
-F files[0]=@test.txt
-F files[1]=@test2.csv
-F job[file_url]=<my_file_url>
-F job[dataset]=<my_dataset_name> https://allgo.inria.fr/api/v1/jobs

Then, check your job to get the url files with :

curl -H 'Authorization: Token token=<your_private_token>' -X GET https://allgo.inria.fr/api/v1/jobs/<job_id>