diff --git a/exp/board_detect.py b/exp/board_detect.py --- a/exp/board_detect.py +++ b/exp/board_detect.py @@ -3,7 +3,6 @@ import sys sys.path.append("../src") import os -import math import random import itertools import logging as log @@ -15,6 +14,7 @@ import scipy.ndimage import scipy.signal from geometry import Line +from ransac import DiagonalRansac from annotations import DataFile,computeBoundingBox from hough import show,prepareEdgeImg,HoughTransform from analyzer.epoint import EPoint @@ -125,6 +125,16 @@ class BoardDetector: transformed=cv.warpPerspective(rect,matrix,(self._rectW,self._rectH)) # determine precise board edges + intersections=[] + for p in lines[0]: + for q in lines[1]: + intersections.append(p.intersect(q)) + sack=DiagonalRansac(intersections,19) + diagonals=sack.extract(10,2000) + log.debug("diagonals candidates: %s",diagonals) + for line in diagonals: + self._drawLine(linesImg,line,[0,255,255]) + show(linesImg,"diagonals candidates") def _detectRough(self,img,filename): corners=self._annotations[filename][0] @@ -191,7 +201,8 @@ class BoardDetector: return matrix - def _drawLine(self,img,line): + def _drawLine(self,img,line,color=None): + if not color: color=[0,255,0] (h,w)=img.shape[:2] corners=[EPoint(0,0),EPoint(w,0),EPoint(0,h),EPoint(w,h)] # NW NE SW SE borders=[ @@ -207,7 +218,7 @@ class BoardDetector: if any(abs(x)>10**5 for x in [*a,*b]): log.debug("ignored") return - cv.line(img,(int(a.x),int(a.y)),(int(b.x),int(b.y)),[0,255,0]) + cv.line(img,(int(a.x),int(a.y)),(int(b.x),int(b.y)),color) if __name__=="__main__":