Tôi hiện đang có thiết lập camera âm thanh nổi. Tôi đã hiệu chuẩn cả hai máy ảnh và có ma trận nội tại cho cả hai máy ảnh K1
và K2
.Xoay và dịch từ Ma trận cơ bản không chính xác
K1 = [2297.311, 0, 319.498;
0, 2297.313, 239.499;
0, 0, 1];
K2 = [2297.304, 0, 319.508;
0, 2297.301, 239.514;
0, 0, 1];
Tôi cũng đã xác định ma trận cơ bản F
giữa hai máy ảnh sử dụng findFundamentalMat()
từ OpenCV. Tôi đã thử nghiệm ràng buộc Epipolar bằng cách sử dụng một cặp điểm tương ứng x1
và x2
(theo tọa độ pixel) và nó rất gần với 0
.
F = [5.672563368940768e-10, 6.265600996978877e-06, -0.00150188302445251;
6.766518121363063e-06, 4.758206104804563e-08, 0.05516598334827842;
-0.001627120880791009, -0.05934224611334332, 1];
x1 = 133,75
x2 = 124.661,67.6607
transpose(x2)*F*x1 = -0.0020
Từ F
tôi có thể để có được những Matrix Essential E
như E = K2'*F*K1
. Tôi phân tách E
bằng cách sử dụng hàm SVD MATLAB để có được 4 khả năng xoay và dịch của K2
đối với K1
.
E = transpose(K2)*F*K1;
svd(E);
[U,S,V] = svd(E);
diag_110 = [1 0 0; 0 1 0; 0 0 0];
newE = U*diag_110*transpose(V);
[U,S,V] = svd(newE); //Perform second decompose to get S=diag(1,1,0)
W = [0 -1 0; 1 0 0; 0 0 1];
R1 = U*W*transpose(V);
R2 = U*transpose(W)*transpose(V);
t1 = U(:,3); //norm = 1
t2 = -U(:,3); //norm = 1
Giả sử K1
được sử dụng làm khung tọa độ mà chúng tôi thực hiện tất cả các phép đo. Do đó, trung tâm của K1
là tại C1 = (0,0,0)
. Với điều này chúng ta có thể áp dụng đúng xoay R
và dịch t
mà C2 = R*(0,0,0)+t
(ví dụ: trung tâm của K2
được đo đối với các trung tâm của K1
với)
Bây giờ chúng ta hãy nói rằng việc sử dụng cặp tương ứng của tôi x1
và x2
. Nếu tôi biết độ dài của mỗi pixel trong cả hai máy ảnh của tôi và vì tôi biết độ dài tiêu cự từ ma trận nội tại, tôi có thể xác định hai vectơ v1
và v2
cho cả hai máy ảnh giao nhau tại cùng một điểm như bên dưới.
pixel_length = 7.4e-6; //in meters
focal_length = 17e-3; //in meters
dx1 = (133-319.5)*pixel_length; //x-distance from principal point of 640*480 image
dy1 = (75-239.5) *pixel_length; //y-distance from principal point of 640*480 image
v1 = [dx1 dy1 focal_length] - (0,0,0); //vector found using camera center and corresponding image point on the image plane
dx2 = (124.661-319.5)*pixel_length; //same idea
dy2 = (67.6607-239.5)*pixel_length; //same idea
v2 = R * ([dx2 dy2 focal_length] - (0,0,0)) + t; //apply R and t to measure v2 with respect to K1 frame
Với vector này và biết phương trình đường ở dạng tham số, sau đó chúng tôi có thể đánh đồng hai dòng để kiểm tra chéo và giải quyết hai vô hướng lượng s và t
thông qua chức năng chia tay trái trong MATLAB để giải quyết cho hệ thống của phương trình.
C1 + s*v1 = C2 + t*v2
C1-C2 = tranpose([v2 v1])*transpose([s t]) //solve Ax = B form system to find s and t
Với s
và t
xác định chúng ta có thể tìm thấy những điểm tam giác bằng cách cắm lại vào phương trình dòng. Tuy nhiên, quá trình của tôi đã không thành công vì tôi không thể tìm thấy giải pháp R
và t
trong đó điểm nằm ở phía trước cả hai máy ảnh và cả hai máy ảnh đều được hướng về phía trước.
Có vấn đề gì với quy trình suy nghĩ hoặc đường ống của tôi không? Có thể nào có được từng tia pixel riêng lẻ không?