以下の画像のように、写真の六角形のタイルの境界を認識したいと思います。
正方形のグリッドでの標準的なアプローチは、最初にコーナー(例:キャニー)を検出し、次にハフ変換などを使用して最も長い線を抽出することです。
これは、外側の線の長さが短く、他の線と区別するのが難しいため、16進タイリングでは最適なソリューションではありません。
この問題を解決するアルゴリズムはありますか?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);
画像のラプラシアンは次のようになります。
このアプローチのパラメーターを最適化してから、4つのセクションの境界を補間しようとします。