• It's been a year.

    Xiyuan05/04/2020 at 20:54 0 comments

    I will continue working on this project starting today.

  • Week 6 Update

    Xiyuan06/26/2019 at 18:21 0 comments

    Wave probes tested + slow motion video

  • Week 5 Update 2 (Link to My CV programs)

    Xiyuan06/19/2019 at 22:06 0 comments

    Here's the link to my CV python programs: https://github.com/xli2522/CV-on-Water-Waves.git

    This repo includes:


    Live-Object-Tracking (Camshift)



  • Week 5 Progress 1

    Xiyuan06/19/2019 at 19:40 0 comments

    The USB Live Arduino program is finished! Now back to Computer vision!!!

    Find the complete program and setup  on Github: https://github.com/xli2522/Wave-Gauges-Mini-Wave-Tank.git

    + New Paddle Design:

  • Week 3 Update 2 (Micro-Controller System)

    Xiyuan06/07/2019 at 20:13 0 comments

    ** I am going to merge two of my projects together: CV on wave pattern and Mini Wave Tank Micro-controller. The reason for that is I am thinking about comparing data from these two systems and try to find some correlations. Next week I will talk more about what I am planning to compare.

    So ... Here's an update on my Micro Controller Data Collection System:

    • (If you don't like hardware or circuits, don't worry, the project is still mainly about computer vision.)

    Controller: Arduino UNO R3

    1 Inverting Op-Amp circuit:

    (I'm too lazy to add another power supply to the op-amp so I ended up using lots of resistors to produce the appropriate voltage) 

    1 Wave Probe

    Sample Output (find my Python and Arduino programs in the Files section):

    (I will keep updating my programs, adding more functions and simplifying the algorithm)

  • Week 3 Update1

    Xiyuan06/04/2019 at 21:48 0 comments

    Week 3 focuses on designing a program that detects wave patterns and projects them to the original video.

    Current Outcome:

  • Week 2 update 2

    Xiyuan05/31/2019 at 16:14 0 comments

    Here is a list of useful videos and documents:

    1. The science of waves on water:

    2. Making waves in a flume:

    3. Vortex       

    4. Reflection:

  • Week 2 update 1

    Xiyuan05/29/2019 at 17:31 0 comments

    Week 2 of the project focuses on learning edge detection, optical motion detection, and the application of Kalman Filter on object tracking. Some of them are not necessarily related to this project but it's always good to learn more because someday these knowledge will come in handy :)

    1. Application of Kalman Filter:

    In this video you can see at least 9 times, the predicted position (using Kalman Filter) went far away from the actual position, this phenomenon actually shows the idea behind Kalman Filter - predicting the next move by looking at previous moves. This algorithm gives the predicted position 'inertia'. To improve this, we can use video with higher frame rates so this algorithm can have more information and more opportunities to correct itself.

    2. Edge Detection (with Gaussian Blur treatment):

    • Canny

    Canny algorithm is pretty good at separating larger objects and detecting their edges, like this lego man, however, when it comes to detecting the edge of tiny water patterns, Canny algorithm just isn't that good. (Canny often produces all black image when detecting water patterns.)

    • Sobel(along the horizontal axis):

    Sobel algorithm did an OK job detecting the lego man and when it comes to wave patterns, this algorithm also provides us with some information rather than a black image (like what Canny often does). 

    Although it's very noisy but you can still see a ripple-like pattern (this specific algorithm includes Gaussian Blur treatment before the picture is processed for edge detection, which improves Sobel's result).

    3. Dense Optical Flow (DOF) Motion Detection

    Different from last week's colour based detection, DOF algorithm detects motion vectors of pixels and marks moving area with different colour. It is very useful when you have no control over the colour of the background and the object, but a stationary camera or background is necessary.

    (In the second video, you can see when the mouse is gone, it became very noisy, that's because the algorithm starts picking up very tiny movement of pixels after the large moving object is gone.)

    Conclusion & Lesson: 

    • Canny is not the best algorithm at detecting small wave patterns, however, when the lighting and camera angle are perfect, you can pick up decent images like this one:
    • Gaussian Blur is not always good for edge detection depending on your choice of algorithm and environment.

    So, the next step is to create a wave tank environment that's perfect for Canny algorithm to pick up wave patters.

  • First Week Update

    Xiyuan05/25/2019 at 21:31 0 comments

    Hello everyone, welcome to my first project log! I have been learning computer vision in the past week (I did't know anything about computer vision before this project) and tried different programs related to object tracking and feature detection. Most of the material and code can be found on OpenCV's website so if you happen to be interested in learning computer vision, that's a great place to start!

    Here are some of the cool things I learned in the past week: (I will post some of the code to Github in the future so if you want to try them yourself but don't want to go through all the details and errors, stay tuned!)

    1. Object tracking based on colour:

    • Colour separation using Python and OpenCV 4
    • CamShift object tracking using Python and OpenCV 4

    2. Corner detection and feature matching:

    • ORB algorithm corner detection:
    • Feature matching using ORB algorithm:

    (It matches similar features but not always what you want, as you can see in the third picture, this algorithm drew lots of connections from the original photo to the desk.)