# HG changeset patch # User Laman # Date 2019-01-07 00:53:24 # Node ID 6f867d8eac54e90da4ee47e57a9f04d1097c28e1 # Parent d91db8f7323326b7a4f4d3904938d0cebdf93433 exp: detecting grid with Hough transform diff --git a/exp/hough.py b/exp/hough.py new file mode 100644 --- /dev/null +++ b/exp/hough.py @@ -0,0 +1,92 @@ +import os +import sys + +import numpy as np +import cv2 as cv + +from annotations import DataFile,computeBoundingBox + + +def show(img,filename="x"): + cv.imshow(filename,img) + cv.waitKey(0) + cv.destroyAllWindows() + + +def filterVert(edges): + # !! cv.morphologyEx() + kernel = np.array([[1,0,1],[1,0,1],[1,0,1]],np.uint8) + edges = cv.erode(edges,kernel) + kernel=np.array([[0,1,0],[0,1,0],[0,1,0]],np.uint8) + edges=cv.dilate(edges,kernel) + return edges + +def filterHor(edges): + kernel = np.array([[1,1,1],[0,0,0],[1,1,1]],np.uint8) + edges = cv.erode(edges,kernel) + kernel=np.array([[0,0,0],[1,1,1],[0,0,0]],np.uint8) + edges=cv.dilate(edges,kernel) + return edges + +def filterDiag(edges): + kernel = np.array([[0,0,1],[1,0,0],[0,1,0]],np.uint8) + edges1 = cv.erode(edges,kernel) + kernel=np.array([[1,0,0],[0,1,0],[0,0,1]],np.uint8) + edges1=cv.dilate(edges1,kernel) + + kernel = np.array([[0,1,0],[1,0,0],[0,0,1]],np.uint8) + edges2 = cv.erode(edges,kernel) + kernel=np.array([[0,0,1],[0,1,0],[1,0,0]],np.uint8) + edges2=cv.dilate(edges2,kernel) + + return edges1+edges2 + + +i=sys.argv[1] +annotations=DataFile("/home/laman/Projekty/python/oneEye/images/annotations.json.gz") +filename="{0}.jpg".format(i) +img=cv.imread(os.path.join("/home/laman/Projekty/python/oneEye/images/",filename)) +(x1,y1,x2,y2)=computeBoundingBox(annotations[filename][0]) +img=img[y1:y2, x1:x2, :] +# blurred=cv.GaussianBlur(img,(5,5),0) +# small=cv.resize(img,None,fx=0.5,fy=0.5,interpolation=cv.INTER_AREA) +small=img +clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) +gray=cv.cvtColor(small,cv.COLOR_BGR2GRAY) +# gray=clahe.apply(gray) +show(gray) +edges=cv.Canny(gray,70,130) +show(edges) +edges=filterHor(edges)+filterVert(edges)+filterDiag(edges) +show(edges) + + +# kernel = np.ones((2,2),np.uint8) +# edges = cv.morphologyEx(edges, cv.MORPH_DILATE, kernel) +# show(edges) +# edges=cv.morphologyEx(edges,cv.MORPH_ERODE,kernel) +# show(edges) +colorEdges=cv.cvtColor(edges,cv.COLOR_GRAY2BGR) +# show(blurred) +# show(small) + +# lines = cv.HoughLines(edges,1,np.pi/180,200) +# if lines is None: lines=[] +# for line in lines: +# rho,theta = line[0] +# a = np.cos(theta) +# b = np.sin(theta) +# x0 = a*rho +# y0 = b*rho +# x1 = int(x0 + 1000*(-b)) +# y1 = int(y0 + 1000*(a)) +# x2 = int(x0 - 1000*(-b)) +# y2 = int(y0 - 1000*(a)) +# cv.line(colorEdges,(x1,y1),(x2,y2),(0,0,255),1) +lines = cv.HoughLinesP(edges,1,np.pi/180,80,minLineLength=50,maxLineGap=20) +if lines is None: lines=[] +for line in lines: + x1,y1,x2,y2 = line[0] + cv.line(colorEdges,(x1,y1),(x2,y2),(0,255,0),1) + +show(colorEdges)