我想识别照片中六角形拼贴的边界,如下图所示:
在我看来,在正方形网格上的一种标准方法是首先检测角(例如Canny),然后通过霍夫变换或类似方法提取最长的线。
这看起来不是十六进制平铺的最佳解决方案,因为外线的长度较短,并且很难将其与其他线分开。
有解决这个问题的算法吗?在opencv中有解决方案会特别好,但是我也对一般想法感兴趣。
更新:
使用python和opencv我可以收到以下结果:
这是我的代码:
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);
图像的拉普拉斯像:
我将尝试优化此方法的参数,然后尝试对四个部分的边界进行插值。