Nhận dạng hình ảnh từng được thực hiện bằng cách sử dụng các phương pháp đơn giản hơn nhiều như hồi quy tuyến tính và so sánh các điểm tương đồng. Kết quả rõ ràng là không tốt lắm, ngay cả nhiệm vụ đơn giản là nhận dạng các bảng chữ cái viết tay cũng tỏ ra khó khăn. Mạng nơ-ron chuyển đổi (CNN) được cho là một bước tiến so với những gì chúng ta làm truyền thống bằng cách cung cấp một phương pháp tính toán rẻ tiền để mô phỏng lỏng lẻo các hoạt động thần kinh của não người khi nó nhận thức hình ảnh.
Tổng quan về mạng nơ-ron chuyển đổi
Tương tự như cách chúng ta nhận ra các đối tượng khác nhau, các thuật toán máy tính cần phải xem qua hàng triệu hình ảnh trước khi có thể tổng quát hóa đầu vào và đưa ra phán đoán về hình ảnh mà nó chưa từng thấy trước đây.
Máy tính xem mọi hình ảnh dưới dạng mảng số 2D, được gọi là pixel. Để xác định các đối tượng trong hình ảnh, máy tính sử dụng loại Mạng thần kinh nhân tạo đặc biệt:Mạng thần kinh kết hợp (CNN). CNN xuất phát từ một trong những hoạt động quan trọng nhất trong mạng:tích chập.
Trong mạng nơ ron tích tụ, mỗi lớp được tổ chức thành chiều rộng, chiều cao và chiều sâu. Chuyển đổi là phần chính của CNN, kết hợp hai chức năng để tạo ra một chức năng thứ ba (hợp nhất hai tập hợp thông tin). Nó có nghĩa là hãy xem xét một (hình ảnh) tích chập trong đó chúng ta chỉ cần nhân hai ma trận theo phần tử theo sau với một tổng.
Tích chập là một quy trình ba bước trong xử lý hình ảnh -
-
Chúng tôi lấy hình ảnh đầu vào.
-
Ma trận hạt nhân mà chúng ta sẽ áp dụng cho hình ảnh đầu vào.
-
Và hình ảnh cuối cùng để lưu trữ đầu ra của hình ảnh đầu vào được kết hợp với hạt nhân.
Dưới đây là cách triển khai nhỏ của bộ lọc sobel sử dụng opencv là bộ lọc xử lý hình ảnh để phát hiện cạnh.
Mã mẫu
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) # image can be normalized to # fit into 0..255 color space cv2.imwrite('beach_convol.jpg', edge)
Hình ảnh đầu vào
Hình ảnh đầu ra