Optical flow
More actions
Optical flow is the apparent motion of brightness patterns between successive images, usually represented as a two-dimensional field of displacement or velocity vectors, one per pixel or per tracked point. Berthold Horn and Brian Schunck, in their 1981 paper presenting a method for computing it, defined optical flow as "the distribution of apparent velocities of movement of brightness patterns in an image", and noted that it can arise from relative motion of objects and the viewer.[1] The closely related term optic flow is used in perception science for the global pattern of visual motion that an observer's own movement produces at the eye.[2]
Optical flow estimation is a core problem in computer vision, and it appears in several parts of virtual reality (VR) and augmented reality (AR) systems. Oculus used flow-like motion estimation to synthesize missing frames in Asynchronous Spacewarp and to estimate depth for the stereo passthrough of the Oculus Rift S; open-source visual-inertial trackers follow image features from frame to frame with sparse optical flow; and camera systems for stereoscopic 360-degree video use it to interpolate views between neighboring cameras.[3][4][5] On the perceptual side, the optic flow shown in a head-mounted display is a main driver of vection (illusory self-motion), and researchers have studied how it affects walking, speed perception and sickness in VR.[6][7]
Definition
An optical flow field assigns to each image location a vector that describes how the brightness pattern at that location appears to move between two frames. The OpenCV documentation describes it as a 2D vector field "where each vector is a displacement vector showing the movement of points from first frame to second", caused by the movement of objects or of the camera.[8]
Optical flow is not always the same as the true motion of surfaces in the scene. Horn and Schunck gave two examples: a uniform, shaded sphere rotating about its axis produces zero optical flow because the shading does not move with the surface, and specular reflections move with the virtual image rather than with the reflecting surface. Conversely, people perceive motion when a changing picture is projected onto a stationary screen.[1] For their method, Horn and Schunck therefore restricted themselves to a simplified world in which the apparent motion of brightness patterns can be identified directly with the motion of surfaces.[1]
A flow field can be dense, with a vector for every pixel, or sparse, with vectors only for selected feature points. Sparse methods such as the Lucas-Kanade tracker are cheap to compute; dense methods such as Gunnar Farnebäck's 2003 polynomial expansion algorithm give a vector for every point in the frame at a higher computational cost.[8][9]
How it is computed
Brightness constancy and the aperture problem
Classical methods start from the assumption that the brightness of a point in the pattern stays constant as it moves. Writing image brightness as E(x, y, t) and applying the chain rule gives one linear equation that links the spatial brightness gradients, the temporal brightness change and the two unknown velocity components u and v.[1] OpenCV's tutorial calls the result the optical flow equation, fxu + fyv + ft = 0, and adds the second common assumption that neighboring pixels move in a similar way.[8]
One equation cannot determine two unknowns. Horn and Schunck stated the problem directly: optical flow "cannot be computed locally, since only one independent measurement is available from the image sequence at a point, while the flow velocity has two components". In a patch where brightness varies along only one image direction, motion along the other direction produces no change at all and cannot be detected locally.[1] This limitation is known as the aperture problem, and estimation methods add a further constraint to resolve it.
Global smoothness: Horn-Schunck
Horn and Schunck's method, first issued as an MIT Artificial Intelligence Laboratory memo in April 1980 and published in the journal Artificial Intelligence in 1981, adds the assumption that "the apparent velocity of the brightness pattern varies smoothly almost everywhere in the image". The flow is found by an iterative scheme that balances the brightness constraint against this smoothness term over the whole image. The authors showed that it handled synthetic image sequences quantized rather coarsely in space and time, and that it was insensitive to quantization of brightness levels and to additive noise; they also included examples where the smoothness assumption is violated at singular points or along lines in the image.[1][10]
Local windows: Lucas-Kanade
Bruce Lucas and Takeo Kanade presented their image registration method at the 7th International Joint Conference on Artificial Intelligence (IJCAI '81) in August 1981. It uses the spatial intensity gradient of the images to find a good match through a type of Newton-Raphson iteration, and it examines fewer potential matches than earlier registration techniques.[11] Applied to optical flow, the method assumes that all pixels in a small window share one motion. This turns the single underdetermined equation into an overdetermined system (nine equations for a 3x3 patch) that is solved by least squares. Because the method assumes small motions, implementations run it on an image pyramid so that large displacements become small ones at coarse scales.[8]
Feature tracking: KLT
Carlo Tomasi and Takeo Kanade built a complete point tracker on this method in the 1991 Carnegie Mellon technical report Detection and Tracking of Point Features. They concluded that, for small inter-frame displacements, "the best tracking method turns out to be the one proposed by Lucas and Kanade in 1981", measured the match between feature windows as the sum of squared intensity differences, and derived a criterion for choosing windows that can be tracked well.[12] Jianbo Shi and Tomasi described the approach in their 1994 CVPR paper "Good Features to Track". The combined method is known as the Kanade-Lucas-Tomasi (KLT) feature tracker: good features are located by examining the minimum eigenvalue of each 2 by 2 gradient matrix, features are tracked by a Newton-Raphson minimization of the difference between two windows, and multiresolution tracking allows larger displacements.[13] OpenCV provides a pyramidal Lucas-Kanade tracker (calcOpticalFlowPyrLK) that is typically fed with Shi-Tomasi corners.[8]
Learned methods
From 2015, neural networks, first convolutional and later transformer-based, were trained to estimate optical flow directly from image pairs:
| Method | Authors and venue | Approach and reported results |
|---|---|---|
| FlowNet | Dosovitskiy, Fischer, Ilg and others, ICCV 2015[14] | Cast flow estimation as supervised learning. Introduced a correlation layer that compares feature vectors at different image locations, and the synthetic Flying Chairs training set; generalized to Sintel and KITTI at 5 to 10 frames per second |
| FlowNet 2.0 | Ilg, Mayer, Saikia, Keuper, Dosovitskiy and Brox, CVPR 2017[15] | Stacked networks that warp the second image with intermediate flow, plus a sub-network for small displacements; more than 50 percent lower error than FlowNet, with faster variants running at up to 140 frames per second |
| PWC-Net | Sun, Yang, Liu and Kautz (NVIDIA), CVPR 2018[16] | Pyramidal processing, warping and a cost volume in a learnable feature pyramid; 17 times smaller than FlowNet2, about 35 frames per second on 1024x436 Sintel images |
| RAFT | Teed and Deng (Princeton University), ECCV 2020[17] | 4D correlation volumes over all pairs of pixels with a recurrent update unit; end-point error of 2.855 pixels on Sintel (final pass) and an F1-all error of 5.10 percent on KITTI. Won the ECCV 2020 Best Paper Award[18] |
| FlowFormer | Huang, Shi, Zhang and others, ECCV 2022[19] | Transformer that tokenizes the 4D cost volume; average end-point errors of 1.159 (clean) and 2.088 (final) on the Sintel benchmark |
Benchmarks
Progress has been measured on public datasets with ground-truth flow. The Middlebury benchmark was first presented at ICCV 2007 and described in full in the International Journal of Computer Vision in 2011.[20] MPI Sintel, introduced by Butler, Wulff, Stanley and Black at ECCV 2012, is derived from the open-source animated short film Sintel.[21] The KITTI Flow 2012 benchmark, from the KITTI Vision Benchmark Suite (Geiger, Lenz, Stiller and Urtasun, CVPR 2012), has 194 training and 195 test scenes of a static environment captured by a moving camera.[22] Accuracy on these benchmarks is commonly given as end-point error; RAFT, for example, reports its Sintel result in pixels.[17]
Benchmark accuracy is not the only goal for VR uses. The Google team behind the Jump camera system wrote that techniques with low end-point error on standard benchmarks "often produce dramatic artifacts such as temporal flickering or poorly localized edges" when used for view interpolation, and designed their own flow algorithm "to minimize visual artifacts, not endpoint error".[5]
History
Optic flow in perception
The idea that a moving observer sees a lawful pattern of visual motion predates computer vision. James J. Gibson introduced it to perceptual psychologists in 1947, after studying the visual guidance of aircraft landing for the US Army Air Forces Aviation Psychology Program during the Second World War, and developed it in his 1950 book The Perception of the Visual World.[2] Gibson consistently used the term "flow" for the changes the retinal image undergoes during self-motion, and is seen using the more specific term "optical flow" in a 1955 paper with colleagues. His 1950 book also introduced the term focus of expansion for the point from which the flow pattern radiates when moving forward, although Gibson argued that the direction of self-motion is specified by the whole flow pattern, not only by that point.[2]
In a 2021 history of the concept, Diederick Niehorster showed that others developed the same idea independently, chiefly Gwilym Grindley in reports for the Royal Air Force's Flying Personnel Research Committee (1940 and 1942) and Edward Calvert, whose work on aircraft approach lighting led him in 1949 to the importance of visual motion for guiding aircraft. Niehorster concluded that Gibson's work was not derivative of Grindley's and that Gibson learned of Calvert's work only in 1956.[2]
Computational optical flow
| Year | Milestone |
|---|---|
| 1980-1981 | Horn and Schunck publish a global, smoothness-based method (MIT AI Memo 572, then Artificial Intelligence vol. 17)[10][1] |
| 1981 | Lucas and Kanade present their gradient-based iterative image registration method at IJCAI '81[11] |
| 1991 | Tomasi and Kanade publish Detection and Tracking of Point Features (CMU-CS-91-132), the basis of the KLT tracker[12] |
| 2003 | Farnebäck publishes a dense two-frame method based on polynomial expansion, later implemented in OpenCV[8] |
| 2007-2012 | Middlebury, MPI Sintel and KITTI benchmarks with ground-truth flow are released[20][21][22] |
| 2015 | FlowNet shows that a convolutional network can be trained end to end for optical flow[14] |
| 2019 | NVIDIA exposes the dedicated optical flow hardware of Turing GPUs through Optical Flow SDK 1.0; Oculus announces its use for ASW and Passthrough+[9][3] |
| 2020 | RAFT wins the ECCV 2020 Best Paper Award[18] |
Applications in VR and AR
Frame synthesis and reprojection
When a VR application cannot render at the headset's refresh rate, runtimes synthesize intermediate frames. Oculus engineers Dean Beeler and Volga Aksoy wrote in 2019 that Asynchronous Spacewarp (ASW) "uses optical flow to infer motion within the scene and extrapolate further", so that plausible frames can be synthesized when an application falls behind. Until then ASW had repurposed the GPU's video encoder for motion estimation. The encoder ran in parallel with rendering and so did not slow the application, but its motion vectors are optimized for compression rather than for true scene motion, which made the predicted frames less accurate.[3] A Valve patent granted in 2020, titled "Motion smoothing for re-projected frames" and naming Alex Vlachos and Aaron Leiby as inventors, likewise describes a GPU video encoder analyzing two previously rendered frames to generate an array of motion vectors, which are then used to modify a re-projected frame to account for moving or animating objects.[23] Valve's SteamVR feature of the same name is covered at Motion Smoothing.
In May 2019 Oculus announced that its PC runtime version 1.38, due in June 2019, would use NVIDIA's hardware optical flow for ASW and Passthrough+ on Turing GPUs. Oculus stated that NVIDIA's optical flow quadrupled the macroblock resolution, increased motion vector resolution, could follow objects through intensity changes, and gave half the average end-point error of video-encoder motion vectors; near-field objects tracked more reliably and swinging flashlights produced spurious motion less often.[3][24]
Application SpaceWarp, released for standalone Meta Quest headsets in 2021, takes a different route: the application renders at half rate and supplies its own depth buffers and motion vectors. Meta tech lead Neel Bedekar told Road to VR that this can produce "significantly" better results than the PC version, in which motion vectors were estimated from finished frames.[25]
Passthrough and depth from disparity
Optical flow can also be computed between two images taken at the same moment by different cameras. The resulting horizontal displacement is a disparity, from which depth follows when the camera positions are known. The Rift S feature Passthrough+ projects the headset's front cameras as though they were at the user's eyes, and did this disparity estimation in real time by repurposing the ASW technology. With NVIDIA's optical flow, Oculus reported higher stereo resolution, correct tracking of thin objects, and usable disparity in low-contrast or over-exposed areas, avoiding holes in the estimated depth.[3] Padmanaban and colleagues used the same idea in a 2018 study, computing disparity for stereoscopic 360-degree videos as the flow between the left and right views because it seemed more robust to distortion in some videos than traditional disparity matching.[7] See also Passthrough and Depth map.
Inside-out tracking and visual-inertial odometry
Visual-inertial odometry systems estimate a device's pose by combining camera images with an inertial measurement unit, and many of them follow features between frames with sparse optical flow. In VINS-Mono, an open-source estimator from the Hong Kong University of Science and Technology that its authors demonstrated on drones and in mobile AR applications on iOS, "existing features are tracked by the KLT sparse optical flow algorithm" while new corner features are detected to maintain a minimum of 100 to 300 features in each image.[4] This kind of front end is part of the inside-out tracking used by standalone headsets and phone-based AR, although manufacturers rarely document their proprietary trackers at this level.
Stereoscopic 360-degree video capture
Camera rigs for VR video cannot place a real camera at every viewpoint a stereoscopic panorama needs, so they synthesize missing views. Google's Jump system, published at SIGGRAPH Asia 2016, stitches omnidirectional stereo video from 16 cameras by reducing the problem to pairwise image interpolation. It solves full 2D optical flow between adjacent cameras rather than a 1D stereo search, to stay robust to specular highlights and to fast-moving objects seen by rolling-shutter cameras. After the images are rotated to remove camera orientation, the horizontal flow approximates inverse depth. The authors reported 1.1 seconds of flow computation per megapixel on commodity hardware without GPUs or FPGAs, compared with minutes or hours per megapixel for the top KITTI methods at the time.[5]
Facebook's open-source Surround 360 rig used the same principle. Forrest Briggs wrote that its stitching software uses optical flow for view interpolation, generating "virtual cameras" between the real ones in the ring, and also uses flow to match the top camera image to the side panoramas.[26]
Hardware acceleration
NVIDIA's Turing GPUs added a dedicated hardware engine for optical flow, exposed through Optical Flow SDK 1.0 in February 2019. NVIDIA states that it returns flow vectors at a granularity as high as 4x4 pixel blocks with quarter-pixel accuracy, compared with up to 8x8 blocks for the motion-estimation-only mode of the NVENC encoder on Maxwell, Pascal and Volta GPUs, and that it is more robust to intensity changes.[9] NVIDIA's SDK page lists Turing, Ampere and Ada GPUs and names frame interpolation and extrapolation for "reducing the apparent latency in VR experience" among the uses.[27]
Optic flow, self-motion and comfort in VR
Virtual environments let researchers change optic flow independently of real movement. Warren and colleagues at Brown University did this in a 2001 Nature Neuroscience study, displacing the optic flow from the direction of walking in an immersive virtual environment. Participants walked in the visual direction of a lone target, but relied increasingly on optic flow as more of it was added to the display; the authors described the steering control law as a linear combination of the two cues weighted by the magnitude of flow.[6]
Geometrically correct optic flow does not always feel correct. Banton, Stefanucci, Durgin, Fass and Proffitt reported in 2005 that correct flow appears too slow during simulated walking on a treadmill in a head-mounted display. The effect disappeared when gaze was directed downward or to the side, which shifts the flow from expanding to lamellar, and the authors hypothesized that a limited field of view removes the lamellar flow needed for accurate speed perception during straight-ahead gaze.[28] Bruder, Steinicke, Wieland and Lappe took the opposite approach in 2012: instead of scaling virtual camera motion relative to real movement, they introduced self-motion illusions by manipulating the optic flow field (layered motion, contour filtering, change blindness and contrast inversion) on the ground plane or in peripheral vision. Their experiments showed that these manipulations significantly affected users' self-motion judgments and could compensate for the common underestimation of travel distances in virtual environments.[29]
Optic flow is also central to visually induced discomfort. Padmanaban and colleagues at Stanford University note that motion sickness in VR results from moving visual stimuli that make users perceive self-motion while they remain stationary, and that vection occurs when the information in the optical flow on the retina leads a person to perceive self-motion. To predict how nauseating a stereoscopic 360-degree video would be, they computed per-pixel optical flow with FlowNet and trained a predictor on features of speed, direction and depth; it generally outperformed a naive estimate but was limited by the size of their dataset.[7] See Cybersickness and vection for the wider topic.
See also
References
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 1.6 Berthold K. P. Horn, Brian G. Schunck (1981-08). "Determining optical flow". Artificial Intelligence, vol. 17, no. 1-3, pp. 185-203. https://doi.org/10.1016/0004-3702(81)90024-2. Retrieved 2026-10-06.
- ↑ 2.0 2.1 2.2 2.3 Diederick C. Niehorster (2021). "Optic Flow: A History". i-Perception, vol. 12, no. 6. https://doi.org/10.1177/20416695211055766. Retrieved 2026-10-06.
- ↑ 3.0 3.1 3.2 3.3 3.4 Dean Beeler, Volga Aksoy (2019-05-23). "ASW and Passthrough+ with NVIDIA Optical Flow". Meta Horizon OS Developers Blog. Meta Platforms. https://developers.meta.com/horizon/blog/asw-and-passthrough-with-nvidia-optical-flow/. Retrieved 2026-10-06.
- ↑ 4.0 4.1 Tong Qin, Peiliang Li, Shaojie Shen (2018-08). "VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator". IEEE Transactions on Robotics, vol. 34, no. 4, pp. 1004-1020. https://doi.org/10.1109/TRO.2018.2853729. Retrieved 2026-10-06.
- ↑ 5.0 5.1 5.2 Robert Anderson, David Gallup, Jonathan T. Barron, Janne Kontkanen, Noah Snavely, Carlos Hernández, Sameer Agarwal, Steven M. Seitz (2016-11). "Jump: Virtual Reality Video". ACM Transactions on Graphics, vol. 35, no. 6 (SIGGRAPH Asia 2016). https://doi.org/10.1145/2980179.2980257. Retrieved 2026-10-06.
- ↑ 6.0 6.1 William H. Warren Jr., Bruce A. Kay, Wendy D. Zosh, Andrew P. Duchon, Stephanie Sahuc (2001-02). "Optic flow is used to control human walking". Nature Neuroscience, vol. 4, no. 2, pp. 213-216. https://doi.org/10.1038/84054. Retrieved 2026-10-06.
- ↑ 7.0 7.1 7.2 Nitish Padmanaban, Timon Ruban, Vincent Sitzmann, Anthony M. Norcia, Gordon Wetzstein (2018-04). "Towards a Machine-Learning Approach for Sickness Prediction in 360° Stereoscopic Videos". IEEE Transactions on Visualization and Computer Graphics, vol. 24, no. 4, pp. 1594-1603. https://doi.org/10.1109/TVCG.2018.2793560. Retrieved 2026-10-06.
- ↑ 8.0 8.1 8.2 8.3 8.4 8.5 "Optical Flow (OpenCV tutorial)". OpenCV documentation. OpenCV. https://docs.opencv.org/4.x/d4/dee/tutorial_optical_flow.html. Retrieved 2026-10-06.
- ↑ 9.0 9.1 9.2 Abhijit Patait (2019-02-13). "An Introduction to the NVIDIA Optical Flow SDK". NVIDIA Technical Blog. NVIDIA. https://developer.nvidia.com/blog/an-introduction-to-the-nvidia-optical-flow-sdk/. Retrieved 2026-10-06.
- ↑ 10.0 10.1 Berthold K. P. Horn, Brian G. Schunck (1980-04-01). "Determining Optical Flow (AI Memo 572)". MIT Artificial Intelligence Laboratory. Massachusetts Institute of Technology. https://dspace.mit.edu/handle/1721.1/6337. Retrieved 2026-10-06.
- ↑ 11.0 11.1 Bruce D. Lucas, Takeo Kanade (1981-08). "An Iterative Image Registration Technique with an Application to Stereo Vision". Proceedings of the 7th International Joint Conference on Artificial Intelligence (IJCAI '81), vol. 2, pp. 674-679. Carnegie Mellon University Robotics Institute. https://publications.ri.cmu.edu/an-iterative-image-registration-technique-with-an-application-to-stereo-vision-ijcai. Retrieved 2026-10-06.
- ↑ 12.0 12.1 Carlo Tomasi, Takeo Kanade (1991-04). "Detection and Tracking of Point Features (Technical Report CMU-CS-91-132)". Carnegie Mellon University School of Computer Science. https://cecas.clemson.edu/~stb/klt/tomasi-kanade-techreport-1991.pdf. Retrieved 2026-10-06.
- ↑ Stan Birchfield. "KLT: An Implementation of the Kanade-Lucas-Tomasi Feature Tracker". Clemson University. https://cecas.clemson.edu/~stb/klt/. Retrieved 2026-10-06.
- ↑ 14.0 14.1 Alexey Dosovitskiy, Philipp Fischer, Eddy Ilg, Philip Häusser, Caner Hazırbaş, Vladimir Golkov, Patrick van der Smagt, Daniel Cremers, Thomas Brox (2015). "FlowNet: Learning Optical Flow with Convolutional Networks". 2015 IEEE International Conference on Computer Vision (ICCV), pp. 2758-2766 (arXiv:1504.06852). https://arxiv.org/abs/1504.06852. Retrieved 2026-10-06.
- ↑ Eddy Ilg, Nikolaus Mayer, Tonmoy Saikia, Margret Keuper, Alexey Dosovitskiy, Thomas Brox (2017). "FlowNet 2.0: Evolution of Optical Flow Estimation with Deep Networks". 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pp. 1647-1655 (arXiv:1612.01925). https://arxiv.org/abs/1612.01925. Retrieved 2026-10-06.
- ↑ Deqing Sun, Xiaodong Yang, Ming-Yu Liu, Jan Kautz (2018). "PWC-Net: CNNs for Optical Flow Using Pyramid, Warping, and Cost Volume". 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), pp. 8934-8943 (arXiv:1709.02371). https://arxiv.org/abs/1709.02371. Retrieved 2026-10-06.
- ↑ 17.0 17.1 Zachary Teed, Jia Deng (2020). "RAFT: Recurrent All-Pairs Field Transforms for Optical Flow". Computer Vision - ECCV 2020, Lecture Notes in Computer Science, pp. 402-419 (arXiv:2003.12039). https://arxiv.org/abs/2003.12039. Retrieved 2026-10-06.
- ↑ 18.0 18.1 "Zachary Teed, Claire Wayner win top Princeton honors". Princeton Engineering. Princeton University. 2022-02-15. https://engineering.princeton.edu/news/2022/02/15/zachary-teed-claire-weyner-win-top-princeton-honors. Retrieved 2026-10-06.
- ↑ Zhaoyang Huang, Xiaoyu Shi, Chao Zhang, Qiang Wang, Ka Chun Cheung, Hongwei Qin, Jifeng Dai, Hongsheng Li (2022). "FlowFormer: A Transformer Architecture for Optical Flow". Computer Vision - ECCV 2022, Lecture Notes in Computer Science, pp. 668-685 (arXiv:2203.16194). https://arxiv.org/abs/2203.16194. Retrieved 2026-10-06.
- ↑ 20.0 20.1 "Middlebury Optical Flow Evaluation". Middlebury College Computer Vision. https://vision.middlebury.edu/flow/. Retrieved 2026-10-06.
- ↑ 21.0 21.1 "MPI Sintel Flow Dataset". Max Planck Institute for Intelligent Systems. http://sintel.is.tue.mpg.de/. Retrieved 2026-10-06.
- ↑ 22.0 22.1 "Optical Flow Evaluation 2012". The KITTI Vision Benchmark Suite. https://www.cvlibs.net/datasets/kitti/eval_flow.php. Retrieved 2026-10-06.
- ↑ Alex Vlachos, Aaron Leiby (2020-08-04). "US10733783B2 - Motion smoothing for re-projected frames". Google Patents. https://patents.google.com/patent/US10733783B2/en. Retrieved 2026-10-06.
- ↑ Ben Lang (2019-05-23). "Rift S Will Get Enhanced Passthrough+ & ASW on the Latest NVIDIA GPUs". Road to VR. https://roadtovr.com/rift-s-enhanced-passthrough-asw-nvidia-rtx-turing-gpu/. Retrieved 2026-10-06.
- ↑ Ben Lang (2021-11-12). "Now Available: New Quest Rendering Tech Promises Massive Gains in App Performance". Road to VR. https://roadtovr.com/oculus-quest-application-spacewarp-asw/. Retrieved 2026-10-06.
- ↑ Forrest Briggs (2016-07-26). "Surround 360 is now open source". Engineering at Meta. Facebook. https://engineering.fb.com/2016/07/26/video-engineering/surround-360-is-now-open-source/. Retrieved 2026-10-06.
- ↑ "NVIDIA Optical Flow SDK". NVIDIA Developer. NVIDIA. https://developer.nvidia.com/optical-flow-sdk. Retrieved 2026-10-06.
- ↑ Tom Banton, Jeanine Stefanucci, Frank H. Durgin, Adam Fass, Dennis Proffitt (2005-08). "The Perception of Walking Speed in a Virtual Environment". Presence: Teleoperators and Virtual Environments, vol. 14, no. 4, pp. 394-406. https://doi.org/10.1162/105474605774785262. Retrieved 2026-10-06.
- ↑ Gerd Bruder, Frank Steinicke, Phil Wieland, Markus Lappe (2012-07). "Tuning Self-Motion Perception in Virtual Reality with Visual Illusions". IEEE Transactions on Visualization and Computer Graphics, vol. 18, no. 7, pp. 1068-1078. https://doi.org/10.1109/TVCG.2011.274. Retrieved 2026-10-06.