Epipolar Geometry
Hình học epipolar mô tả mối quan hệ giữa hai góc nhìn của một cảnh, giới hạn điểm tương ứng của mỗi điểm trên ảnh kia vào một đường thẳng; đây là cơ sở của ước lượng độ sâu stereo và dựng bản đồ 3D.
Trong thị giác máy tính, hình học epipolar mô tả mối quan hệ hình học giữa hai góc nhìn camera của cùng một cảnh. Một pixel trong ảnh thứ nhất tương ứng với một tia gồm các điểm 3D khả dĩ; tia đó được chiếu lên ảnh thứ hai thành một đường thẳng — đường epipolar — nơi điểm tương ứng của pixel phải nằm trên đó. Ràng buộc này chỉ phụ thuộc vào các tham số nội tại của camera và tư thế tương đối, không phụ thuộc vào cấu trúc cảnh, đồng thời biến việc tìm điểm tương ứng từ tìm kiếm trên toàn ảnh thành tìm kiếm dọc theo một đường thẳng. Vì vậy, hình học epipolar là nền tảng của thị giác stereo, cấu trúc từ chuyển động và visual SLAM dẫn đường cho robot và kính thực tế ảo. Cuốn Multiple View Geometry in Computer Vision của Richard Hartley và Andrew Zisserman là tài liệu tham khảo tiêu chuẩn.
Epipole, đường epipolar và mặt phẳng epipolar#
Hai tâm camera và một điểm bất kỳ trong cảnh xác định một mặt phẳng, gọi là mặt phẳng epipolar. Đường nối hai tâm camera là baseline; đường này cắt mỗi mặt phẳng ảnh tại epipole, tức ảnh của tâm camera còn lại, có thể nằm ngoài khung hình hoặc ở vô cực. Mỗi mặt phẳng epipolar cắt mỗi ảnh theo một đường epipolar, còn gọi là epiline, nên mọi đường epipolar trong một ảnh đều đi qua epipole của ảnh đó. Khi điểm trong cảnh di chuyển dọc theo tia nhìn của camera thứ nhất, hình chiếu của điểm đó trong ảnh thứ hai di chuyển dọc theo đường epipolar.
Ma trận cơ bản và ma trận thiết yếu#
Ma trận cơ bản F, một ma trận 3 × 3 có hạng hai, nắm bắt toàn bộ mối quan hệ trong hệ tọa độ pixel. Với các điểm tương ứng x và x′ được biểu diễn dưới dạng tọa độ thuần nhất (x, y, 1), ràng buộc epipolar là x′ᵀ F x = 0, còn tích F x cho các hệ số của đường epipolar ứng với x trong ảnh thứ hai. Khi camera được hiệu chuẩn thông qua hiệu chuẩn camera, ma trận thiết yếu E = K′ᵀ F K biểu diễn cùng ràng buộc trong hệ tọa độ chuẩn hóa và phân tích thành phép quay tương đối R cùng phép tịnh tiến t dưới dạng E = [t]ₓ R. Christopher Longuet-Higgins giới thiệu ma trận thiết yếu và thuật toán tám điểm vào năm 1981; Olivier Faugeras, Quang-Tuan Luong và Richard Hartley phát triển ma trận cơ bản không hiệu chuẩn vào đầu những năm 1990. Vì E chỉ xác định hướng của t, chỉ hai góc nhìn không đủ để xác định tỷ lệ của hình dạng cảnh; cần biết baseline hoặc kích thước vật thể để xác định tỷ lệ.
Cả hai ma trận đều được ước lượng từ các keypoint khớp nhau, chẳng hạn như đặc trưng SIFT, bằng một bộ ước lượng vững chắc như RANSAC. Phương pháp này liên tục khớp ma trận với một mẫu khớp tối thiểu rồi giữ lại model được nhiều điểm khớp đồng thuận nhất. Ví dụ sau tạo hai góc nhìn của 100 điểm, thay 20 điểm khớp bằng các điểm sai ngẫu nhiên và ước lượng F bằng biến thể MAGSAC của RANSAC trong OpenCV:
import cv2
import numpy as np
rng = np.random.default_rng(0)
K = np.array([[800.0, 0, 320], [0, 800.0, 240], [0, 0, 1]]) # intrinsics shared by both cameras
# 100 scene points seen by two cameras; the second sits 0.5 m to the right, turned 5 degrees
points = rng.uniform([-2, -1, 4], [2, 1, 8], (100, 3))
rvec = np.array([0.0, np.radians(5), 0.0])
tvec = -cv2.Rodrigues(rvec)[0] @ np.array([0.5, 0.0, 0.0])
x1 = cv2.projectPoints(points, np.zeros(3), np.zeros(3), K, None)[0].reshape(-1, 2) + rng.normal(0, 0.5, (100, 2))
x2 = cv2.projectPoints(points, rvec, tvec, K, None)[0].reshape(-1, 2) + rng.normal(0, 0.5, (100, 2))
x2[:20] = rng.uniform([0, 0], [640, 480], (20, 2)) # replace 20 matches with wrong ones
# Robust estimation keeps the matches that agree with a single fundamental matrix
F, inliers = cv2.findFundamentalMat(x1, x2, cv2.USAC_MAGSAC, 1.0)
kept = inliers.ravel() == 1
print(f"Kept {kept[20:].sum()} of 80 true matches and {kept[:20].sum()} of 20 wrong ones")
# Each point in image 1 defines a line a*x + b*y + c = 0 in image 2 that its match must lie on
lines = cv2.computeCorrespondEpilines(x1, 1, F).reshape(-1, 3)
dist = np.abs((lines[:, :2] * x2).sum(axis=1) + lines[:, 2])
print(f"Median distance to epipolar line: {np.median(dist[20:]):.2f} px (true), {np.median(dist[:20]):.0f} px (wrong)")
print(f"Wrong match that survived: {dist[:20][kept[:20]].round(2)} px from its line")Phương pháp này giữ lại 75 trong số 80 điểm khớp đúng và loại bỏ 19 trong số 20 điểm khớp sai. Trung vị khoảng cách từ các điểm khớp đúng đến đường epipolar là 0,43 pixel, do nhiễu nửa pixel; với các điểm sai, khoảng cách là 144 pixel. Điểm khớp sai duy nhất còn sót lại tình cờ nằm cách đường của nó 0,61 pixel, vì ràng buộc giới hạn điểm khớp trên một đường thẳng và chỉ đặc trưng hình ảnh mới có thể chọn đúng điểm dọc theo đường đó.
Phép quay thuần túy không có baseline, còn một mặt phẳng duy nhất có thể phù hợp như nhau với nhiều ma trận cơ bản; do đó, cả hai trường hợp đều được xử lý bằng homography, ma trận 3 × 3 ánh xạ giữa các góc nhìn của một mặt phẳng. ORB-SLAM khởi tạo bản đồ bằng cách khớp đồng thời homography và ma trận cơ bản, sau đó giữ lại ma trận giải thích các điểm khớp tốt hơn.
Chỉnh ảnh, disparity và độ sâu#
Chỉnh ảnh biến đổi một cặp ảnh stereo sao cho các đường epipolar nằm ngang và thẳng hàng, đưa mọi cặp điểm tương ứng về cùng một hàng ảnh. Sau đó, bộ so khớp stereo tìm kiếm trên từng hàng; độ lệch cột giữa các điểm tương ứng, gọi là disparity d, cho độ sâu Z = f × B / d với tiêu cự f và baseline B, qua đó các hệ thống stereo tạo ra bản đồ ước lượng độ sâu. Benchmark stereo KITTI chấm điểm các bộ so khớp như vậy trên những cảnh đã chỉnh ảnh từ lái xe tự hành.
Ứng dụng ngoài stereo#
Trong tái tạo 3D, COLMAP xác minh từng cặp ảnh bằng cách khớp ma trận cơ bản, ma trận thiết yếu hoặc homography, rồi loại bỏ các cặp và điểm khớp không có đủ bằng chứng hình học. Các pipeline khớp ảnh cũng dùng phép kiểm tra này để loại bỏ các điểm tương ứng sai; đăng ký ảnh sử dụng nhánh homography nêu trên khi cảnh phẳng hoặc camera chỉ quay, như trong ghép ảnh panorama. Giữa hai khung hình từ một camera đang chuyển động, ràng buộc epipolar chỉ đúng với các bề mặt tĩnh, vì vậy các vector luồng quang học vi phạm ràng buộc này cho thấy các vật thể chuyển động độc lập. Khi ghi hình đa camera tư thế người, hệ thống xác định cùng một người giữa các góc nhìn bằng cách kiểm tra mức độ gần nhau của các khớp với đường epipolar tương ứng trước khi tam giác hóa bộ xương 3D; một model ước lượng tư thế Ultralytics YOLO26 cung cấp 17 keypoint cơ thể COCO cho mỗi người trong từng góc nhìn.










