Here's the example image:
Octave has plenty of image processing functions in the
imagepackage from Octave Forge. Here's the edges detected with the built-in
Now we need to perform a smart correlation with the gauge needles so we can map the angle of the needle to a decimal value in [0,10). One way to do it would be to zoom in on the center of the gauge:
Then we can perform a simple least squares regression on the non-zero pixel locations to get a rough estimate of the "slope" of the needle.
needleI = pngread( "needle.png" );
[i,j] = find(needleI(1:35,1:35));
y = 40-j;
x = i;
X = [ ones(length(x),1), x ];
A = X'*X;
b = (X')*y;
beta = A\b;
For the first needle pictured above we get a slope of -0.19643. This seems a tad low, so we probably need to correct for the slant in the original image.
Octave script with all the calculations demonstrated above.
Also check out this book or this page for lots of image processing examples in MATLAB/Octave.