Sift là gì

I. SIFT là gì ?

Tiếp nối chuỗi bài viết về các phương thức vào xử lý hình họa, bây giờ mình xin giới thiệu cho tới chúng ta về phương thức trích chon đặc trưng SIFT. SIFT (Scale-invariant feature transform) là 1 trong những feature descriptor được sử dụng trong computer vision cùng xử lý hình hình họa được dùng làm thừa nhận dạng đối tượng người sử dụng, matching image, giỏi áp dụng cho những bài xích tân oán phân các loại...


Bạn đang xem: Sift là gì

*

4x4 Gradient windowHIstogram of 4x4 samples per window in 8 directionsGaussian weighting around center4x4x8 = 128 dimensional feature vector điểm sáng :Các keypoint đã không nhiều bị nhờ vào bởi cường ánh sáng, nhiễu, góc luân phiên của hình ảnh bởi những descriptor được tạo ra tự gradients do đó nó đang không bao giờ thay đổi với những chuyển đổi về độ sáng (ví dụ: thêm 10 vào tất cả các px hình hình ảnh vẫn mang về và một trình bày chủ yếu xác).Nhanh hao với kết quả, vận tốc cách xử lý gần như là cùng với thời hạn thực (realtime)cũng có thể xử trí khi chuyển phiên ảnh

II. Áp dụng SIFT mang đến bài bác tân oán phân loại

Để khởi chế tác đối tượng người dùng SIFT trong OpenCV ta áp dụng lệnh: sift = cv2.xfeatures2d.SIFT_create()

img = cv2.imread("path_to_image") #đọc ảnhimg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # đưa hình ảnh quý phái hệ graysift = cv2.xfeatures2d.SIFT_create() #khởi sinh sản đối tượng người sử dụng siftkp, des = sift.detectAndCompute(img,None) #Đối tượng này có phương thức detectAndCompute trả về 2 outputs kp với des, kp là 1 danh sách đựng những keypoints được detect vị SIFT, des là một trong những numpy array cất len(kp) vectors 128 chiều.print(des.shape) img=cv2.drawKeypoints(gray,kp,img)cv2.imwrite("path_to_image",img) #lưu lại ảnh


Xem thêm: Xem Hướng Nhà Hợp Tuổi Canh Thìn 2000 Hợp Với Hướng Nào : Nam Mạng + Nữ Mạng

*

Áp dụng cho bài xích toán thù phân loại:

def extract_sift_features(X): image_descriptors = sift = cv2.xfeatures2d.SIFT_create() for i in range(len(X)): _, des = sift.detectAndCompute(X, None) image_descriptors.append(des) return image_descriptors Hàm kmeans_bow() nhận đầu vào là 1 trong những danh sách tất cả tất cả các descriptors của các ảnh vào tập X và số cụm num_clusters, sử dụng thuật toán thù KMeans vào scikit-learn phân cụm những vector descriptors này thành num_clusters nhiều. Hàm trả về một list center của những cụm. Vì làm việc này mất không hề ít thời gian buộc phải ta vẫn lưu lại list trả về bởi hàm kmeans_bow() ra một file nhị phân.import timedef kmeans_bow(image_descriptors, num_clusters): strar = time.time() bow_dict = kmeans = KMeans(n_clusters=num_clusters, n_jobs = -1, verbose = 1).fit(all_descriptors) bow_dict = kmeans.cluster_centers_ print("process time: ", time.time() - start) return bow_dictnum_clusters = 50if not os.path.isfile("bow_dictionary.pkl"): BoW = kmeans_bow(all_descriptors, num_clusters) pickle.dump(BoW, open("bow_dictionary.pkl", "wb"))else: BoW = pickle.load(open("bow_dictionary.pkl", "rb"))Xây dựng hàm create_features_bow() dấn nguồn vào là list image_descriptors, menu BoW với num_clusters sinh sống trên, trả về các mục X_features, trong số đó thành phần máy p của X_vectors là vector đặc thù theo mô hình BoW ứng cùng với ảnh đồ vật p, tập keypoint descriptors thứ p. Hãy chăm chú sự tương xứng những phần tử vào 4 danh sách: X, Y, image_descriptors, X_features.

Tài liệu tđắm say khảo

Bài viết bên trên được mình tổng đúng theo Khi mình tđam mê gia học tập lớp của thầy Đinc Viết Sang - giáo viên ngôi trường Đại học tập Bách Khoa TP Hà Nội cùng một số trong những tài liệu mình tham khảo bên dưới đây:

Computer Vision: Algorithms & Applications, 2010 by Richard SzeliskThư viện OpenCVCảm ơn các bạn vẫn theo dõi và quan sát bài viết của bản thân mình.Chuyên ổn mục: Hỏi Đáp