Ich möchte die Grenzen einer sechseckigen Kachelung auf einem Foto erkennen, wie im folgenden Bild:
Es scheint mir, dass ein Standardansatz bei einem quadratischen Raster darin besteht, zuerst Ecken (z. B. canny) zu erkennen und dann die längsten Linien über eine Hough-Transformation oder ähnliches zu extrahieren .
Dies ist bei Hex-Kacheln keine optimale Lösung, da die Länge der äußeren Linien kürzer ist und es schwierig ist, sie von anderen Linien zu trennen.
Gibt es einen Algorithmus, um dieses Problem zu beheben? Es wäre besonders schön, eine Lösung in opencv zu haben, aber ich interessiere mich auch für allgemeine Ideen.
aktualisieren:
Mit Python und OpenCV konnte ich dieses Ergebnis erhalten:
Hier ist mein 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);
Der Laplace-Wert des Bildes sieht folgendermaßen aus:
Ich werde versuchen, die Parameter dieses Ansatzes zu optimieren und dann die Grenzen der vier Abschnitte zu interpolieren.