A problem I had originally discussed here has evolved, and might have gotten a little simpler as I studied it in some more and attained new information.
Bottom line, I would like to be able to detect this pattern shown here, using computer-vision/image-processing techniques. As you can see, the ideal pattern is made up of four 'pings'. The object-recognition should be:
- Shift Invariant
- Horizontally, the image will be cyclical. (ie, Push to the right, comes out on the left, and vice-versa).
- (Fortunately) Vertically, it is not cyclical. (ie,Push to either top or bottom and it will stop).
- Scale Invariant (The pings can vary in 'thickness' as you can see.)
I could go on and on about it but I have attached images covering what I mean, please see below:
Of course, they can also be at a different 'scale', as can be seen from this family:
And finally, here are some 'realistic' scenarios of what I might actually receive, where there would be noise, the rows might 'fade' as you go towards the bottom, and of course, the image will have plenty of spurious lines, artifacts, etc.
And of course, as a grand finale, there is the distinct possibility of this 'extreme' scenario:
So once again, I would like to ask for some guidance on what computer-machine-vision techniques I should utilize here in order to best detect the occurance of my pattern, where I need to be shift and scale invariant as you can see, and also be able to get decent results for the realistic scenarios. (Good news is that I DONT need it to be rotationaly invariant). Only idea I have been able to come up with thus far is a 2-D correlation.
I should add, that in reality, I do NOT have colored images - I will just get a martix of numbers, so I suppose we are talking about 'greyscale'.
Thanks in advance!
P.S. For what its worth I will probably be using open C V.
EDIT # 1:
Based on the comments, I have added the details you requested here:
For characteristics defining the data, we can assume the following:
Horizontal length of each ping can vary, but I know the upper and lower bounds of it. YES for anything within this bound, NO for anything outside. (Example, I know the length of the pings can be anywhere between 1 and 3 seconds, for example).
All pings need to be 'visible' for YES, however, last row can be missing, and still want to say 'YES'. Otherwise NO.
Vertical length, (the 'thickness') of each ping can vary, but again, also know upper and lower bound. (Similar to what you see in those images). YES for anything within that bound. NO for anything outside.
Height between each ping should always be the same for YES. If they are not, then NO. (Example, you can see how all the pings are of the same height relative to each other, ~110 on the vertical axis). So so 110 +/- 5 can be a YES, anything else has to be NO.
I think thats about it - but let me know what else I can add... (Also, everything shown here should register as a YES, btw).