Me gustaría reconocer los límites de un mosaico hexagonal en una fotografía, como en la imagen a continuación:
Me parece que un enfoque estándar en una cuadrícula cuadrada es detectar primero las esquinas (por ejemplo, canny) y luego extraer las líneas más largas a través de una transformación Hough o algo similar.
Esto no parece una solución óptima con mosaico hexagonal, porque la longitud de las líneas externas es más corta y es difícil separarlas de otras líneas.
¿Hay algún algoritmo para abordar este problema? Sería particularmente bueno tener una solución en opencv, pero también estoy interesado en ideas generales.
actualizar:
Con python y opencv pude recibir este resultado:
Aquí está mi código:
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);
La imagen laplaciana de la imagen se ve así:
Trataré de optimizar los parámetros de este enfoque y luego trataré de interpolar los límites de las cuatro secciones.