Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Algorithm for determining the size of air bubbles from image

I'm looking for a good way to isolate an air bubble from the following image. I'm using Visual Studio 2015 and C#.

I've heard of the watershed method and believe it may be a good solution.

I tried implementing the code solution found here: watershed image segmentation

I haven't had much success. The solution has trouble finding functions, for example: FilterGrayToGray.

Does anyone know of a good way to do this?

Example of Image

like image 947
Toster Avatar asked May 22 '16 13:05

Toster


People also ask

How are bubble sizes measured?

The length and velocity of each bubble is measured by a pair of optical detectors in a brass block surrounding a capillary tube through which bubbles are drawn.

What happens to the size of air bubbles?

The volume occupied by a gas is inversely proportional to the pressure acting on it, i.e., if the pressure increases, the volume occupied by the gas decreases, and if the pressure acting on the gas reduces, the volume occupied by the gas increases. Hence the size of a rising air bubble grows as the pressure decreases.


2 Answers

You should just train a Neural network to recognize parts of image when there are no bubbles (in example groups of 16x16 pixels). Then when recognizing a square is not successfull you do a burst of horizontal scanlines and you register where the edge starts and ends. You can determine pretty precisely the section of a bubble (however determine its volume needs to keep into account surface curvature, wich is possible but more hard) on the image. If you have the possibility to use more cameras you can triangulate more sections of a bubble and get a precise idea of real volume. As another euristic to know bubble size you can also use the known volume throughput, so you know that if in a time interval you emitted X liters of air, and the bubbles have sections given in a certain proportion you can redistribute total volume across bubbles and further increase precision (of course you have to keep in mind pressure since bubbles on bottom of the pool will be more little).

Show different images tweaked

As you see you can play with simple algorithms like gaussian difference and contrast to achieve different quality results.

  • In the left picture you can easily remove all background noise, however you have lost now part of the bubbles. It is possible you can re-gain the missed bubbles edge by using a different illumination on the pool
  • In the right picture you have the whole bubbles edges, but now you also have more areas that you need to manually discard from picture.

As for edge detections algorithm you should use an algorithm that do not add a fixed offset to edges (like convolution matrix or laplace), for this I think gaussian difference would work best.

Keep all intermediate data so one can easily verify and tweak the algorithm and increase its precision.

EDIT:

The code depends on wich library you use, you can easily implement Gaussian Blur and Horizontal Scanline, for Neural Networks there are already c# solutions out there.

// Do gaussian difference
Image ComputeGaussianDifference (Image img, float r1, float r2){
    Image img = img.GaussianBlur( r1);
    Image img2 = img.GaussianBlur( r2);
    return (img-img2).Normalize(); // make values more noticeable
}

more edits pending.. try do document yourself in the meantime, I already given enough trace to let you do the job, you just need basic understanding of simple image processing algorithms and usage of ready neural networks.

like image 68
CoffeDeveloper Avatar answered Sep 19 '22 14:09

CoffeDeveloper


Just in case if you are looking for some fun - you could investigate Application Example: Photo OCR. Basically you train one NN to detect bubble, and try it on a sliding window across the image. When you capture one - you use another NN, which is trained to estimate bubble size or volume (you probably can measure your air stream to train the NN). It is not so difficult as it sounds, and provides very high precision and adaptability.

P.S. Azure ML looks good as a free source of all the bells and whistles without need to go deep.

like image 37
Dmitry Nogin Avatar answered Sep 22 '22 14:09

Dmitry Nogin