Je voudrais reconnaître les limites d'un carrelage hexagonal sur une photo, comme dans l'image ci-dessous:
Il me semble qu'une approche standard sur une grille carrée consiste à détecter d'abord les coins (par exemple rusés) puis à extraire les lignes les plus longues via une transformation de Hough ou quelque chose de similaire.
Cela ne semble pas être une solution optimale avec le carrelage hexagonal, car la longueur des lignes extérieures est plus courte et il est difficile de les séparer des autres lignes.
Existe-t-il un algorithme pour résoudre ce problème? Ce serait particulièrement bien d'avoir une solution en opencv, mais je m'intéresse aussi aux idées générales.
mise à jour:
Avec python et opencv j'ai pu recevoir ce résultat:
Voici mon code:
import cv2
import numpy as np
imgOrig = "test1";
img = cv2.imread(imgOrig+".jpg");
lap = cv2.Laplacian(img, cv2.IPL_DEPTH_32F, ksize = 3)
imgray = cv2.cvtColor(lap,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
size = img.shape
m = np.zeros(size, dtype=np.uint8)
for i, cnt in enumerate(contours):
if cv2.contourArea(cnt) >= 1:
color = (255,255,255)
cv2.drawContours(m, cnt, -1, color, -1)
cv2.imwrite(str(imgOrig)+"contours.jpg", m);
Le laplacien de l'image ressemble à:
Je vais essayer d'optimiser les paramètres de cette approche et ensuite essayer d'interpoler les limites des quatre sections.