Liên kết giữa các homography được tính toán trên 2 hình ảnh và homography được tính toán trên cùng một hình ảnh lộn ngược là gì?


9

Với OpenCV , tôi tính toán đồng nhất giữa hai hình ảnh này:

hình ảnh đầu tiên

hình ảnh thứ hai

Đừng lo lắng về hình thức màu trắng kỳ lạ ở phía bên phải, đó là do người giữ điện thoại thông minh tôi sử dụng. Homography , được cung cấp bởi hàm findHomography () (sử dụng các điểm được phát hiện bằng trình phát hiện tính năng nhanh và trình so khớp mô tả HammingLUT ), là:

A = [ 1.412817430564191,  0.0684947165270289,  -517.7751355800591;
     -0.002927297251810,  1.210310757993256,     39.56631316477566;
      0.000290600259844, -9.348301989015293e-05,  1]

Bây giờ, tôi sử dụng quá trình tương tự để tính homography giữa những hình ảnh tương tự đã được xoay 180 độ (upside down), sử dụng ImageMagick (như là một vấn đề của thực tế, tôi sẽ không kém quan tâm để biết mối quan hệ đối với chuyển động quay của 90 hoặc 270 độ ...). Họ đây rồi:

hình ảnh đầu tiên lộn ngược

hình ảnh thứ hai lộn ngược

Với những hình ảnh này, homography trở thành:

B = [ 0.7148688519736168,  0.01978048500375845,  325.8330631554814;
     -0.1706219498833541,  0.8666521745094313,    64.72944905752504;
     -0.0002078857275647, -5.080048486810413e-05,  1]

Bây giờ, câu hỏi là làm thế nào để bạn liên quan đến A và B? Hai giá trị đường chéo đầu tiên của A gần với nghịch đảo của B, nhưng nó không chính xác lắm (.707805537 thay vì 0.71486885). Mục đích cuối cùng của tôi là sử dụng mối quan hệ mong muốn để biến đổi ma trận cuối cùng, tránh để tính toán xoay hình ảnh tốn kém.

Câu trả lời:


4

Tôi nghĩ rằng khi nhìn vào công thức của ma trận homography: trong đó là ma trận xoay mà được xoay trong mối quan hệ với ; là vectơ dịch từ đến ; và là vectơ bình thường của mặt phẳng và khoảng cách đến mặt phẳng (xem phương trình Homography-3D với mặt phẳng ). Rbatabnd

Hba=RtnTd
Rbmộttmộtbnd

Mối quan hệ giữa hai ma trận nằm trong vectơ bình thường của mặt phẳng. Vì vậy, bạn cần lấy vectơ bình thường của mặt phẳng (ra khỏi ma trận homography), và áp dụng phép quay cho nó, sau đó tính toán ma trận homography bằng công thức trên. Để phân tách chính xác ma trận homography, bạn có thể xem các mẫu mã nàybài báo này .


Tôi không thực sự hiểu ý bạn. Từ phương trình, tôi đã nhận được bình thường với Mat invT = 1./t; Mat n = invT.t() * (H - R);(thực tế, nó n/d). Bây giờ, "áp dụng phép quay cho nó" cho tôi một vectơ 3x1, nhưng làm thế nào tôi có thể sử dụng nó để tính lại ma trận homography? Cảm ơn
Stéphane Péchard

Thêm thông tin, hy vọng rằng làm cho nó rõ ràng.
Geerten

tại sao nó - t / d và không + t / d?
Maystro
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.