Files @ c842bba99503
Branch filter:

Location: OneEye/src/image_analyzer.py

Laman
rectangle representation of input intersections
from go import *


class ImageAnalyzer:
  
  def __init__(self):
    self.board=[[Go.EMPTY]*19 for r in range(19)]
    self.grid=None
  
  def analyze(self,image,tresB,tresW,sizeCoef,shift):
    if self.grid==None: return False
    
    for r in range(19):
      for c in range(19):
        intersection=self.grid.intersections[r][c]
        
        self.board[r][c]=self.analyzePoint(image,intersection*sizeCoef+shift,*(self.grid.stoneSizeAt(r,c,sizeCoef)),tresB,tresW)
  
  def analyzePoint(self,image,imageCoords,stoneWidth,stoneHeight,tresB,tresW):
    b=w=e=0

    ((x1,y1),(x2,y2))=self.relevantRect(imageCoords,stoneWidth,stoneHeight)

    for y in range(y1,y2+1):
      for x in range(x1,x2+1):
        red,green,blue=image.getpixel((x,y))
        
        I=(red+green+blue)/255/3
        m=min(red,green,blue)
        S=1-m/I
        if 100*I<tresB: b+=1
        elif 100*I>tresW: w+=1
        else: e+=1
        
    if b>=w and b>=e: return Go.BLACK
    if w>=b and w>=e: return Go.WHITE
    return Go.EMPTY

  def relevantRect(self,imageCoords,stoneWidth,stoneHeight):
    x=int(imageCoords.x)
    y=int(imageCoords.y)
    xmax=max(int(stoneWidth*2//7), 2) # !! optimal parameters subject to further research
    ymax=max(int(stoneHeight*2//7), 2)

    return ((x-xmax,y-ymax), (x+xmax,y+ymax))
    
  def setGrid(self,grid):
    self.grid=grid