Computer Vision

[Keypoint Detector] DoG và Fast Hessian

Xin chào, trong bài viết này chúng ta sẽ tìm hiểu về Difference of Gaussian (DoG) keypoint detector.


TÌM HIỂU VỀ DOG KEYPOINT DETECTOR

Difference of Gaussian detector được dùng để phát hiện các vùng “blob” có trong bức ảnh (gồm “edge” và “corner”). DoG khác biệt so với các Keypoint Detector khác ở chỗ nó cho phép phát hiện keypoint ở tỉ lệ khác nhau (scale invariant). DoG Detector thực hiện các bước sau:

Bước 1: Scale space images

Ở bước này chúng ta sẽ tạo ra các phiên bản của bức ảnh gốc với tỉ lệ và mức độ blurring khác nhau. Các bức ảnh cùng một cột (octave) sẽ có cùng kích thước nhưng khác nhau về mức độ Gaussian Blur, như hình 1.

octave

Hình 1 – Tạo ra 3 cột, mỗi cột gồm 4 bức ảnh có độ blurring khác nhau

Bước 2: Difference of Gaussians

Ở bước này chúng ta sẽ tính Difference of Gaussian bằng cách thực hiện phép trừ giữa hai bức ảnh liền kề trong cùng một cột, lặp lại với tất cả các cột, từ đó nhận được các DoG images, xem hình 2 và 3.

sift-dog-idea

Hình 2 – Difference of Gaussians

diff

Hình 3 – một ví dụ về DoG image

Bước 3: Tìm cực đại và cực tiểu

Đến đây chúng ta đã có được các DoG images, việc cần làm bây giờ là tìm giá trị cực đại/cực tiểu trong các bức ảnh DoG đó.

dog_local-300x300

Hình 4 – Tìm cực trị

Pixel X được coi là cực trị nếu có cường độ lớn hơn hoặc nhỏ hơn tất cả 8 pixel xung quanh nó. Tiếp theo chúng ta so sánh pixel X với các pixel của hai DoG images liền trước và liền sau nó. Nếu pixel X có cường độ lớn hơn hoặc nhỏ hơn tất cả 26 pixel xung quanh thì nó sẽ được coi là một “keypoint”.

dog_octaves

Hình 5 – Tìm ra “keypoint”

Áp dụng tương tự cho tất cả DoG images của tất cả các cột, chúng ta sẽ nhận được tất cả các điểm được coi là “keypoint” trong bức ảnh ban đầu.

Nhược điểm của DoG detector là tốc độ xử lý thấp nên không phù hợp cho các ứng dụng real-time.

Fast Hessian là một keypoint detector dựa trên DoG detector nhưng có tốc độ xử lý cao hơn, trong một số trường hợp, nó có thể được sử dụng cho các ứng dụng real-time.


ÁP DỤNG DOG DETECTOR

OpenCV 3 cung cấp function cv2.xfeatures2d.SIFT_create() để áp dụng DoG Detector. Tuy nhiên, function này nằm trong opencv_contrib package và chúng ta sẽ cần phải cài đặt package này.

Function:

+ tạo đối tượng DoG Detector:

detector = cv2.xfeatures2d.SIFT_create()

+ tạo đối tượng Fast Hessian:

detector = cv2.xfeatures2d.SURF_create()

+ phát hiện các keypoint trong bức ảnh:

keypoints = detector.detect(inputImage [, mask])

Trong đó:

  • inputImage – bức ảnh input ở grayscale;
  • mask – mask cho bức ảnh input;
  • keypoints – tất cả keypoint phát hiện được từ bức ảnh.

Example: Xác định các keypoint có trong bức ảnh

Input: chessboard.jpg

chessboard

Source code: DoG.py

import numpy as np
import cv2

image = cv2.imread("images/chessboard.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

detector = cv2.xfeatures2d.SIFT_create()
kps = detector.detect(gray)

print("# of keypoints: {}".format(len(kps)))

for kp in kps:
    r = int(0.5*kp.size)
    (x,y) = np.int0(kp.pt)
    cv2.circle(image, (x,y), r, (0,255,0), 1)

cv2.imshow("images", image)
cv2.waitKey(0)

Output:
Capture


SUMMARY

Như vậy chúng ta đã tìm hiểu về Difference of Gaussian detector và Fast Hessian detector. Cảm ơn các bạn đã theo dõi bài viết.

Thân ái và quyết thắng.

2 thoughts on “[Keypoint Detector] DoG và Fast Hessian

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s