Kifu: Go game record (kifu) generator

From ElphelWiki
Revision as of 23:38, 2 September 2008 by Luxigo (talk | contribs)
Jump to: navigation, search

Goban and Grid Detection:

1. The input image is filtered and thresholded and a big quadrilateral shape is selected, sorting contours detected with cvFindContours() from OpenCV.

Kifu region.jpg


2. The selection is rectified with cvGetPerspectiveTransform() and cvWarpPerspective().

Kifu rectify.jpg


3. cvHoughLines2() find lines in the rectified selection and we compute the intersections for each detected line segment.

Kifu intersections.jpg


4. The intersection is validated when the angle formed by the intersection point and the line extremities is near 90 degrees; and other detected intersections that are less distant than ~92% of the expected grid spacing are discarded.

Kifu intersections2.jpg


5. Intersections can be mapped back to the pre-warped coordinates and vote for the original point, and we restart at step 2 with the quadrilateral found with the next threshold value.


6. The grid map is built using original point vote results, missing intersections must be interpolated.


7. Finally, we can validate the grid, or restart at step 1 with another threshold, or rectify the image again with the exact grid corners coordinates known.


Image change detection:

Using vertical and horizontal RGB components sums of a thresholded difference between a reference image and the current one,

it is easy to compute the image coordinates of a played stone

Kifu threshold.jpg Kifu sums.jpg


Stone detection:

When a stone is played it overlaps 1 grid square on a corner, 2 on the borders and 4 in the center.

Computing horizontal and vertical pixel sums for each grid cell or around each intersection can tell where the stone is played and reveal the color of the stone, being darker or brighter than the empty intersection region.

The intersection can also be seen on the difference image when the stone is white, that could also be used to detect the stone color.




Methods for mapping the coordinates:


"2.2 Perspective transformation with two vanishing points" (pages 2 and 3, equations 7 and 10)

http://cipa.icomos.org/fileadmin/papers/potsdam/2001-21-gf01a.pdf


Inverse homography and plane image rectification (page 14)

http://www-prima.imag.fr/jlc/Courses/2002/DEA-IVR.VO/DEA-IVR.VO.S2.pdf


"Inferring Projective Mappings" (page 3)

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.9.7803

with related java and C source code here: http://www.developpez.net/forums/showthread.php?t=591698




Links:


irc://irc.freenode.net/#kifu


http://www.sourceforge.net/projects/kifu


http://opencvlibrary.sourceforge.net/


Photointerpretation and Small Scale Stereoplotting with Digitally Rectified Photographs with Geometrical constraints: http://cipa.icomos.org/fileadmin/papers/potsdam/2001-21-gf01a.pdf


Vision par Ordinateur: http://www-prima.imag.fr/jlc/Courses/2002/DEA-IVR.VO/DEA-IVR.VO.S2.pdf


Projective Mappings for Image Warping: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.9.7803


http://sciences.ch/htmlfr/geometrie/geometrieprojective01.php