Computer Vision - Image Processes - Area Processes - Convolution
Bài đăng này đã không được cập nhật trong 3 năm
I. Introduction
- Bài trước chúng ta đã tìm hiểu về phương pháp xử lý ảnh point processes (xử lý theo điểm), hôm nay chúng ta sẽ đi tìm hiểu "convolution" hay còn gọi là tích chập, một bước rất quan trọng và cực kỳ hữu dụng trong phương pháp area processes (tức xử lý theo vùng), có ứng dụng rất lớn trong việc: đạo hàm ảnh, xóa nhiễu ảnh, xác định biên của ảnh trong các bài toán nhận dạng...
II. Convolution
-
Đối với phép lọc ảnh, phép tích chập giữa ma trận lọc (kernel) và ảnh cho ra kết quả ảnh đã được xóa nhiễu.
-
Ta có công thức tích chập giữa hàm ảnh f(x, y) và bộ lọc k(x, y) (kích thước mxn) như sau:
-
Thành phần không thể thiếu của phép tích chập là ma trận kernel. Điểm neo (anchor point) của kernel sẽ quyết định vùng ma trận tương ứng trên ảnh để tích chập, thông thường anchor point được chọn là tâm của kernel. Giá trị mỗi phần tử trên kernel được xem như là hệ số tổ hợp với lần lượt từng giá trị độ xám của điểm ảnh trong vùng tương ứng với kernel.
-
Phép tích chập được 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 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.
-
Để hiểu rõ hơn chúng ta hãy theo dõi ảnh sau:
-
Cứ làm lần lượt theo thứ tự từ trái sang phải từ trên xuống dưới cho đến khi kết thúc. Chú ý: Có 1 vấn đề là tại 1 số điểm của ma trận kernel sẽ nằm bên ngoài ma trận ảnh khi ma trận này quét qua, thì tại những điểm đó chúng ta sẽ lấy giá trị của nó là 0 .
-
Thuật toán áp dụng:
-
Ví dụ sau khi lọc ảnh:
-
Nhược điểm và cách khắc phục:
- Convolution vẫn còn là một kỹ thuật với độ phức tạp tính toán cao. Một số cách dưới đây có thể tối ưu tốc độ của convolution:
- Mỗi phần tử trong ma trận kernel nên là số nguyên: như trong ví dụ trên, các phần tử trong kernel thực ra là số thực, tuy nhiên, tôi thực hiện chuyển sang ma trận số nguyên với số hạng chung cho tất cả các phần tử, kết quả tích chập sẽ nhân cho số hạng chung này. Kernel nên thực hiện lưu trong mảng một chiều. Tạo ma trận chỉ số truy cập nhanh, với cách này có thể truy cập nhanh đến pixel trên ảnh, tương ứng với kernel mà không cần tính toán chỉ số thêm lần nữa. Ví dụ, với kernel (size: 3x3, anchor point: center)
III. Tổng kết
- Tích chập thực sự là một công cụ vô cùng đắc lực trong xử lý ảnh theo vùng (area processes), hiểu được nó sẽ giúp chúng ta rất dễ dàng thực hiện được các bài toán khó hơn sau này.
All rights reserved