Sift là gì

     

I. SIFT là gì ?

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

*
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ẽ ít bị phụ thuộc bởi độ mạnh sáng, nhiễu, góc luân chuyển của ảnh do các descriptor được tạo nên từ gradients do đó nó đã không bao giờ thay đổi với các đổi khác về độ sáng (ví dụ: thêm 10 vào tất cả các px hình ảnh sẽ đưa về cùng một mô tả thiết yếu xác).Nhanh với hiệu quả, tốc độ xử lý gần như với thời gian thực (realtime)Có thể xử lý khi luân chuyển ảnh

II.

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



Xem thêm: Lateral Thinking Là Gì ? Hãy Sáng Tạo Hơn Với Tư Duy Đường Vòng

Áp dụng SIFT cho việc phân loại

Để khởi tạo đối tượng người dùng SIFT trong OpenCV ta thực hiện lệnh: sift = cv2.xfeatures2d.SIFT_create()

img = cv2.imread("path_to_image") #đọc ảnhimg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # chuyển ảnh sang 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 cùng des, kp là 1 trong list chứa những keypoints được detect bởi SIFT, des là một numpy array chứa len(kp) vectors 128 chiều.print(des.shape) img=cv2.drawKeypoints(gray,kp,img)cv2.imwrite("path_to_image",img) #lưu ảnh

*
Áp dụng cho bài toán phân loại:

def read_data(path_to_image): X = <> #chứa image Y = <> #chứa label for label in os.listdir("path_to_image"): for img_file in os.listdir(os.path.join("path_to_image", label)): img = load_image(os.path.join("trainingset", label, img_file)) X.append(img) Y.append(label2id

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 list gồm tất cả các descriptors của các ảnh trong tập X và số cụm num_clusters, thực hiện thuật toán KMeans trong scikit-learn phân cụm những vector descriptors này thành num_clusters cụm. Hàm trả về một danh sách center của các cụm. Vì làm việc này mất rất nhiều thời gian phải ta vẫn lưu list trả về vì chưng 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 nguồn vào là list image_descriptors, menu BoW với num_clusters sống trên, trả về các mục X_features, trong đó bộ phận thứ phường của X_vectors là vector đặc trưng theo mô hình BoW ứng với hình ảnh thứ p, tập keypoint descriptors thứ p Hãy để ý sự tương xứng các bộ phận trong 4 danh sách: X, Y, image_descriptors, X_features.

def create_features_bow(image_descriptors, BoW, num_clusters): X_features = <> for i in range(len(image_descriptors)): features = np.array(<0> * num_clusters) if image_descriptors is not None: distance = cdist(image_descriptors, BoW) argmin = np.argmin(distance, axis=1) for j in argmin: features += 1 X_features.append(features) return X_featuresX_features = create_features_bow(image_descriptors, BoW, num_clusters)Sau khi tất cả X_feature bọn họ sẽ đưa vào các mô hình phân loại là xong. Các bạn có thể tham khảo các quy mô phân loại SVM.

Xem thêm: Tổng Hợp Những Lời Chúc 20 10 Hay Và Ý Nghĩa, Những Lời Chúc 20/10 Hay Và Ý Nghĩa Nhất Năm 2021

Tài liệu tham khảo

Bài viết trên được mình tổng phù hợp khi mình thâm nhập học lớp của thầy Đinh Viết lịch sự - giảng viên trường Đại học tập Bách Khoa hà nội thủ đô và một trong những tài liệu mình xem thêm dưới đây:

Computer Vision: Algorithms and Applications, 2010 by Richard SzeliskThư viện OpenCVCảm ơn chúng ta đã theo dõi bài viết của mình.