2012-07-07 40 views
9

Tôi đang cố gắng bắt đầu làm việc với trích xuất tính năng sàng lọc bằng cách sử dụng (C++) OpenCv. Tôi cần trích xuất các tính năng bằng SIFT, khớp chúng giữa hình ảnh gốc (ví dụ: sách) và cảnh, sau đó tính toán tư thế máy ảnh.Sift Extraction - opencv

Cho đến nay tôi đã tìm thấy this algorithm bằng SURF. Có ai biết một mã cơ sở mà từ đó tôi có thể bắt đầu, hoặc có thể là một cách để chuyển đổi các thuật toán trong liên kết từ SURF để SIFT?

Xin cảm ơn trước.

EDIT: Ok, tôi đã tìm ra giải pháp cho vấn đề sift. Bây giờ tôi đang cố gắng tìm ra tư thế máy ảnh. Tôi đang cố gắng sử dụng: resolvePnP, bất cứ ai có thể giúp tôi với một ví dụ?

Trả lời

4

Nếu bạn đã quản lý để tìm các trận đấu giữa các hình ảnh và hiện trường, sau đó tôi đề nghị bạn áp dụng cv :: findHomography(). Nó sẽ tính toán ma trận homography bằng cách sử dụng 4 kết quả khớp như đầu vào.

Bạn có thể chuyển đổi thành tư thế máy ảnh trực tiếp từ ma trận homography.

0

Để sử dụng SIFT thay vì SURF, tôi đã thay đổi SurfFeatureDetector thành SiftFeatureDetectorSurfDescriptorExtractor đến SiftDescriptorExtractor. Đối với một số hình ảnh, tôi thấy rằng kết hợp SURF detector < -> SIFT descriptor mang lại kết quả tương đối chính xác, nhưng bạn nên thử nghiệm với các kết hợp khác (FAST detector - FREAK descriptor hoặc ORB detector - BRISK descriptor), tùy theo yêu cầu của bạn.

Hãy làm theo hướng dẫn này để giải quyết một phần homography câu hỏi của bạn: Feature Matching and Homography

Ngoài ra, có lẽ đây sẽ giúp: Pose Estimation