OpenCV không cung cấp một RANSAC chức năng cho mỗi gia nhập hoặc ít nhất là trong một hình thức như vậy mà bạn chỉ có thể gọi nó và được thực hiện với nó (ví dụ cv::ransac(...)
). Tất cả các hàm/phương thức có thể sử dụng RANSAC đều có một cờ cho phép nó. Tuy nhiên, điều này không phải lúc nào cũng hữu ích nếu bạn thực sự muốn làm điều gì đó khác với các tính toán RANSAC tính toán sau khi bạn đã ước tính ma trận homography/cơ bản ví dụ như tạo một âm mưu tốt trong Octave hoặc phần mềm/thư viện tương tự của các điểm, áp dụng các thuật toán bổ sung trên còn lại thiết lập các trận đấu được lọc, vvOpenCV: Làm thế nào để nhận được điểm inlier sử dụng findHomography()/findFundamental() và RANSAC
Sau khi phù hợp với hai hình ảnh một được một vector của trận đấu. Cùng với đó, chúng tôi có tất nhiên 2 bộ keypoints (một cho mỗi hình ảnh) được sử dụng trong quá trình phù hợp. Sử dụng kết quả phù hợp và điểm chính chúng tôi tạo hai vectơ điểm (ví dụ: cv::Point2f points
) và chuyển các số này đến findHomography()
. Từ this và this bài đăng tôi đã khám phá cách chính xác các ký tự được đánh dấu bằng mặt nạ, chúng tôi chuyển đến hàm đó. Mỗi hàng bên trong mặt nạ liên quan đến một inlier/outlier. Tuy nhiên tôi không thể tìm ra cách sử dụng thông tin chỉ mục hàng từ hai bộ điểm của tôi. Nhìn vào mã nguồn của OpenCV không làm tôi quá xa. Trong findFundamental()
(tương tự như findHomography()
khi nói đến chữ ký của nó và mặt nạ phần) họ sử dụng compressPoints()
, mà dường như bằng cách nào đó kết hợp hai bộ chúng tôi có như là đầu vào (nguồn và điểm đích) thành một. Trong khi thử nghiệm để xác định bản chất của mặt nạ, tôi đã thử 2 bộ điểm phù hợp (được chuyển đổi cv::Keypoints
thành cv::Point2f
- một quy trình chuẩn). Mỗi bộ chứa 300 điểm nên tổng cộng chúng ta có 600 điểm. Mặt nạ trả về chứa 300 hàng (giá trị không quan trọng đối với chủ đề này trong tầm tay).
EDIT: Trong khi viết những dòng này tôi đã khám phá ra câu trả lời (xem bên dưới) nhưng quyết định gửi câu hỏi này anyway trong trường hợp ai đó cần thông tin này càng sớm càng tốt và ở dạng nhỏ gọn. Lưu ý rằng chúng ta vẫn cần một hàm OpenCV, có hỗ trợ RANSAC. Vì vậy, nếu bạn có một tập hợp các điểm nhưng không có ý định tính toán ma trận cơ bản hoặc ma trận cơ bản, điều này rõ ràng không phải là cách và tôi dám nói rằng tôi không thể tìm thấy bất kỳ thứ gì hữu ích trong API của OpenCV có thể giúp tránh chướng ngại vật này do đó bạn cần sử dụng một thư viện bên ngoài.
Đối với câu đầu tiên, thực sự là hàng trong mặt nạ không đại diện cho một inlier. Hàng đại diện cho trạng thái của inlier hoặc outlier. Tham khảo bài đăng này [link] (http://stackoverflow.com/questions/15815304/opencv-c-findhomography-mask-values-meaning) để giải thích thêm. –
Có, đó là chính xác và đây là những gì tôi có nghĩa là nhưng bây giờ mà tôi đọc lại câu này tôi thấy làm thế nào nó có thể được hiểu sai. Tôi sẽ thay đổi điều đó. – rbaleksandar
Nhưng hàng đại diện cho trạng thái của inlier hoặc outliers nhưng không có điểm chính trên mỗi trạng thái inlier hoặc outliers. các điểm chính được lưu trữ trong vectơ. Vậy làm thế nào chúng ta có thể nhận được điểm quan trọng tương ứng của inlier trong mặt nạ? – Abc