In my webcam playing-card image recognizer, I am trying to set a threshold
that depends on the amount of ambient lighting on the playing cards. If the
threshold is set well than I can better distinguish between the card suits
and pips. The threshold is a number between 0 and 255 and my experience has
seen it between 100 and 180. But I have no algorithm to get a best value,
only an eyeballed acceptable value.

My idea is to present the webcam with any card with the diamond suit and to
search for a threshold value that produces the best diamond (during the
setup period of the app usage, and then to leave the threshold value alone
later).

The image is always inside a boolean array of shape 30 26. The center of
the array always is inside the diamond image but that's about the only
known fact, because the image can be off-center slightly and even tilted
slightly and the size of the diamond in the image is unknown. If the
threshold is set too high the boolean image is all 1s, if the threshold is
set too low, the boolean image is all 0s. (The diamond suit is easiest to
use because of its relatively regular shape on almost any card deck.)

The two examples below are meant to show a dirty diamond and a very clean
diamond. The clean example has no holes of 0s internal to the external
perimeter of the diamond. I cannot guarantee that every image can be
captured with a perfectly clean diamond, so I would sort of like to find
the threshold that produces the diamond with the greatest number of
contiguous 1's, sort of. I feel as if there is likely to be a gradual
increase in the number of contiguous 1's in the sweetspot range of the
threshold value, but I'm not sure of this.

I am open to other ideas for accomplishing this thresholding, btw. But
mostly I am looking for J code ideas.

You may be able to copy and paste each example from this email. I suppose I
could

00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000100000000000
00000000000001110000000000
00000000000001110000000000
00000000000011111000000000
00000000000111111100000000
00000000000111101100000000
00000000001111111110000000
00000000011111111100000000
00000000111111111111100000
00000001111111111111010000
00000011111111111111010000
00000101111111111110011100
00001111011110110101011100
00000111111111111111110000
00000011110011100101100000
00000001111111111101100000
00000001111111110100000000
00000000011111110110000000
00000000010101010000000000
00000000000010110000000000
00000000000110111000000000
00000000000110110000000000
00000000000010100000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000

00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000100000000000
00000000000001110000000000
00000000000001111000000000
00000000000011111000000000
00000000000111111100000000
00000000001111111100000000
00000000011111111111000000
00000000011111111111000000
00000001111111111111100000
00000001111111111111110000
00000011111111111111111100
00000111111111111111111100
00001111111111111111111100
00001111111111111111111000
00000111111111111111110000
00000011111111111111100000
00000001111111111111000000
00000000111111111110000000
00000000011111111100000000
00000000001111111100000000
00000000000111111000000000
00000000000111110000000000
00000000000011110000000000
00000000000011100000000000
00000000000001000000000000
00000000000001000000000000
00000000000000000000000000


Thanks,


-- 
(B=) <-----my sig
Brian Schott
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to