Gostaria de reconhecer os limites de uma telha hexagonal em uma fotografia, como na imagem abaixo:
Parece-me que uma abordagem padrão em uma grade quadrada é primeiro detectar cantos (por exemplo, canny) e depois extrair as linhas mais longas por meio de uma transformada de Hough ou algo semelhante.
Isso não parece a solução ideal com o revestimento hexagonal, porque o comprimento das linhas externas é mais curto e é difícil separá-las de outras linhas.
Existe algum algoritmo para resolver esse problema? Seria particularmente bom ter uma solução em opencv, mas também estou interessado em idéias gerais.
atualizar:
Com python e opencv, eu pude receber este resultado:
Aqui está o meu 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);
Laplaciano da imagem se parece com:
Vou tentar otimizar os parâmetros dessa abordagem e depois tentar interpolar os limites das quatro seções.