Tôi hiện đang làm việc và so sánh hiệu suất của một số trình phát hiện tính năng do OpenCV cung cấp làm cơ sở cho việc kết hợp tính năng trực quan.
Tôi đang sử dụng mô tả SIFT . Tôi đã hoàn thành kết hợp thỏa đáng (sau khi từ chối các kết quả khớp xấu) khi phát hiện các tính năng MSER và DoG (SIFT) .
Hiện tại, tôi đang thử nghiệm mã của mình với GFTT (Các tính năng tốt để theo dõi - Góc Harris) để có được sự so sánh, và vì trong ứng dụng cuối cùng, một bộ tính năng GFTT sẽ có sẵn từ quy trình theo dõi tính năng trực quan.
Tôi đang sử dụng cv::FeatureDetector::detect(...)
cung cấp cho tôi std::vector<cv::KeyPoint>
đầy đủ các tính năng / điểm chính / vùng quan tâm được phát hiện . Cấu trúc cv::KeyPoint
chứa thông tin cơ bản về vị trí của tính năng, cũng như thông tin về size
và octave
trong đó điểm chính đã được phát hiện.
Kết quả đầu tiên của tôi với GFTT rất tệ cho đến khi tôi so sánh các thông số size
và octave
thông số điển hình trong các loại tính năng khác nhau:
- MSER đặt kích thước (trong khoảng từ 10 đến 40px) và để quãng tám thành 0
- DoG (SIFT) đặt cả kích thước và quãng tám ( tỷ lệ kích thước / quãng tám trong khoảng từ 20 đến 40)
- GFTT các tham số luôn là : size = 3 , octave = 0
Tôi cho rằng đó là vì mục đích chính của các tính năng GFTT không được sử dụng để khớp mà chỉ trong theo dõi. Điều này giải thích chất lượng thấp của kết quả khớp, vì các mô tả được trích xuất từ các tính năng nhỏ như vậy sẽ không bị phân biệt đối xử và bất biến đối với nhiều thứ , bao gồm cả các thay đổi nhỏ, 1 pixel.
Nếu tôi tự đặt size
của GFTT đến 10-12 , tôi nhận được kết quả tốt, rất giống với khi sử dụng MSER hoặc con chó (SIFT) .
Câu hỏi của tôi là: có cách nào tốt hơn để xác định mức tăng size
(và / hoặc octave
) so với chỉ-đi-với-10-xem-nếu-nó-hoạt động không? Tôi muốn tránh mã hóa size
tăng nếu có thể và xác định nó theo chương trình, nhưng mã hóa vẫn ổn miễn là tôi có một số đối số chắc chắn ủng hộ các lựa chọn của tôi về thuật toán mới size
/ size
tăng / size
ước tính .