I. SIFT là gì ?
Tiếp sau chuỗi nội dung bài viết về những phương pháp vào cách xử lý hình họa, hôm nay mình xin ra mắt cho tới các bạn về phương thức trích chon đặc thù SIFT. SIFT (Scale-invariant feature transform) là 1 trong feature descriptor được thực hiện trong computer vision cùng xử lý hình hình họa được dùng để làm dấn dạng đối tượng người sử dụng, matching image, tuyệt áp dụng cho các bài xích toán phân 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 đặc điểm :Các keypoint sẽ không nhiều bị nhờ vào bởi vì cường độ sáng, nhiễu, góc chuyển phiên của hình họa vì những descriptor được tạo thành từ gradients cho nên vì vậy nó vẫn không bao giờ thay đổi cùng với các biến đổi về độ sáng (ví dụ: thêm 10 vào tất cả các px hình ảnh đã đem đến và một mô tả thiết yếu xác).Nhanh khô với kết quả, tốc độ xử lý gần như là với thời hạn thực (realtime)cũng có thể xử trí khi luân chuyển ảnh
II. Áp dụng SIFT mang lại bài xích toán thù phân loại
Để khởi sinh sản đối tượng SIFT vào OpenCV ta thực hiện lệnh: sift = cv2.xfeatures2d.SIFT_create()
img = cv2.imread("path_to_image") #gọi ảnhimg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # đưa hình ảnh lịch sự hệ graysift = cv2.xfeatures2d.SIFT_create() #khởi tạo đối tượng siftkp, des = sift.detectAndCompute(img,None) #Đối tượng này còn 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 bởi SIFT, des là một trong 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 giữ ảnh
Xem thêm: Download Microsoft Office 2007 Full Crack 32/64 Bit + Key Kích Hoạt

Áp dụng mang lại bài toán 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à một trong các mục gồm tất cả các descriptors của các hình ảnh trong tập X cùng số các num_clusters, thực hiện thuật toán KMeans vào scikit-learn phân các các vector descriptors này thành num_clusters cụm. Hàm trả về một danh sách center của những cụm. Vì làm việc này mất rất nhiều thời gian nên ta đã lưu danh sách trả về do hàm kmeans_bow() ra một tệp tin 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() nhận đầu vào là menu image_descriptors, các mục BoW và num_clusters làm việc trên, trả về danh mục X_features, trong các số đó bộ phận thiết bị p của X_vectors là vector đặc thù theo quy mô BoW ứng cùng với hình họa máy p, tập keypoint descriptors thiết bị p. Hãy chú ý sự tương xứng những thành phần vào 4 danh sách: X, Y, image_descriptors, X_features.
Tài liệu tsi mê khảo
Bài viết trên được mình tổng vừa lòng Khi bản thân tđắm đuối gia học lớp của thầy Đinh Viết Sang - giảng viên ngôi trường Đại học Bách Khoa Thành Phố Hà Nội cùng một số trong những tài liệu bản thân xem thêm bên dưới đây:
Computer Vision: Algorithms và Applications, 2010 by Richard SzeliskTlỗi viện OpenCVCảm ơn chúng ta vẫn quan sát và theo dõi nội dung bài viết của bản thân mình.Chulặng mục: Hỏi Đáp