Keystone Correction sử dụng 3D-Points of Kinect


15

Với XNA, tôi đang hiển thị một hình chữ nhật đơn giản được chiếu lên sàn. Máy chiếu có thể được đặt ở một vị trí tùy ý. Rõ ràng, hình chữ nhật được chiếu bị biến dạng theo vị trí và góc của máy chiếu. Một Kinect quét sàn tìm bốn góc. Bây giờ mục tiêu của tôi là biến đổi hình chữ nhật ban đầu sao cho hình chiếu không còn bị biến dạng bởi về cơ bản làm cong vênh hình chữ nhật.

Cách tiếp cận đầu tiên của tôi là làm mọi thứ trong 2D: Đầu tiên tính toán chuyển đổi phối cảnh (sử dụng OpenCV warpPerspective()) từ các điểm được quét sang các điểm của hình chữ nhật bên trong, không áp dụng nghịch đảo cho hình chữ nhật. Điều này dường như hoạt động nhưng quá chậm vì nó không thể được hiển thị trên GPU.

Cách tiếp cận thứ hai là làm mọi thứ trong 3D để sử dụng các tính năng kết xuất của XNA. Đầu tiên, tôi sẽ hiển thị một mặt phẳng, quét các góc của nó bằng Kinect và ánh xạ các Điểm 3D nhận được vào mặt phẳng ban đầu. Về mặt lý thuyết, tôi có thể áp dụng nghịch đảo của phép biến đổi phối cảnh cho mặt phẳng, như tôi đã làm trong phương pháp 2D. Tuy nhiên, vì XNA hoạt động với ma trận xem và ma trận chiếu, tôi không thể chỉ gọi một hàm như warpPerspective()và nhận được kết quả mong muốn. Tôi sẽ cần tính toán các tham số mới cho chế độ xem và ma trận chiếu của máy ảnh.

Câu hỏi: Có thể tính toán các tham số này và chia chúng thành hai ma trận (xem và chiếu) không? Nếu không, có cách nào khác tôi có thể sử dụng?


1
XNA sử dụng ma trận Xem và ma trận Chiếu, nhưng tôi nghĩ kết quả cuối cùng = vector * view * chiếu. Tại sao không thử tạo một ma trận danh tính và chiếu ma trận phối cảnh nghịch đảo và xem nó có hoạt động không? (Không chắc chắn 100% rằng đây chính xác là những gì xảy ra)
Roy T.

1
Làm thế nào chính xác bạn đã tính toán một chuyển đổi quan điểm với warpPespective? Tôi không quen thuộc với OpenCV, nhưng đọc tài liệu có vẻ như chức năng này chỉ áp dụng một phối cảnh cho một hình ảnh. Hay tôi bối rối? Dù sao, có thể thêm chi tiết về việc thực hiện đầu tiên của bạn sẽ giúp ích.
Laurent Couvidou

Bạn có thể muốn xem thư viện PCL ( pointclouds.org ). Chuyển đổi hình ảnh chiều sâu từ động vật cung cấp cho bạn một đám mây điểm với máy ảnh ở điểm gốc, chỉ dọc theo trục z. Sau đó, bạn có thể sử dụng ransac hoặc thuật toán khác để tìm kiếm máy bay.
Exilyth

Câu trả lời:


1

Vì đại số vectơ thân thiện với GPU, các sản phẩm chấm và chuẩn hóa có thể được sử dụng để tìm bốn góc của mặt phẳng ban đầu như sau:

nhập mô tả hình ảnh ở đây

Cho điểm máy chiếu (P), điểm chiếu (B), một điểm tùy ý trên mặt phẳng chứa hình chữ nhật bị biến dạng (Q) và vectơ bình thường của mặt phẳng đó (n), điểm giao nhau (A) của đường thẳng từ P đến B, và mặt phẳng được cho bởi

s = -dot_product(n, P - Q) / dot_product(n, normalized(B - P)) 
A = P + s * normalized(B-P)

Nguồn http://geomalerskyms.com/a05-_intersect-1.html phần Giao lộ đường phẳng

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.