Dear Alec,
One of the famous researchers in this field is Dr. Daniel Bung (https://www.fh-aachen.de/en/people/bung) from the University of Applied Sciences, Germany.
He has published excellent papers in measuring the velocity of surface water using image processing. For your info, I send you his suggestion :
"Dear Prof. Ghorbani,
I thank you for your e-mail.
Estimation of surface velocities based on ripples, i.e. image textures, is possible (a sufficient sample rate is necessary). You may use a) a cross-correlation-based techniques or b) an optical-flow-based technique.
In the latter case, a (almost) constant illumination is required, which may be difficult to obtain in a natural environment. However, I am convinced that you may succeed if an appropriate method is used.
The Lucas-Kanade technique, for instance, is comparable to a PTV method (i.e. Lagrangian), selecting good features (textures) to track. I am not sure if this method was applied in your code. Such method may perform superiorly in comparison to some global methods as no continuous pattern is available for image velocimetry. I am not familiar with Mathematica, but I know that this method works fine with OpenCV in Python.
However, a traditional cross-correlation-based method (i.e. like PIV) may be suitable as well. Please note that there is even commercial instrumentation available using exactly this technique (stationary or with cell phone).
In any case, image preprocessing (filtering), like background subtraction, histogram equalization and blurring (as was done in the code) may help to improve the results. The quality of the filters depend on the particular case. We have tested some filters in a congress paper (IAHR World congress in The Hague) applied to bubble images. The results may give you an idea of how these filters perform.
So, all in all I think you are on the right way. I hope these comments are helpful.
Kind regards from Germany,
Daniel"