Hi, I am

Ngô Tôn

I am a programmer.

Home / HCMUS / Parallel Programming on a GPU / Tích chập trong bài toán làm mờ ảnh – Lập trình song song trên GPU bằng CUDA

Tích chập trong bài toán làm mờ ảnh – Lập trình song song trên GPU bằng CUDA

Chúng ta đã tìm hiểu 3 bài toán cơ bản thường gặp và hay dùng đó là Cộng 2 vector, Nhân 2 ma trậnTính tổng các phần tử của mảng. Chúng ta cũng đã biết viết chương trình bằng CUDA và cách để song song hóa 1 thuật toán hay 1 chương trình để chạy trên GPU.

Hôm nay, chúng ta sẽ cùng nhau tìm hiểu phép tính tích chập (Convolution) để áp dụng vào bài toán làm mờ ảnh. Phép tích chập được sử dụng rất nhiều trong AI, Machine Learning, Deep Learning…

Tích chập (Convolution)

Tích chập (Convolution) là 1 phép toán thực hiện đối với 2 hàm số f và g, kết quả cho ra 1 hàm số thứ 3. Nó được ứng dụng trong xác suất, thống kê, thị giác máy tính (computer vision), xử lý ảnh, xử lý tín hiệu, kỹ thuật điện, học máy, và các phương trình vi phân.

Trong xử lý ảnh, được sử dụng chính yếu trong các phép toán trên ảnh như: đạo hàm ảnh, làm mờ, làm trơn ảnh, trích xuất biên cạnh trong ảnh.

Ở phần sau chúng ta sẽ áp dụng tính tích chập vào bài toán làm mờ ảnh.

Làm mờ ảnh (Blur)

Trong xử lý ảnh, phép làm mờ ảnh được dùng rất nhiều và có nhiều vai trò quan trọng. Hiệu ứng làm mờ áp dụng trong các trường hợp:

  • Giảm nhiễu (noise) trong ảnh
  • Làm trơn ảnh (smooth)

Tính toán xử lý cho phép biến đổi làm mờ ảnh chính là dùng toán tử convolution để áp cửa sổ hay bộ lọc lên ảnh gốc.

Việc làm mờ ảnh hình dung thực hiện bằng việc dịch chuyển ma trận kernel lần lượt qua tất cả các điểm ảnh (pixel) trong ảnh, bắt đầu từ góc bên trái trên của ảnh. Và đặt anchor point tương ứng tại điểm ảnh đang xét. Ở mỗi lần dịch chuyển, thực hiện tính toán kết quả mới cho điểm ảnh đang xét bằng công thức tích chập.

Kích thước cửa sổ của các bộ lọc (Filter) làm thường là 3, 5, 7, 9, … Chính vì kích thước lẻ nên ta sẽ chỉ có 1 pixel ở trung tâm kernel.

Việc chọn kích thước bộ lọc thường dựa vào kích thước ảnh đầu vào và kinh nghiệm. Kernel thường được thiết kế hình vuông (tức width = height).

Bây giờ, chúng ta cùng thực hiện code bài toán làm mờ ảnh để chạy trên CPU và GPU nhé.

Ta có thông số về chiều cao (height) và chiều rộng (width) của ảnh. Giá trị RBG trên mỗi pixel mình xem như đã có và được lưu trong inPixels.

Ta chọn bộ lọc kích thước 9×9

Hàm làm mờ ảnh

Bây giờ chúng ta chuyển hàm làm mờ ảnh sang CUDA để chạy song song trên GPU.

Mình chạy thử với block size 32×32

Các bạn chạy thử xem sao nhé!

About ngoton

Ngô Tôn is a programmer with passion for tailored software solutions. Comes with 7+ years of IT experience, to execute beautiful front-end experiences with secure and robust back-end solutions.

Check Also

Cộng 2 vector – Lập trình song song trên GPU bằng CUDA

Mục lục Nội dungThực hiệnKết quả Bài viết đầu tiên trong chuỗi bài viết về …

Leave a Reply

avatar
  Subscribe  
Notify of