2014-09-04 15 views
8

Tôi đang cố gắng tính toán tỷ lệ, xoay và dịch giữa hai khung hình liên tiếp của video. Vì vậy, về cơ bản tôi đã khớp các điểm chính và sau đó sử dụng chức năng opencv findHomography() để tính ma trận homography.
homography = findHomography(feature1 , feature2 , CV_RANSAC); //feature1 and feature2 are matched keypointsTính tỷ lệ, xoay vòng và dịch từ ma trận Homography

Câu hỏi của tôi là: Làm cách nào để sử dụng ma trận này để tính toán tỷ lệ, xoay và dịch ?.
Có ai có thể cung cấp cho tôi mã hoặc giải thích về cách thực hiện không?

+1

từ khóa là "phân tích homography". Afair bạn có thể trích xuất vòng quay với phân tích QR, nhưng bạn nên google tốt hơn ... – Micka

+1

có thể cái này (hoặc liên kết của nó) sẽ giúp: http://stackoverflow.com/questions/15420693/how-to-get- rotation-translation-shear-from-a-3x3-homography-ma trận-in-c-sharp – Micka

+1

và cái này =) http://hal.archives-ouvertes.fr/docs/00/17/47/39/PDF /RR-6303.pdf – Micka

Trả lời

0

Để ước lượng một cây chiều chuyển và luân chuyển gây ra bởi một homography, có tồn tại nhiều cách tiếp cận. One of them cung cấp các công thức khép kín để phân tách homography, nhưng chúng rất phức tạp. Ngoài ra, các giải pháp không bao giờ là duy nhất.

May mắn thay, OpenCV 3 đã triển khai sự phân hủy này (decomposeHomographyMat). Với một homography và ma trận nội tại được thu nhỏ một cách chính xác, hàm này cung cấp một bộ bốn phép quay và bản dịch có thể.

1

Giả sử rằng các tế bào đầu tiên và thứ hai của hàng thứ ba là 0.

Cột thứ ba của ma trận chứa dịch trong X, dịch thuật trong Y và 1, tương ứng.

Đối với phần còn lại trên cùng 2x2 của ma trận homography (có chứa cắt, chia tỷ lệ và xoay vòng), nó có thể được phân tách theo các phương pháp khác nhau. Một cách dễ dàng và nhanh chóng được giải thích ở đây (phương pháp này giả định ma trận nghịch đảo): https://math.stackexchange.com/questions/78137/decomposition-of-a-nonsquare-affine-matrix

+0

Bản dịch trong 3D không thể khôi phục hoàn toàn. – Vlad

0

Câu trả lời đúng là sử dụng Homography khi nó được định nghĩa dst = H. src và khám phá những gì nó làm cho các phân đoạn nhỏ xung quanh một điểm cụ thể. Để dịch, chỉ cần chọn một điểm duy nhất: Dịch = dst-H .src Để quay khám phá hai điểm p1 và p2. p1 '= H. p1, p2 '= H. p2. Bây giờ chỉ cần tính toán góc giữa các vector p1 p2 và p1'p2 '. Đối với quy mô, bạn có thể sử dụng cùng một thủ thuật nhưng bây giờ chỉ cần so sánh chiều dài của | p1 p2 | và | p1'p2 '|. Để giá vé sử dụng một phân khúc trực giao khác với kết quả đầu tiên và trung bình. Bạn sẽ thấy rằng không có yếu tố tỷ lệ không đổi hoặc bản dịch. Chúng sẽ phụ thuộc vào vị trí src.

0

Câu hỏi có vẻ là về tham số 2D. Ma trận Homography nắm bắt méo hình. Nếu ứng dụng không tạo ra nhiều méo mó quan điểm, người ta có thể ước tính một phép biến đổi thế giới thực bằng ma trận biến đổi afin (chỉ sử dụng quy mô, xoay vòng, dịch và không cắt/lật). Liên kết sau đây sẽ đưa ra một ý tưởng về việc phân tích một biến đổi affine thành các tham số khác nhau.

https://math.stackexchange.com/questions/612006/decomposing-an-affine-transformation

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