Nhận dạng hình ảnh trước đây dùng các phương pháp đơn giản hơn như hồi quy tuyến tính và so sánh độ tương đồng. Kết quả rõ ràng không tốt, ngay cả nhiệm vụ đơn giản nhận dạng chữ cái viết tay cũng khó khăn. Mạng nơ-ron chập (CNN) được coi là bước tiến so với phương pháp truyền thống bằng cách cung cấp phương pháp tính toán tiết kiệm mô phỏng lỏng lẻo hoạt động nơ-ron của não người khi nhận biết hình ảnh.
Tổng quan về mạng nơ-ron chập

Rất tương tự như cách chúng ta nhận biết vật thể, thuật toán máy tính cần duyệt qua hàng triệu hình ảnh trước khi có thể khái quát hóa đầu vào và đưa ra phán đoán về hình ảnh chưa từng thấy.
Máy tính nhìn mỗi hình ảnh như mảng 2D số, gọi là pixel. Để nhận diện vật thể, máy tính dùng loại Mạng nơ-ron nhân tạo đặc biệt: Mạng nơ-ron chập (CNN). CNN đến từ một trong những phép toán quan trọng nhất trong mạng: convolution (chập).
Trong CNN, các lớp được tổ chức theo chiều rộng, chiều cao và chiều sâu. Chập là phần chính của CNN, kết hợp hai hàm để tạo hàm thứ ba (gộp hai tập thông tin). Nghĩa là xem xét một phép chập (image convolution) nơi ta đơn giản nhân hai ma trận phần tử theo phần tử (element-wise) sau đó cộng tổng.
Một phép chập trong xử lý hình ảnh là thủ tục 3 bước:
- Lấy hình ảnh đầu vào.
- Ma trận kernel (bộ lọc) áp dụng lên hình ảnh đầu vào.
- Hình ảnh cuối cùng lưu kết quả của hình ảnh đầu vào chập với kernel.
Dưới đây là triển khai nhỏ của bộ lọc Sobel dùng OpenCV, một bộ lọc xử lý hình ảnh để phát hiện cạnh.
Mã ví dụ
import cv2
import numpy as np
img = cv2.imread('beach.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).astype(float)
edge_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
edge_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
edge = np.sqrt(edge_x ** 2 + edge_y ** 2)
# Hình ảnh có thể chuẩn hóa để
# vừa vặn không gian màu 0..255
cv2.imwrite('beach_convol.jpg', edge)
Hình ảnh đầu vào

Hình ảnh đầu ra
