Difference between revisions of "Kifu: Go game record (kifu) generator"

From ElphelWiki
Jump to: navigation, search
Line 1: Line 1:
'''Image change detection:'''  
+
'''Goban and Grid Detection:'''
  
Using vertical and horizontal RGB components sums of a thresholded difference between a reference image and the current one,
+
1. The input image is filtered and thresholded and a big quadrilateral shape containing many smaller quadrilaterals is selected, sorting contours detected with OpenCV.
  
it is easy to compute the screen coordinates of a played stone
+
2. The selection is redressed using a perspective correction matrix that OpenCV can also compute,
  
 +
3. OpenCV find lines in the redressed selection and we compute the intersections for each detected line segment.
  
'''Geometric projection:'''
+
4. After, we round the results to group close neighbour points, and compute or approximate the center of each group (ie: intersection).
  
It is necessary to map each point from a reference rectangle to a point in the displayed shape, or vice-versa,
+
5. Finally we can verify the intersection count and relative alignment to validate the region or restart at step 1 with another threshold
  
without considering scene, camera or observer parameters.
 
  
The only data available are the corner coordinates on the projection plane
+
'''Image change detection:'''
and the reference rectangle proportions.
 
  
 +
Using vertical and horizontal RGB components sums of a thresholded difference between a reference image and the current one,
  
'''Grid intersection detection:'''
+
it is easy to compute the screen coordinates of a played stone
 
 
As the camera has not been calibrated, and the corner coordinates are detected from image change,
 
 
 
the projected coordinates will be somewhat approximative.
 
 
 
 
 
So it is necessary to detect the nearest grid intersection for each computed grid point.
 
 
 
 
 
Using the accumulative algorithm described above on a square portion of the rectifed image
 
 
 
around the computed intersection should be sufficient, but the result is maybe be more exact
 
 
 
doing line detection on the square edges to compute the intersection using line geometry laws.
 
 
 
 
 
With a 5x5 convolution filter like this one:
 
 
-1 0 -1 0 -1,
 
0 -1 -1 -1 0,
 
-1 -1 16 -1 -1,
 
0 -1 -1 -1 0,
 
-1 0 -1 0 -1
 
 
 
ie with -1 in the four directions and something >= 16 in the center,
 
 
 
it seems also possible to detect the grid intersections or presence,
 
 
 
doing a local accumulative maxima detection after applying the convolution filter
 
 
 
on the negative image and filtering out points that are not aligned.
 
 
 
 
 
Using the resulting grid(s) and the real size or proportions of the object(s) in the scene,
 
 
 
maybe it becomes possible to calibrate the camera with Tsai algorithms or others.
 
  
  
Line 59: Line 23:
 
When a stone is played it overlaps 1 grid square on a corner, 2 on the borders and 4 in the center.
 
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 can tell on which intersection
+
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,
the stone is played and reveal the color of the stone, being darker or brighter than before.
+
being darker or brighter than the empty intersection.
  
  

Revision as of 12:58, 18 August 2008

Goban and Grid Detection:

1. The input image is filtered and thresholded and a big quadrilateral shape containing many smaller quadrilaterals is selected, sorting contours detected with OpenCV.

2. The selection is redressed using a perspective correction matrix that OpenCV can also compute,

3. OpenCV find lines in the redressed selection and we compute the intersections for each detected line segment.

4. After, we round the results to group close neighbour points, and compute or approximate the center of each group (ie: intersection).

5. Finally we can verify the intersection count and relative alignment to validate the region or restart at step 1 with another threshold


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 screen coordinates of a played stone


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.




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

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