Aşağıdaki resimde olduğu gibi bir fotoğraftaki altıgen döşemenin sınırlarını tanımak istiyorum:
Bana öyle geliyor ki, kare bir ızgarada standart bir yaklaşım, önce köşeleri (örn. Kutu) tespit etmek ve daha sonra en uzun çizgileri bir Hough dönüşümü veya benzeri bir şeyle çıkarmaktır .
Bu, altıgen döşemeyle en uygun çözüm olarak görünmemektedir, çünkü dış hatların uzunluğu daha kısadır ve bunları diğer hatlardan ayırmak zordur.
Bu sorunu çözmek için herhangi bir algoritma var mı? Opencv'de bir çözüme sahip olmak özellikle güzel olurdu, ancak genel fikirlerle de ilgileniyorum.
Güncelleme:
Python ve opencv ile bu sonucu alabildim:
İşte benim kod:
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);
Resmin Laplacian'ı şuna benzer:
Bu yaklaşımın parametrelerini optimize etmeye çalışacağım ve daha sonra dört bölümün sınırlarını enterpolasyon etmeye çalışacağım.