Từng bước ước tính đặt camera cho theo dõi trực quan và đánh dấu phẳng


21

Tôi đã làm việc về chủ đề ước tính tư thế máy ảnh cho các ứng dụng theo dõi trực quan và thực tế tăng cường trong một thời gian và tôi nghĩ rằng mặc dù có rất nhiều thông tin chi tiết về nhiệm vụ, vẫn còn rất nhiều nhầm lẫn và sai lầm.

Tôi nghĩ rằng những câu hỏi tiếp theo xứng đáng được trả lời từng bước chi tiết.

  • Nội tại máy ảnh là gì?
  • Camera ngoài là gì?
  • Làm thế nào để tôi tính toán homography từ một điểm đánh dấu phẳng?
  • Nếu tôi có homography, làm thế nào tôi có thể có được tư thế máy ảnh?

Tôi mờ nhạt về việc tái chuẩn hóa bạn làm: 1. H là hình ảnh tương đồng được tìm thấy từ dữ liệu bằng cách sử dụng một số thủ tục (giả sử SVD). 2. inv (K) * H = A là thứ bạn làm việc ở đây. Sau đó, bạn tạo q1 = a1 / Norm (a1) và q2 = a2 / Norm (a2) làm các cột trực giao của ma trận xoay và tạo q3 = q1xq2 ... Sau đó, bạn lấy t / (một cái gì đó) để lấy vectơ dịch. Làm thế nào là bạn có thể chia q1 và q2 cho những thứ có thể khác nhau, và làm thế nào để bạn chọn những gì để chia t? Hoặc là ý tưởng rằng thủ tục SVD và phép nhân bởi inv (K) đưa ra một cái gì đó gần gũi nhưng không hoàn toàn là ma trận xoay trực giao / trực giao, vì vậy
user2600616 17/8/13

Nhưng làm thế nào tôi có thể nhận được điểm 3D (X, Y, 1)?
waschbaer

Câu trả lời:


19

Điều quan trọng là phải hiểu rằng vấn đề duy nhất ở đây là để có được các tham số bên ngoài. Nội tại của máy ảnh có thể được đo ngoại tuyến và có rất nhiều ứng dụng cho mục đích đó.

Nội tại máy ảnh là gì?

Máy ảnh thông số nội tại thường được gọi là ma trận camera chuẩn, . Chúng tôi có thể viếtK

K=[αusu00αvv0001]

Ở đâu

  • α v là hệ sốtỷ lệ theo hướng tọa độ u v và tỷ lệ với tiêu cự f của máy ảnh: α u = k uαuαvuvf α v = k v f . k u k v là số pixel trên mỗi đơn vị khoảng cáchtheo hướng u v .αu=kufαv=kvfkukvuv

  • được gọi là điểm chính, thường là tọa độ của tâm hình ảnh.c=[u0,v0]T

  • là độ nghiêng, chỉ khác không nếu u v không vuông góc.suv

Một camera được hiệu chỉnh khi nội tại được biết đến. Điều này có thể được thực hiện dễ dàng để nó không được coi là một mục tiêu trong tầm nhìn máy tính, mà là một bước tầm thường ngoại tuyến.

Camera ngoài là gì?

Camera ngoài hoặc Thông số ngoài làma trận 3 × 4 tương ứng với phép biến đổi euclide từ hệ tọa độ thế giới sang hệ tọa độ camera. R đại diện cho một 3 × 3 ma trận luân chuyển và t một bản dịch.[R|t]3×4R3×3t

Các ứng dụng thị giác máy tính tập trung vào việc ước tính ma trận này.

[R|t]=[R11R12R13TxR21R22R23TyR31R32R33Tz]

Làm thế nào để tôi tính toán homography từ một điểm đánh dấu phẳng?

Homography là ma trận 3 × đồng nhất liên quan đến mặt phẳng 3D và hình chiếu của nó. Nếu chúng ta có mặt phẳng Z = 0 thì biểu đồ đồng nhất H ánh xạ một điểm M = ( X , Y3×3Z=0H trên mặt phẳng này và điểm 2D tương ứng của nó m dưới hình chiếu P = K [ R | t ]M=(X,Y,0)TmP=K[R|t]

m~=K[R1R2R3t][XY01]

=K[R1R2t][XY1]

H=K[R1R2t]

Để tính toán homography, chúng ta cần cặp camera thế giới. Nếu chúng ta có một điểm đánh dấu phẳng, chúng ta có thể xử lý hình ảnh của nó để trích xuất các tính năng và sau đó phát hiện các tính năng đó trong cảnh để thu được kết quả khớp.

Chúng ta chỉ cần 4 cặp để tính toán homography bằng Direct Transform Transform.

Nếu tôi có homography, làm thế nào tôi có thể có được tư thế máy ảnh?

Homography và máy ảnh đặt ra K [ R | t ] chứa thông tin tương tự và rất dễ truyền từ người này sang người khác. Cột cuối cùng của cả hai là vector dịch. Cột một H 1 và hai H 2 của homography cũng là cột một R 1 và hai R 2 của ma trận đặt camera. Nó chỉ còn lại cột ba R 3 của [ R | t ] và vì nó phải trực giao nên nó có thể được tính là sản phẩm chéo của cột một và hai:HK[R|t]H1H2R1R2R3[R|t]

R3=R1R2

Do dư thừa, cần phải chuẩn hóa chia cho, ví dụ, phần tử [3,4] của ma trận.[R|t]


4
Tôi nghĩ thật sai lầm khi nói rằng hiệu chuẩn là "dễ dàng và không phải là mục tiêu của CV". Trong trường hợp thông thường, chúng ta cũng cần ước tính các tham số biến dạng. Thay vì tự hiệu chỉnh, tôi khuyên bạn nên hiệu chỉnh phẳng (Zhang - Một kỹ thuật mới linh hoạt cho hiệu chỉnh máy ảnh) vì nó linh hoạt hơn nếu có thể thực hiện quy trình hiệu chuẩn riêng biệt. Bạn cũng có một lỗi nhỏ trong "Nếu tôi có homography, làm thế nào tôi có thể có được tư thế máy ảnh?" khi bạn không đưa vào tài khoản hiệu chuẩn (H_ {calib} = K ^ -1H).
buq2

3
tư thế máy ảnh từ homography là sai. Có một số cách để làm điều đó 'một số trong số chúng là không tầm thường.
mirror2image

Tôi không thấy tại sao nó sai. Tôi tính toán theo cách này và làm việc. Tại sao bạn nói nó sai?
Jav_Rock

3
Bạn đã viết trong phần cuối cùng rằng H ^ 1 và R ^ 1 và bằng nhau, nhưng trong phần 3 bạn nói rằng H = K [RT] có nghĩa là R ^ 1 thực sự là K ^ -1H ^ 1. Nhưng điều này không hoàn toàn đúng vì có vô số H sẽ thỏa mãn các phương trình và sẽ gây ra vấn đề khi giải R ^ 1, R ^ 2 và T (thang đo chưa biết). Câu trả lời của bạn bỏ qua hiệu chuẩn nội tại và biến dạng mạnh mẽ và một số phương trình sai vì lý do đây không phải là một câu trả lời tốt cho câu hỏi.
buq2

Có, tôi đã thiếu ma trận hiệu chỉnh ở bước ba khi tôi lấy mã này từ mã của mình và tôi nhân với K trong một chức năng khác của mã.
Jav_Rock

3

Mặc dù giải thích rất rõ về trường hợp hai chiều, câu trả lời do Jav_Rock đề xuất không cung cấp giải pháp hợp lệ cho tư thế máy ảnh trong không gian ba chiều. Lưu ý rằng đối với vấn đề này, nhiều giải pháp có thể tồn tại.

Bài viết này cung cấp các công thức khép kín để phân tách homography, nhưng các công thức hơi phức tạp.

OpenCV 3 đã thực hiện chính xác sự phân tách này ( decomposeHomographyMat ). Đưa ra một homography và một ma trận nội tại được chia tỷ lệ chính xác, hàm cung cấp một bộ bốn phép quay và dịch có thể.

Ma trận nội tại trong trường hợp này cần phải được đưa ra theo đơn vị pixel, điều đó có nghĩa là điểm chính của bạn thường (imageWidth / 2, imageHeight / 2)và tiêu cự của bạn thường là focalLengthInMM / sensorWidthInMM * imageHeight.


Ma trận nội tại được chia tỷ lệ chính xác là gì?
Guig

1
Tôi đã cập nhật câu trả lời của tôi. Xin vui lòng xem ở trên.
Emiswelt

Này @Emiswelt, không phải là tiêu cự focalLengthInMM / sensorWidthInMM * imageWidthsao? Tại sao bạn chọn chiều cao thay thế?
El Marce
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.