2011-08-29 39 views
26

Tôi muốn triển khai thuật toán căn chỉnh dựa trên tính năng bằng cách sử dụng trình phát hiện tính năng ORB và bộ giải nén.
Cho đến nay, tôi rút ra các tính năng sử dụng ORB lớp từ OpenCV ORB orb;
orb(gray_image,Mat(),features.keypoints,features.descriptors);
và phù hợp chúng bằng cách sử dụng chức năng knnMatch từ OpenCV matcher.knnMatch(features1.descriptors, features2.descriptors, pair_matches,2); Sau đó tôi đang cố gắng tìm một homography sử dụng findHomography chức năng, nhưng chức năng này cần ít ít nhất 4 kết hợp giữa các tính năng hình ảnh và trên hầu hết các hình ảnh tôi đã thử nghiệm, tôi có ít hơn 4.Trình dò ​​tính năng OpenCV ORB hoạt động như thế nào?

Có ai đã sử dụng tính năng này không? Có bất kỳ tài liệu nào về nó, hoặc về lớp ORB từ OpenCV (ý nghĩa của các tham số hàm tạo ORB) không?

P.S. Đây là câu hỏi đầu tiên của tôi. và tôi không thể đăng hơn 2 liên kết. Để sử dụng tài liệu opencv this.

+0

Bạn đã sử dụng đối sánh nào? –

+0

FlannBasedMatcher –

Trả lời

48

UPDATE: Bây giờ nó trong tài liệu OpenCV, ở đây: http://opencv.itseez.com/modules/features2d/doc/feature_detection_and_description.html#orb

Mô tả chi tiết của thuật toán được tìm thấy ở đây: http://www.willowgarage.com/sites/default/files/orb_final.pdf


Nó không được đề cập trong OpenCV tài liệu nhưng thực tế OpenCV có:

Hai loại mô tả:

  • mô tả float:
    • SIFT
    • SURF
  • uchar mô tả:
    • ORB
    • TÓM TẮT

Và quẹt tương ứng:

  • cho mô tả float:
    • FlannBased
    • BruteForce<L2<float> >
    • BruteForce<SL2<float> > // kể từ 2.3.1
    • BruteForce<L1<float> >
  • cho descr uchar iptors:
    • BruteForce<Hamming>
    • BruteForce<HammingLUT>
    • FlannBased với LSH index // kể từ 2.4.0

Vì vậy, bạn cần phải sửa đổi mã của bạn để sử dụng ví dụ BruteForce<Hamming> khớp cho mô tả ORB. Có thể sử dụng khoảng cách L2 hoặc L1 để phù hợp với mô tả uchar nhưng kết quả sẽ không chính xác và findHomography trả về kết quả không đạt yêu cầu.

+2

Cảm ơn phản hồi nhanh của bạn. Nó đang làm việc tốt hơn bây giờ với BruteForceMatcher, nhưng tôi vẫn có một số kết quả không đạt yêu cầu với một số hình ảnh. Tôi nghĩ rằng ORB có thể nhạy cảm với luân chuyển/mở rộng quy mô bởi vì nó sử dụng các mô tả BRIEF. Tôi có đúng không? –

+0

Dù sao, bạn có biết tôi có thể tìm thêm thông tin về triển khai ORB trong opencv ở đâu không? Tôi thấy rằng các lớp ORB có thể nhận được một số params (CommonParams) nhưng tôi không biết làm thế nào để thiết lập chúng. –

+0

Thực ra các mô tả ORB dựa trên BRIEF nhưng không chính xác như nhau (ORB là một lối tắt cho BRIEF định hướng). Vì vậy, ORB nhạy cảm hơn với quy mô rồi xoay. Đây là một [so sánh mới] (http://computer-vision-talks.com/2011/08/feature-descriptor-comparison-report/) của các tính năng OpenCV. Và ORB là thuật toán hoàn toàn mới chỉ được thêm vào OpenCV vào mùa hè này, vì vậy tôi nghĩ rằng tại thời điểm này, giấy duy nhất giải thích ORB là giấy gốc của các tác giả ORB. –

Các vấn đề liên quan