2013-02-22 91 views
11

Tôi đang sử dụng hai hình ảnh của một đối tượng duy nhất đối tượng được xoay một mức độ nhất định từ hình ảnh đầu tiên của nó.Cách tính góc từ ma trận xoay

Tôi đã tính toán POSE của mỗi hình ảnh và chuyển đổi vectơ quay thành Ma trận bằng Rodergues(). Bây giờ làm thế nào để tính toán và xem nó được xoay bao nhiêu từ vị trí đầu tiên của nó?

Tôi đã thử nhiều cách nhưng câu trả lời là không được đóng

CHỈNH SỬA: Máy ảnh của tôi chỉ được cố định đối tượng đang di chuyển.

Trả lời

26

Chúng tôi có thể lấy góc euler từ ma trận xoay bằng công thức sau.

Cho một ma trận 3 × 3 xoay

enter image description here

Các góc độ 3 Euler là

enter image description here

enter image description here

enter image description here

Ở đây atan2 là hàm tiếp tuyến tiếp tuyến, với kiểm tra góc phần tư, bạn thường thấy trong C hoặc Matlab.

Lưu ý: Phải cẩn thận nếu góc xung quanh trục y chính xác là +/- 90 °. Trong trường hợp đó, tất cả các phần tử trong cột đầu tiên và hàng cuối cùng, ngoại trừ phần tử ở góc dưới, là 1 hoặc -1, sẽ là 0 (cos (1) = 0). Một giải pháp là sửa chữa vòng quay quanh trục x ở 180 ° và tính toán góc xung quanh trục z từ: atan2 (r_12, -r_22).

Xem thêm http://www.soi.city.ac.uk/~sbbh653/publications/euler.pdf

+1

Cảm ơn bạn rất nhiều vì đã giúp đỡ của bạn .. +1 –

+0

Có cách nào để xác định thứ tự các phép quay nào phải được áp dụng để đạt được ma trận này không? –

7

Nếu R là (3x3) ma trận luân chuyển, sau đó các góc quay sẽ acos ((tr (R) -1)/2), nơi tr (R) là dấu vết của ma trận (tức là tổng của các phần tử đường chéo).

Đó là những gì bạn đã yêu cầu; Tôi ước tính một cơ hội 90% rằng nó không phải là những gì bạn muốn.

+0

điều này cung cấp cho chính xác một giá trị vô hướng tương ứng với góc xoay dọc theo ** trục nào **? –

+1

@SaravanabalagiRamachandran: Dĩ nhiên, bản chất riêng của ma trận. Chỉ cần giải quyết (** R ** - ** I **) X = 0 cho X (trong đó X và 0 là vectơ). – Beta

0

Hãy R1c và R2c là ma trận xoay 2 bạn đã tính toán. Chúng thể hiện các phép quay từ đối tượng ở vị trí 1 và 2 tương ứng với khung máy ảnh (do đó hậu tố c thứ hai). Ma trận xoay bạn muốn là từ tư thế 1 đến tư thế 2, tức là R12. Để tính toán nó, bạn phải xoay, trong tâm trí của bạn, đối tượng từ pose_1-to-camera, sau đó từ camera-to-pose_2. Vòng xoay thứ hai là nghịch đảo của camera pose_2-to-espressed bởi R2c, do đó:

R12 = R1c * inv(R2c)

Từ ma trận R12 sau đó bạn có thể tính toán góc và trục quay sử dụng công thức Rodiguez của.

1

Đối với các bạn tham khảo, mã này tính toán Góc Euler trong MATLAB:

function Eul = RotMat2Euler(R) 

if R(1,3) == 1 | R(1,3) == -1 
    %special case 
    E3 = 0; %set arbitrarily 
    dlta = atan2(R(1,2),R(1,3)); 
    if R(1,3) == -1 
    E2 = pi/2; 
    E1 = E3 + dlta; 
    else 
    E2 = -pi/2; 
    E1 = -E3 + dlta; 
    end 
else 
    E2 = - asin(R(1,3)); 
    E1 = atan2(R(2,3)/cos(E2), R(3,3)/cos(E2)); 
    E3 = atan2(R(1,2)/cos(E2), R(1,1)/cos(E2)); 
end 

Eul = [E1 E2 E3]; 

Mã được cung cấp bởi Graham Taylor, Geoff Hinton và Sam Roweis.Để biết thêm thông tin, hãy xem here

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