2012-06-11 30 views
6

Tôi muốn tăng thêm một đối tượng ảo tại camera x, y, z mét wrt. OpenCV có chức năng hiệu chỉnh máy ảnh nhưng tôi không hiểu chính xác tôi có thể đưa tọa độ theo métLàm thế nào để tìm ma trận Camera cho thực tế Augmented?

Tôi đã thử mô phỏng Camera trong Unity nhưng không nhận được kết quả mong đợi.

Tôi đặt ma trận chiếu như sau và tạo khối lập phương đơn vị tại z = 2,415 + 0,5. Trong đó 2.415 là khoảng cách giữa mắt và mặt phẳng chiếu (mô hình máy ảnh Pinhole) Vì khuôn mặt của khối lập phương ở mặt cắt cắt phía trước và kích thước của nó là đơn vị nên nó che phủ toàn bộ khung nhìn?

Matrix4x4 m = new Matrix4x4(); 
    m[0, 0] = 1; 
    m[0, 1] = 0; 
    m[0, 2] = 0; 
    m[0, 3] = 0; 

    m[1, 0] = 0; 
    m[1, 1] = 1; 
    m[1, 2] = 0; 
    m[1, 3] = 0; 

m[2, 0] = 0; 
    m[2, 1] = 0; 
    m[2, 2] = -0.01f; 
    m[2, 3] = 0; 

    m[3, 0] = 0; 
    m[3, 1] = 0; 
    m[3, 2] = -2.415f; 
    m[3, 3] = 0; 
+0

Nếu bạn đặt m [3,2] = -1/2,415f và m [3,3] = 1 ma trận chiếu hoạt động chính xác –

Trả lời

4

Tôi đã kết thúc đo trường xem theo cách thủ công. Một khi bạn biết FOV bạn có thể dễ dàng tạo ma trận chiếu. Không cần phải lo lắng về các đơn vị vì cuối cùng phép chiếu có dạng (X * d/Z, Y * d/Z). Dù các đơn vị của X, Y, Z có thể là tỷ lệ của X/Z vẫn giữ nguyên.

5

Quy mô hiệu chuẩn toàn cầu (nghĩa là đơn vị đo tọa độ không gian 3D) được xác định bởi hình dạng của đối tượng hiệu chuẩn bạn sử dụng. Ví dụ, khi bạn hiệu chỉnh trong OpenCV sử dụng hình ảnh của một bàn cờ phẳng, đầu vào cho quy trình hiệu chuẩn là các cặp tương ứng (P, p) của điểm 3D P và ảnh p, tọa độ (X, Y, Z) của 3D điểm được trình bày bằng mm, cm, inch, dặm, bất cứ điều gì, theo yêu cầu của kích thước của mục tiêu mà bạn sử dụng (và quang học rằng hình ảnh đó), và phối 2D của những hình ảnh tính theo pixel. Đầu ra của thường trình hiệu chuẩn là tập hợp các tham số (các thành phần của ma trận chiếu P và các thông số méo phi tuyến tính k) mà "chuyển đổi" tọa độ 3D được biểu thị trong các đơn vị số liệu đó thành pixel.

Nếu bạn không biết (hoặc không muốn sử dụng) kích thước thực tế của mục tiêu hiệu chuẩn, bạn chỉ có thể nhích chúng nhưng để tỷ lệ của chúng không thay đổi (ví dụ, hình vuông vẫn là hình vuông mặc dù chiều dài thực sự của mặt của nó có thể chưa được biết). Trong trường hợp này, hiệu chuẩn của bạn sẽ được xác định theo thang đo không xác định trên toàn cầu. Đây thực sự là trường hợp phổ biến: trong hầu hết các ứng dụng thực tế ảo, bạn không thực sự quan tâm đến quy mô toàn cầu là gì, miễn là các kết quả trông chính xác trong hình ảnh. Ví dụ: nếu bạn muốn thêm đôi môi 3D chân thực hơn trên video của Angelina Jolie và kết hợp chúng với video gốc để đôi môi giả mới gắn liền và trông "tự nhiên" trên khuôn mặt của cô ấy , bạn chỉ cần rescale mô hình 3D của môi giả để nó chồng chéo chính xác hình ảnh của đôi môi. Cho dù mô hình cách camera CG khoảng 1 yard hoặc một dặm, trong đó bạn làm cho hỗn hợp hoàn toàn không liên quan.

+1

Tôi thích ví dụ :) – Ani

+1

Tôi có thể tăng thêm các mô hình không có quy mô phù hợp nhưng tôi muốn nó chính xác theo mét. Tôi sẽ làm đồ họa âm thanh nổi và nó phải đưa ra nhận thức chiều sâu chính xác. –

+0

Độ chính xác của biểu đồ không liên quan trong trường hợp kết xuất âm thanh nổi: tất cả những gì bạn quan tâm trong trường hợp này là hiển thị đúng số lượng chênh lệch trái-phải trong hai máy ảnh. Miễn là tất cả các tỷ lệ kích thước và khoảng cách là chính xác, quy mô toàn cầu thực tế không thể được cảm nhận. –

5

Để tìm augmenting đối tượng bạn cần tìm tư thế và hướng của máy ảnh. Điều đó cũng giống như việc tìm kiếm máy ảnh bên ngoài. Bạn cũng phải tính toán đầu tiên của máy ảnh nội tại (được gọi là calibraiton).

OpenCV cho phép bạn thực hiện tất cả những điều này, nhưng không phải là tầm thường, nó đòi hỏi bạn phải làm việc một mình. Tôi cung cấp cho bạn một đầu mối, trước tiên bạn cần phải nhận ra một cái gì đó trong cảnh mà bạn biết nó trông như thế nào, vì vậy bạn có thể tính toán tư thế máy ảnh bằng cách phân tích đối tượng này, gọi nó là một điểm đánh dấu. Bạn có thể bắt đầu bằng các fiducials chính, chúng dễ phát hiện.

Hãy xem điều này thread.