CÙNG TIM HIỂU VỀ THUẬT TOÁN SIFT TRONG LOCAL IMAGE DESCRIPTOR

CÙNG TIM HIỂU VỀ THUẬT TOÁN SIFT TRONG LOCAL IMAGE DESCRIPTOR

Uniduc JSC - 2020-03-25 16:47:31 | 1560 lượt xem

Mục lục

Như các bạn đã biết, trong local image descriptor, chúng ta sẽ chia ra làm 2 giai dodanj:

    - Tìm keypoint trong hình ảnh, những keypoint này thường là các cạnh, các góc. Để tìm keypoint, chúng ta sẽ sử dụng một số thuật toán như FAST, Harris, HoG

   - Khi đã có những keypoint rồi, chúng ta sẽ áp dụng một số thuật toán để extract feature như SIFT, SURF, RootSIFT

Trong bài đầu tiên trong chuỗi bài giới thiệu về các thuật toán extract feature, mình sẽ giới thiệu với các bạn về thuật toán SIFT

SIFT hoạt động như thế nào?

Thuật toán SIFT thực sự dễ hiểu hơn rất nhiều so với thuật toán Difference of Gaussian (DoG) keypoint detector cũng được David Lowe đề xuất trong bài báo ICCV năm 1999, Object recognition from local scale-invariant features

Thuật toán  SIFT yêu cầu một tập hợp các input keypoint. Sau đó, đối với mỗi input keypoint, SIFT lấy vùng 16 x 16 pixel bao quanh pixel trung tâm của vùng keypoint:

Bây giờ chúng ta sẽ chia vùng 16x16 ra thành 16 cửa sổ 4x4

Tiếp theo chúng ta có thể chuyển sang bước thứ hai của SIFT, đây là bước phức tạp nhất. Đối với mỗi trong số 16 cửa sổ, chúng ta tính toán độ lớn và hướng của gradient, giống như chúng tôi đã làm cho HOG descriptor:

Với độ lớn và hướng của gradient, tiếp theo chúng tôi sẽ xây dựng 8-bin histogram cho mỗi cửa sổ 4 x 4 pixel:

Độ lớn của mỗi bin phụ thuộc vào độ lớn của gradient.

Tuy nhiên, chúng ta sẽ không sử dụng cường độ thô của gradient. Thay vào đó, chúng ta sẽ sử dụng trọng số Gaussian. Pixel càng xa trung tâm keypoint, nó càng ít đóng góp vào biểu đồ tổng thể:

Cuối cùng, bước thứ ba của SIFT là thu thập tất cả 16 8-bin oriented  histogram này và ghép chúng lại với nhau:

Vectơ đặc trưng của chúng ta sẽ có chiều như sau: 16 x 8 = 128-dim.

Khi chúng ta đã thu thập các biểu đồ được nối, chúng ta kết thúc bằng việc chuẩn hóa L2 cho feature vector. Tại thời điểm này, vectơ tính năng SIFTđã sẵn sàng để so sánh với các vectơ tính năng SIFT khác.

Một lần nữa, điều quan trọng cần lưu ý là không giống như các glocal image descriptor, trong đó chúng tôi chỉ có một feature vector được trích xuất trên mỗi hình ảnh), các local descriptor  trả về N vectơ đặc trưng cho mỗi hình ảnh, trong đó N là số lượng các điểm chính được phát hiện. 

SIFT trong Python

Đối với OpenCV 2.4, chỉ cần chuyển tên SIFT sang hàm cv2.DescriptorExtractor_create và OpenCV sẽ khởi tạo đối tượng cho chúng ta.

Đối với OpenCV 3+, bạn sẽ cần sử dụng mô-đun xfeatures2d và khởi tạo SIFT bằng SIFT_create. Từ đó, chỉ cần gọi DetAndCompute và bạn sẽ nhận được một bộ các keypoint và local descriptor.

Dưới đây là một số mã ví dụ để tải hình ảnh, phát hiện các điểm chính và trích xuất các vectơ tính năng SIFT từ một hình ảnh:

# import the necessary packages
from __future__ import print_function
import argparse
import cv2
import imutils
 
# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())
 
# load the input image, convert it to grayscale
image = cv2.imread(args["image"])
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 
# handle if we are using OpenCV 2.4
if imutils.is_cv2():
	# initialize the keypoint detector and local invariant descriptor
	detector = cv2.FeatureDetector_create("SIFT")
	extractor = cv2.DescriptorExtractor_create("SIFT")
 
	# detect keypoints, and then extract local invariant descriptors
	kps = detector.detect(gray)
	(kps, descs) = extractor.compute(gray, kps)
 
# otherwise, handle if we are using OpenCV 3+
else:
	# initialize the keypoint detector
	detector = cv2.xfeatures2d.SIFT_create()
 
	# detect keypoints and extract local invariant descriptors
	(kps, descs) = detector.detectAndCompute(gray, None)
 
# show the shape of the keypoints and local invariant descriptors array
print("[INFO] # of keypoints detected: {}".format(len(kps)))
print("[INFO] feature vector shape: {}".format(descs.shape))

Mời bạn có thể tham gia cộng đồng robotic để đặt câu hỏi cũng như tìm hiểu về robot.

-------------////--------------------------------------------////------------

GIỚI THIỆU ĐẾN BẠN SẢN PHẨM KHẨU TRANG Y TẾ WAKAMONO KHÁNG VI RÚT LÊN ĐẾN 99% BẠN CÓ THỂ MUA SẢN PHẨM Ở DƯỚI ĐÂY:

 

 

 

 

-------------////--------------------------------------------////------------

SÁCH ĐẮC NHÂN TÂM HAY ĐƯỢC NHIỀU BẠN TÌM ĐỌC

 

-------------////--------------------------------------------////------------

HUMANOID ROBOT CỦA CÔNG TY UNIDUC SẢN XUẤT PHÁT TRIỂN.

Đăng kí nhận tin mới



Đánh giá bài viết

0%

0 Tổng người đánh giá
5
0%
4
0%
3
0%
2
0%
1
0%
THÔNG TIN LIÊN HỆ

Công ty Cổ phần Uniduc

Địa Chỉ: 22 Đường Số 54, Phường Thảo Điền, Quận 2

Hotline: 089 6688 629 (Phòng Kinh Doanh / HTKT)

DĐ: 0903 666 014 (Mr Đức)

Email: [email protected]

Website: https://uniduc.com/vi

 
TỔNG QUAN

Công ty Cổ Phần Uniduc chuyên cung cấp các loại robot phục vụ, Agv Robot, hệ thống tự động. Với kinh nghiệm nghiên cứu lâu năm và đội ngũ kỹ sư năng động sáng tạo. Hi vọng Uniduc là điếm đến công nghệ là nơi khách hàng luôn gửi trọn niềm tin. Chúng tôi sẽ luôn luôn phấn đấu cung cấp cho bạn giải pháp, máy móc, dịch vụ tốt nhất.

WEB SITE CÙNG HỆ THỐNG

ĐĂNG KÝ NHẬN TIN

Nhận bản tin thường xuyên để cập nhật giá bán và các chương trình khuyến mãi.


©2018 - 2021 Copyright Uniduc., Jsc. Sitemap