I want to quantify the flow from photos taken from a sensor such as this one:

For a limited number of readings, I can use a plot digitization method. However, I need to do this many times for hundreds of photos to construct the flow as a function of time. The location of the sensor is somewhat challenging, so I can’t use a camera stand either (meaning the position of min and max are probably not constant in time due to hand held recording device). Therefore, I am trying to make this process automated. The location of the top of the ball with respect to the scale is what I am looking for. The approach I have in mind follows, but if anyone can suggest a better approach that would be even more appreciated.

I imported the image and called it `img1`

. Then I binarized it:

`bin = Binarize[img1, 0.3] `

Then I negated the image and cleaned it up slightly:

`cleanup = DeleteSmallComponents[ColorNegate@bin, 50] `

MMA’s text recognition doesn’t seem to be working with these numbers, so I gave up trying to use it. However, after many tests I found `MorphologicalPerimeter`

quite useful:

`HighlightImage[img1, MorphologicalPerimeter[cleanup]] `

Also, I found out these thresholds can isolate the scale:

`SelectComponents[cleanup, #Elongation > .4 && #AdjacentBorderCount == 0 &] `

and for the ball:

`DeleteSmallComponents[cleanup, 1500] `

However, now I am stuck. I don’t know how to construct a tangent on top of the ball and determine where it lands on the scale e.g. where it intersects the line connecting the middle of indicators for 0.1 and 1.0.