2008-09-25 73 views
16

Tôi có 3 điểm trong không gian 3D mà tôi biết chính xác vị trí. Giả sử chúng là: (x0,y0,z0), (x1,y1,z1)(x2,y2,z2).Ma trận chiếu 3d đến 2d

Ngoài ra tôi có máy ảnh đang xem 3 điểm này và tôi biết vị trí 2D của ba điểm đó trên mặt phẳng xem máy ảnh. Vì vậy, ví dụ: (x0,y0,z0) sẽ là (x0',y0')(x1,y1,z1) sẽ là (x1',y1')(x2,y2,z2) sẽ là (x2',y2') từ quan điểm của máy ảnh.

Cách dễ nhất để tìm ma trận chiếu sẽ chiếu các điểm 3D đó vào điểm 2D trên mặt phẳng xem máy ảnh là gì. Chúng tôi không biết gì về vị trí máy ảnh.

+0

Đây không phải là bài tập về nhà của tôi! –

Trả lời

12

này cung cấp cho bạn hai bộ, mỗi người trong số ba phương trình trong 3 biến:

a*x0+b*y0+c*z0 = x0' 
a*x1+b*y1+c*z1 = x1' 
a*x2+b*y2+c*z2 = x2' 

d*x0+e*y0+f*z0 = y0' 
d*x1+e*y1+f*z1 = y1' 
d*x2+e*y2+f*z2 = y2' 

Chỉ cần sử dụng bất cứ phương pháp giải phương trình đồng thời là đơn giản nhất trong tình huống của bạn (nó không phải là thậm chí khó có thể giải quyết những "bởi tay"). Sau đó ma trận biến đổi của bạn chỉ là ((a, b, c) (d, e, f)).

...

Thực tế, quá đơn giản và giả sử máy ảnh chỉ vào nguồn gốc của hệ tọa độ 3D và không có phối cảnh.

Đối với quan điểm, ma trận chuyển đổi hoạt động như hơn:

   (a, b, c, d) (xt) 
(x, y, z, 1) (e, f, g, h) = (yt) 
       (i, j, k, l) (zt) 

(xv, yv) = (xc+s*xt/zt, yc+s*yt/zt) if md < zt; 

nhưng ma trận 4x3 nhiều ràng buộc hơn 12 bậc tự do vì chúng ta nên có

a*a+b*b+c*c = e*e+f*f+g*g = i*i+j*j+k*k = 1 
a*a+e*e+i*i = b*b+f*f+j*j = c*c+g*g+k*k = 1 

Vì vậy, có lẽ bạn nên có 4 điểm để có được 8 phương trình để bao gồm 6 biến cho vị trí máy ảnh và góc và 1 hơn cho việc chia tỷ lệ các điểm xem 2-D vì chúng ta có thể loại bỏ tọa độ "trung tâm" (xc, yc).

Vì vậy, nếu bạn có 4 điểm và chuyển đổi điểm xem 2-D của bạn tương ứng với tâm của màn hình, bạn có thể nhận được 14 phương trình đồng thời trong 13 biến và giải.

Thật không may, sáu trong số các phương trình không phải là phương trình tuyến tính. May mắn thay, tất cả các biến trong các phương trình được giới hạn trong các giá trị giữa -1 và 1 vì vậy nó vẫn có thể khả thi để giải các phương trình.

+0

Giải pháp của bạn có lẽ là câu trả lời hay nhất tôi gặp phải trong vấn đề của mình. Vui lòng mô tả thêm một chút về phần thứ hai của giải pháp. những gì là xv và yv cũng md và zt và xt yt zt. Cảm ơn rất nhiều –

0

Tôi không nghĩ rằng có đủ thông tin để tìm giải pháp dứt khoát. Không biết vị trí camera của bạn và không biết mặt phẳng xem của bạn, có một số lượng ma trận vô hạn có thể giải quyết vấn đề này.

+0

Không, anh ấy có nghĩa là có vô số ma trận làm những gì bạn yêu cầu cho một tập hợp các điểm nhất định. Bạn cần nhiều điểm hơn hoặc ít tự do hơn (ví dụ: sửa lỗi FOV của máy ảnh) để sửa lỗi này. –

+0

tôi cần bao nhiêu điểm? –

+1

Nếu bạn biết mặt phẳng xem máy ảnh (khoảng cách Z từ máy ảnh), sử dụng các điểm, bạn có thể tìm ra vị trí của máy ảnh vì nó chỉ là giao điểm của 3 dòng. Từ đó, tôi nghĩ rằng các trục của ma trận có thể được tính toán. –

3

Máy ảnh của bạn có (ít nhất) 7 bậc tự do - 3 cho vị trí, 3 cho hướng và 1 cho FOV. Tôi chắc rằng ai đó sẽ sửa tôi nếu tôi sai, nhưng có vẻ như không đủ 3 điểm là đủ cho một giải pháp đầy đủ.

Để biết giải pháp tổng quát cho vấn đề này, tra cứu 'Xem Tương quan' trong Đồ họa Gems II.

+0

7 thường là chính xác, mặc dù một số hệ thống cho phép hai tham số cho FOV: dọc và ngang. Thông thường, chúng tỷ lệ thuận với nhau (ví dụ: tỷ lệ 4: 3 = 4: 3 FOV) nhưng trong một số trường hợp, điều này có thể bị lệch nếu người dùng muốn. –

2

Điều bạn đang tìm kiếm được gọi là thuật toán Pose Estimation. Hãy xem triển khai POSIT trong OpenCV: http://opencv.willowgarage.com/documentation/c/calib3d_camera_calibration_and_3d_reconstruction.html#posit

Bạn sẽ cần bốn điểm trở lên và chúng có thể không nằm trong cùng một mặt phẳng.

Một hướng dẫn để thực hiện điều này ở đây: http://opencv.willowgarage.com/wiki/Posit

Đỗ chăm sóc mặc dù: trong hướng dẫn một khung nhìn vuông được sử dụng, vì vậy tất cả xem tọa độ đang trong -1, -1 đến 1,1 phạm vi . Điều này dẫn đến giả thiết rằng chúng phải nằm trong hệ tọa độ camera (trước khi điều chỉnh tỷ lệ khía cạnh). Đây không phải là trường hợp, vì vậy nếu bạn sử dụng một chế độ xem với ví dụ: tỷ lệ co 4: 3 thì tọa độ đầu vào của bạn phải nằm trong khoảng -1.3333, -1 đến 1.3333,1. Bằng cách này, nếu số điểm của bạn phải nằm trong cùng một mặt phẳng, thì bạn cũng có thể xem thuật toán CameraCalibration từ OpenCV, nhưng điều này có liên quan nhiều hơn để thiết lập và yêu cầu nhiều điểm hơn làm đầu vào. Tuy nhiên nó cũng sẽ mang lại cho bạn thông tin méo mó và các thông số nội tại của máy ảnh của bạn.

Các vấn đề liên quan