Site icon Blog Dương Trạng

1.1. Giới thiệu tổng quan

Có nhiều phương pháp khác nhau để xử lý hình ảnh trong lĩnh vực thị giác máy tính. Trong việc phân loại ảnh, chúng ta có thể sử dụng nhiều mô hình khác nhau như CNN (Inception Net, Mobile Net, Resnet, Dense Net, Alexnet, Unet, …) và khi phát hiện đối tượng, ta dùng các mô hình như YOLO, SSD, Faster RCNN, Fast RCNN, Mask RCNN.

Các thuật toán được nêu trên đều là các thuật toán deep learning. Trước khi deep learning trở nên phổ biến, thuật toán nào được sử dụng thường xuyên trong xử lý ảnh? Hôm nay, chúng ta sẽ tìm hiểu về thuật toán cổ điển nhưng vẫn hiệu quả trong xử lý ảnh, đó chính là HOG (histogram of oriented gradient).

Thuật toán này tạo ra các bộ mô tả đặc trưng để phát hiện đối tượng. Từ một ảnh, ta lấy ra 2 ma trận quan trọng để lưu trữ thông tin: độ lớn gradient (gradient magnitude) và phương của gradient (gradient orientation). Hai thông tin này được kết hợp vào biểu đồ histogram, trong đó, độ lớn gradient được đếm theo các nhóm bins có phương gradient. Kết quả cuối cùng là một véc tơ đặc trưng HOG đại diện cho histogram. Cụ thể, trong thực tế, thuật toán còn phức tạp hơn khi véc tơ HOG được tính trên từng vùng cục bộ giống như mạng CNN và sau đó chuẩn hóa các vùng cục bộ để đồng nhất độ đo. Cuối cùng, véc tơ HOG tổng hợp từ các véc tơ trên các vùng cục bộ.

Trên đây là lý giải ngắn gọn về nguyên tắc hoạt động của HOG. Ban đầu có thể hơi khó hiểu nhưng đừng lo lắng. Chúng ta sẽ hiểu rõ hơn sau khi đọc chương 2, lý giải chi tiết về thuật toán HOG.

1.2. Ứng dụng của HOG

HOG được sử dụng trong các tác vụ cụ thể như thế nào? Dưới đây là một số tác vụ đã áp dụng HOG thành công và đạt được độ nhận diện cao:

1.3. Thuật ngữ

Trước khi tìm hiểu thuật toán HOG, chúng ta cần hiểu các thuật ngữ sau:

[theta = text{acrtan}(frac{G_y}{G_x})]

[|G| = sqrt{G_x^{2}+G_{y}^2}]

Điểm quan trọng trong nguyên lý hoạt động của HOG là hình dạng của một vùng cục bộ có thể được mô tả bằng hai ma trận độ lớn gradient (gradient magnitude) và phương gradient (gradient direction). Vậy hai ma trận gradient này được tạo ra như thế nào? Trước hết, hình ảnh được chia thành một lưới ô vuông và chúng ta xác định nhiều vùng cục bộ liền kề hoặc lấn lướt nhau. Các vùng này tương tự như việc tính toán tích chập trong mạng CNN. Mỗi vùng cục bộ bao gồm nhiều ô cục bộ (trong thuật toán HOG là 4) với kích thước 8×8 pixels. Sau đó, chúng ta tính toán biểu đồ histogram cho độ lớn gradient trên mỗi ô và tìm hiểu cách tính được giá trị này ở mục 2.1 sau. Bộ mô tả HOG được tạo ra bằng cách nối các véc tơ histogram ứng với mỗi ô. Để cải thiện độ chính xác, mỗi giá trị của véc tơ histogram trên vùng cục bộ sẽ được chuẩn hóa bằng norm chuẩn bậc 2 hoặc norm chuẩn bậc 1. Việc chuẩn hóa này giúp tạo ra sự bất biến với sự thay đổi ánh sáng và đổ bóng.

Bộ mô tả HOG có một vài lợi thế so với các bộ mô tả đặc trưng khác. Vì nó hoạt động trên các ô cục bộ, nên nó không bị ảnh hưởng bởi các biến đổi hình học hoặc thay đổi ánh sáng. Thêm vào đó, như Dalal và Triggs đã phát hiện, khi sử dụng phép chuẩn hóa trên vùng cục bộ, chuyển động của cơ thể của người đi bộ có thể bị loại bỏ miễn là giữ vững tư thế thẳng đứng. Do đó, bộ mô tả HOG rất phù hợp trong việc phát hiện con người trong hình ảnh.

2.1. Thuật toán HOG

2.1.1. Tính toán gradient

Trong hầu hết các thuật toán xử lý ảnh, bước đầu tiên là tiền xử lý dữ liệu ảnh. Chúng ta cần chuẩn hóa màu sắc và giá trị gamma. Tuy nhiên, trong tính toán bộ mô tả HOG, bước này có thể được bỏ qua vì việc chuẩn hóa bộ mô tả sẽ đạt được kết quả tương tự. Thay vào đó, ta tính toán các giá trị gradient tại bước đầu của quá trình tính toán bộ mô tả HOG. Cách thức tính toán này sử dụng các mặt nạ đạo hàm rời rạc theo chiều ngang và chiều dọc. Thường sử dụng các bộ lọc như Sobel mask hoặc Scharr mask để thực hiện các tích chập.

Chúng ta sẽ tính gradient bằng cách áp dụng bộ lọc Sobel, kí hiệu $mathbf{{I}}$ là ma trận ảnh gốc và $G_x, G_y$ là hai ma trận ảnh có giá trị gradient theo chiều $x$ và $y$. Kích thước kernel (khối lõm cái) là $3×3$ và ta sẽ tính toán như sau:

[G_x = begin{bmatrix} -1 & 0 & 1 -2 & 0 & 2 -1 & 0 & 1 end{bmatrix} * mathbf{{I}}]

[G_y = begin{bmatrix} -1 & -2 & -1 0 & 0 & 0 1 & 2 & 1 end{bmatrix} * mathbf{{I}}]

Kí hiệu $ast$ tượng trưng cho phép tích chập giữa bộ lọc Sobel và ảnh gốc. Cuối cùng, ta sẽ có hai ma trận gradient là $G_x$ và $G_y$, được tính từ hai đạo hàm theo chiều ngang và chiều dọc của ảnh.

Chúng ta có thể tính toán giá trị độ lớn gradient (gradient magnitude) và phương gradient (gradient direction) từ hai ma trận $G_x$ và $G_y$ bằng công thức sau:

[G = sqrt{G_x^2 + G_y^2}]

[theta = text{acrtan}(frac{G_y}{G_x})]

Hiện nay, việc tính toán gradient rất dễ dàng với các thư viện như sklearn hoặc OpenCV:

2.1.2. Các bước tính toán HOG

Nguyên tắc tính toán HOG gồm các bước sau:

Bước 1: Tạo bộ mô tả đặc trưng dựa trên thuật toán HOG:

Chúng ta chia ảnh thành một lưới ô vuông với mỗi ô có kích thước 8×8 pixel. Như vậy, chúng ta có tổng cộng 64 ô vuông tương ứng với 64 ô cục bộ. Trên mỗi ô cục bộ, chúng ta tính toán hai thông số: độ lớn gradient (gradient magnitute) và phương gradient (gradient orientation). Thông tin này được kết hợp để tạo ra biểu đồ histogram, nơi độ lớn gradient được đếm theo các nhóm bins của phương gradient. Cuối cùng, ta thu được một véc tơ đặc trưng HOG đại diện cho histogram. Trên thực tế, thuật toán còn phức tạp hơn khi tính toán véc tơ HOG trên từng vùng cục bộ tương tự như mạng CNN. Cuối cùng, véc tơ HOG tổng hợp từ các véc tơ trên vùng cục bộ.

Bước 2: Chuẩn hóa véc tơ histogram theo block 16×16:

Chúng ta chuẩn hóa véc tơ histogram bằng cách chia cho norm chuẩn bậc 2 hoặc norm chuẩn bậc 1. Việc chuẩn hóa này giúp đồng nhất các giá trị cường độ màu sắc vào cùng một phân phối. Chuẩn hóa được thực hiện trên block kích thước 16×16 pixel. Từ các véc tơ histogram tổng hợp trên các vùng cục bộ, chúng ta thu được véc tơ HOG tổng hợp.

Bước 3: Tính toán véc tơ đặc trưng HOG:

Từ véc tơ HOG tổng hợp, chúng ta thu được véc tơ đặc trưng HOG tổng hợp đại diện cho toàn bộ bức ảnh. Ví dụ, nếu chúng ta chia bức ảnh thành lưới ô vuông kích thước 16×8, ta sẽ có các block kích thước 2×2. Bước giữa các block sẽ di chuyển 8 pixels. Trên mỗi block, chúng ta có 4 véc tơ histogram, tổng cộng sẽ có 105×36 chiều cho toàn bộ bức ảnh. Đây là một véc tơ kích thước tương đối lớn để mô phỏng đặc trưng của bức ảnh.

Chúng ta cũng có thể biểu diễn phân phối HOG trên ảnh. Theo mỗi ô vuông trong

Exit mobile version