Tôi muốn nhận ra ranh giới của một hình lục giác trong một bức ảnh, như trong hình dưới đây:
Dường như đối với tôi, một cách tiếp cận tiêu chuẩn ở lưới ô vuông là trước tiên phát hiện các góc (ví dụ canny) và sau đó trích xuất các dòng dài nhất thông qua một biến đổi Hough hoặc một cái gì đó tương tự.
Đây không phải là giải pháp tối ưu với ốp lát hex, bởi vì độ dài của các đường bên ngoài ngắn hơn và thật khó để tách chúng khỏi các đường khác.
Có bất kỳ thuật toán để giải quyết vấn đề này? Sẽ rất tốt nếu có một giải pháp trong opencv, nhưng tôi cũng quan tâm đến những ý tưởng chung.
cập nhật:
Với python và opencv tôi đã có thể nhận được kết quả này:
Đây là mã của tôi:
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);
Laplacian của hình ảnh trông giống như:
Tôi sẽ cố gắng tối ưu hóa các tham số của phương pháp này và sau đó cố gắng nội suy các ranh giới của bốn phần.