Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 26

Trích chọn đặc trưng từ hình ảnh

(Extracting features from image)

1. Extracting features from pixel intensities (trích chọn đặc trưng dựa
trên cường độ pixel)
2. Extracting points of interest as features (trích chọn đặc trưng dựa trên
các điểm hữu ích)
Trích chọn đặc trưng từ cường độ pixel
• Một hình ảnh kỹ thuật số thường được xem như một ma trận
trong đó có 3 yếu tố, sau đó hình ảnh được biến đổi thành ma
trận hay vector gồm các thành phần được cho là đại diện cho
cường độ pixel.
• Trước tiên các mẫu sẽ được thu thập trước dưới dạng cường
độ pixel. Sau đó, các mẫu sẽ được thực hiện các phép toán so
sánh như chập 2 chiều hay so sánh tương quan,... với đối tựng
cần được nhận diện.
Ưu điểm
Có hiệu quả khi thực hiện các tác vụ nhận diện cơ bản trong môi
trường không có quá nhiều tác động như ánh sáng và dịch
chuyển của hình ảnh.
Khuyết điểm
1. Việc ghi lại cường độ của từng pixel trong ảnh sẽ tạo ra các
vectơ hay ma trận đặc trưng lớn. Ví dụ : Một hình ảnh thang
độ xám 100 x 100 sẽ cần một vectơ 10.000 chiều và một ảnh
thang độ xám 1920 x 1080 sẽ yêu cầu một vectơ 2.073.600
chiều.
2. Xử lý theo cường độ của pixel tại các vị trí cụ thể khác nhau
dẫn đến các mô hình nhạy với những thay đổi về độ sáng, tỷ
lệ, xoay và dịch chuyển hình ảnh.
3. Khó sử dụng cho các bài toán nhận diện hay phát hiện liên
quan đến các đối tượng phức tạp.
• Nhận dạng ký tự quang học (OCR) là một vấn đề máy học tiêu
biểu cho việc sử dụng các đặc trưng được trích chọn từ cường
độ pixel.
Mẫu
• Chuẩn bị một bộ hình ảnh mẫu bao gồm từ 0 đến 9
Hình ảnh gốc
• Hình ảnh gốc gồm nhiều chữ số ở các vị trị khác nhau
Phép tính
• Hình ảnh mẫu trượt qua hình ảnh đầu vào
• Thực hiện chập theo TM_CCOEFF_NORMED:
Ví dụ nhận diện chữ viết tay bằng đặc trưng
từ cường độ pixel
• Sử dụng mô hình phân lớp tuyến tính SVM.
• Bộ dữ liệu chữ số đi kèm với scikit-learn chứa hình ảnh thang
độ xám của hơn 1.700 chữ số viết tay trong khoảng từ 0 đến 9.
Mỗi hình ảnh kích thước 8x8 mỗi phần tử trong khoảng 0 đến
16.
Hình ảnh gốc
Extracting points of interest
• Trực giác của con người có thể nhanh chóng nhận ra nhiều vật
thể dựa vào các đặc điểm đặc biệt mà không cần quan sát mọi
thuộc tính của vật thể. Đây là ý tưởng cho việc chỉ trích chọn
những điểm quan trọng trên hình ảnh.
• Cạnh và góc là hai loại điểm quan tâm phổ biến. Một cạnh là
một ranh giới mà tại đó cường độ điểm ảnh thay đổi nhanh
chóng và một góc là giao điểm của hai cạnh.
Ưu điểm
• Các đặc trưng được trích ra ít hơn đáng kể so với kích thước
ảnh mẫu.
• Các đặc trưng này ít bị ảnh hưởng bởi tỉ lệ, dịch chuyển.
• Có khả năng tái tạo nhờ vào các biến thể gần với các điểm đặc
trưng cho dù có ảnh hưởng của ánh sáng.
Khuyết điểm
• Tuy số lượng đặc trưng ít hơn so với kích thước hình ảnh,
nhưng tốc độ trích xuất chậm, chi phí tính toán và đối sánh cao
SIFT và SURF
• Scale-Invariant Feature Transform (SIFT) là phương pháp trích
xuất các đặc trưng từ một hình ảnh mà ít ảnh hưởng bởi tỷ lệ,
xoay và chiếu sáng của hình ảnh.

• Speeded-Up Robust Features (SURF) là một phương pháp


khác để trích xuất các điểm hữu ích của hình ảnh và tạo ra các
mô tả mà ít khả năng biến thiên về tỷ lệ, xoay và chiếu sáng
của hình ảnh hơn SIFT.
SIFT
• Đầu vào và đầu ra của phép biến đổi:
• Ảnh + SIFT -> Ảnh + keypoints
Keypoint
• Đặc trưng của SIFT gọi là keypoint.
• Keypoint là vùng hình ảnh tròn có hướng. Nó được mô tả bởi
một khung hình học gồm bốn tham số: tọa độ tâm điểm x và y,
tỉ lệ (bán kính của vùng) và hướng (một góc được biểu thị bằng
radian).
Keypoint
• SIFT coi các keypoint như các đốm màu (thường là các góc
trong hình ảnh), được phát hiện với cùng trên một hình ảnh
trong nhiều tỉ lệ khác nhau, vì vậy các keypoint là ít ảnh hưởng
bởi dịch chuyển, xoay và tỉ lệ.
Keypoint
import cv2
import numpy as np

img = cv2.imread("book.jpg")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
keypoints = sift.detect(img_gray, None)
cv2.drawKeypoints(img_gray, keypoints, img,
flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOIN
TS)
cv2.imwrite("img.jpg", img)
Cách tìm keypoint
• Bước đầu tiên là xác định vị trí cực đại và cực tiểu gần đúng
trên hình ảnh xám. Phép toán sẽ lặp lại qua từng pixel và kiểm
tra tất cả các điểm lân cận của nó, kết quả là vị trí và tỉ lệ mà tại
đó điểm được tìm thấy. Việc kiểm tra được thực hiện trên các
hình ảnh tỉ lệ khác nhau:
Cách tìm keypoint
• Bước thứ hai là tìm các điểm pixel phụ, điều này được thực
hiện bằng phép toán mở rộng hình ảnh xung quanh điểm chính
gần đúng. Keypoint vừa được tìm ở bước 1 sẽ được xác minh
lại với các điểm pixel phụ này.

• Một định hướng được gán cho từng keypoint để đạt được bất
biến đối với xoay hình ảnh. Một vùng lân cận được lấy xung
quanh vị trí keypoint tùy thuộc vào tỷ lệ, và cường độ và hướng
của độ dốc được tính trong vùng đó.
Descriptor
• Để phân biệt giữa các keypoint khác nhau, mỗi sẽ được mô tả
bởi một descriptor là một vector 128 chiều.
• Descriptor là biểu đồ trong không gian ba chiều của độ dốc
hình ảnh (HOG) mô tả cho sự xuất hiện của một keypoint.
Cách tạo một descriptor
• Đối với một keypoint, bọc vùng xung quanh nó theo hướng và tỉ
lệ và thay đổi kích thước vùng thành 16X16 pixel.
Cách tạo một descriptor
• Chia các pixel thành các ô vuông trong một ma trận 4X4, tính
độ dốc cho từng pixel theo kỹ thuật HOG.
Cách tạo một descriptor
• Mỗi ô trong ma trận 4x4 sẽ liệt kê độ dốc theo 8 hướng.
Descriptor
import cv2
import numpy as np

img = cv2.imread("book.jpg")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
keypoints = sift.detect(img_gray, None)
cv2.drawKeypoints(img_gray, keypoints, img,
flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imwrite("img.jpg", img)

keypoints, descriptors = sift.compute(img_gray, keypoints)


SURF
• Cơ bản giống SIFT nhưng bổ sung một số tính năng nhằm tăng
tốc độ, nhưng lại khá nhạy với đặc điểm tỉ lệ.

You might also like