Mở đầu
(Speeded-up Robust Feature)
Tiếp sau khi tìm hiểu về SIFT và ứng dụng trong homography, ta tìm hiểu một phiên bản cải tiến phổ biến của SIFT là SURF
Ý tưởng
Giống như SIFT, SURF cũng gồm 2 phần là:
- Feature Extraction: Cũng tìm kiếm trích xuất các interest point
- Feature Description: Giống như SIFT, cũng có phần miêu tả các iterest point để kết hợp thành các match
Feature Extraction
Ở SIFT, ta sử dụng các bộ lọc xếp tầng (Pyramid) để phát hiện các bất biến tỉ lệ ( Scaling Invariance), tức là ta dựa vào thuật toán Difference of Gaussian (DoG) và các hình ảnh tích phân.
SURF tối ưu thời gian xử lí hơn bằng cách xử dụng các bộ lọc hình vuông như một phép gần đúng
Tức thay vì dùng đạo hàm như SIFT, ta sử dụng tổng pixel trong hình chữ nhậtFeature Description
Cũng như SIFT, ý tưởng vẫn là xây dựng 1 vector đặc thù dựa vào độ lớn của các vector chỉ hướng. Ở SURF, ta có 2 bước:
- Ta ban đầu tạo 1 vector (initiation). Ta tính tổng trục tung và trục hoành của các điểm keypoint nằm trong vùng hình tròn có khoảng cách không lớn hơn π/3 với vector ban đầu để tạo thành 1 vector đặc trưng cho các điểm này. Tiếp tục làm như vậy, sau đó ta tìm được vector đặc trưng có độ dài lớn nhất làm main orientation (vector chính) của feature descriptionDescriptor Component
- Đầu tiên ta tạo một hình vuông theo hướng của main orientation có độ lớn là 20s
- Sau đó ta chia hình vuông này thành 4x4 vùng nhỏ (như grid cell) mỗi vùng là 5x5 kích thước scale. Ta gọi dx, dy là 2 vector gốc của trục tọa độ mới có tâm là keypoint (theo Haar wavelet), vậy mỗi vector gốc có kích cỡ 2s. Để tăng độ hiệu quả (robust) về localization error , ta thêm một lớp Gaussian với weight riêng của dx, dy là σ = 3.3s
Vậy, với mỗi vùng nhỏ, ta tính 4 giá trị V = (∑ dx, ∑ dy, ∑|dx|, ∑|dy|) mỗi giá trị lại là 1 vector dựa vào hệ tọa độ (2D). Vậy:16(4x4 vùng nhỏ) x 4 giá trị x 2D = 128
Vậy output (Feature Description) một vector dạng 128-D (bằng với SIFT)
Vậy SURF hơn SIFT chỗ nhanh hơn
Matching
Có thể sử dụng chung thuật toán matching với SIFT
Implement
Tham khảo tại https://github.com/deepanshut041/feature-detection/tree/master/surf
Ta thử nghiệm lại bài toán tìm ra góc quay (ma trận biến đổi) như đã làm với SIFT (chỉ thay phương pháp keypoint detector và keypoint descriptor)
Implement của OpenCV:
Ta chỉ cần biết scale của ảnh (800) và 2 bức ảnh
Tham khảo
- https://medium.com/data-breach/introduction-to-surf-speeded-up-robust-features-c7396d6e7c4e
- https://viblo.asia/p/thuat-toan-surf-bWrZnWoQlxw
- https://docs.opencv.org/3.4/df/dd2/tutorial_py_surf_intro.html
- https://github.com/deepanshut041/feature-detection/tree/master/surf
Nhận xét
Đăng nhận xét