Fast Optical Flow using Dense Inverse Search (DIS)
Switch branches/tags
Nothing to show
Clone or download
tikroeger Better gradient normalization. Leads to performance improvement: DIS …
…max. iterations can be half'ed. EPE improves by 2-3 percent.
Latest commit 2c9f2a6 May 15, 2017

Fast Optical Flow using Dense Inverse Search (DIS)

Our code is released only for scientific or personal use. Please contact us for commercial use.

If used this work, please cite:

@inproceedings{kroegerECCV2016, Author = {Till Kroeger and Radu Timofte and Dengxin Dai and Luc Van Gool}, Title = {Fast Optical Flow using Dense Inverse Search}, Booktitle = {Proceedings of the European Conference on Computer Vision ({ECCV})}, Year = {2016}}

Is you use the variational refinement, please additionally cite:

@inproceedings{weinzaepfelICCV2013, TITLE = {{DeepFlow: Large displacement optical flow with deep matching}}, AUTHOR = {Weinzaepfel, Philippe and Revaud, J{\'e}r{\^o}me and Harchaoui, Zaid and Schmid, Cordelia}, BOOKTITLE = {{ICCV 2013 - IEEE International Conference on Computer Vision}}, YEAR = {2013}}


The program was only tested under a 64-bit Linux distribution. SSE instructions from built-in X86 functions for GNU GCC were used.

The following will build four binaries: Two for optical flow (run_OF_*) and two for depth from stereo (run_DE_*). For each problem, a fast variant operating on intensity images (run_*_INT) and a slower variant operating on RGB images (run_*_RGB) is provided.

mkdir build
cd build
cmake ../
make -j

The code depends on Eigen3 and OpenCV. However, OpenCV is only used for image loading, scaling and gradient computation (run_dense.cpp). It can easily be replaced by other libraries.


The interface for all four binaries (run_*_*) is the same.

VARIANT 1 (Uses operating point 2 of the paper, automatically selects coarsest scale):

./run_*_* image1.png image2.png outputfile

VARIANT 2 (Manually select operating point X=1-4, automatically selects coarsest scale):

./run_*_* image1.png image2.png outputfile X

VARIANT 3 (Set all parameters explicitly):

./run_*_* image1.png image2.png outputfile p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 p20

Example for variant 3 using operating point 2 of the paper:

./run_OF_INT in1.png int2.png out.flo 5 3 12 12 0.05 0.95 0 8 0.40 0 1 0 1 10 10 5 1 3 1.6 2


1. Coarsest scale                               (here: 5)
2. Finest scale                                 (here: 3)
3/4. Min./Max. iterations                       (here: 12)
5./6./7. Early stopping parameters
8. Patch size                                   (here: 8)
9. Patch overlap                                (here: 0.4)
10.Use forward-backward consistency             (here: 0/no)
11.Mean-normalize patches                       (here: 1/yes)
12.Cost function                                (here: 0/L2)  Alternatives: 1/L1, 2/Huber, 10/NCC
13.Use TV refinement                            (here: 1/yes)
14./15./16. TV parameters alpha,gamma,delta     (here 10,10,5)
17. Number of TV outer iterations               (here: 1)
18. Number of TV solver iterations              (here: 3)
19. TV SOR value                                (here: 1.6)
20. Verbosity                                   (here: 2) Alternatives: 0/no output, 1/only flow runtime, 2/total runtime

The optical flow output is saves as .flo file. (

The interface for depth from stereo is exactly the same. The output is saves as pfm file. (


  1. For better quality, increase the number iterations (param 3/4), use finer scales (param. 2), higher patch overlap (param. 9), more outer TV iterations (param. 17)
  2. L1/Huber cost functions (param. 12) provide better results, but require more iterations (param. 3/4)

Bugs and extensions

If you find bugs, etc., please feel free to contact me. Contact details are available on my webpage.


July 2016 v1.0.0 - Initial Release August 2016 v1.0.1 - Minor Bugfix: Error in L1 and Huber error norm computation.



All programs in this collection are free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see