Xử lý ảnh hay còn gọi là thị giác máy (Computer Vision) là một lĩnh vực liên quan đến việc xử lý các dữ liệu thu được từ ảnh để giúp máy tính có được các thông tin cần thiết từ ảnh. Từ góc nhìn kỹ thuật thì nhiệm vụ của xử lý ảnh là cố gắng tiếp cận với sự tự động hóa mà hệ thống thị giác của con người có thể thực hiện. Các nhiệm vụ của xử lý ảnh bao gồm thu thập, xử lý, phân tích và hiểu được các loại ảnh, và từ đó trích lọc ra các lớp dữ liệu về thế giới thực để có thể thu được dữ liệu dạng số. Các lĩnh vực con của xử lý ảnh bao gồm tái tạo cảnh, phát hiện sự kiện, nhận diện vật thể, ước lượng chuyển động. Xử lý ảnh được ứng dụng rộng rãi trong nhiều lĩnh vực từ gia đình cho đến công nghiệp. Một số ứng dụng của xử lý ảnh có thể được kể đến như:
• Tự động chẩn đoán.
• Trợ giúp con người trong các nhiệm vụ phân loại, nhận diện.
• Kiểm soát, điều khiển quá trình.
• Phát hiện sự kiện.
• Tương tác.
• Mô hình hóa đối tượng hoặc môi trường xung quanh.
• Định hướng.
Chúng ta sử dụng thư viện mã nguồn mở OpenCV (Open Source Computer Vision Library) phiên bản 3.2 để hỗ trợ trong quá trình xử lý ảnh. Đây là một thư viện có thể được áp dụng khi sử dụng các ngôn ngữ lập trình khác nhau như C++ hay Python.
OpenCV bao gồm hơn 2500 thuật toán xử lý ảnh và thuật toán máy học (machine learning) đã được tối ưu. Các thuật toán này có thể được sử dụng để nhận diện khuôn mặt, phân biệt vật thể, phân loại hành động của con người, truy bắt chuyển động của vật thể hay giải quyết rất nhiều các bài toán xử lý ảnh và máy học khác.
Hình 2.47. Các module chính trong thư viện OpenCV OpenCV gồm các module chính như trên hình:
• Module CV hỗ trợ quá trình xử lý ảnh.
• Module MLL gồm các công cụ thống kê, phân loại hỗ trợ quá trình máy học (machine learning).
• HighGUI hỗ trợ quá trình tạo giao diện, tương tác với người dùng.
• CXCore bao gồm các cấu trúc dữ liệu cơ bản. Một số khái niệm và thuật ngữ quan trọng về xử lý ảnh:
➢ Điểm ảnh (Pixel): Điểm ảnh là đơn vị nhỏ nhất tạo thành ảnh. Mỗi ảnh có thể coi như một tập hợp gồm nhiều điểm ảnh. Ảnh có độ phân giải càng cao thì sẽ chứa càng nhiều điểm ảnh dù cùng một kích thước. Ảnh có độ phân giải càng cao thì độ sắc nét và chi tiết càng gần với thực tế, nhưng khi được xử lý sẽ khiến tốc độ chương trình chậm đi do khối lượng dữ liệu nhiều hơn.
➢ Ảnh số (Digital Image): Đây là các ảnh đã được số hóa nhằm phục vụ quá trình lưu trữ hoặc xử lý, trích xuất dữ liệu. Có thể coi ảnh số là một ma trận nhiều chiều chứa dữ liệu đã được số hóa của ảnh.
➢ Không gian màu: Có nhiều cách khác nhau để đánh giá một màu sắc được tạo thành từ những yếu tố nào. Và mỗi cách đánh giá, biểu diễn đó là một không gian màu. Do đó, cùng một ảnh nhưng có thể có ma trận dữ liệu khác nhau khi lưu trữ ở không gian màu khác nhau. Có hai không gian màu cơ bản thường được sử dụng là RGB và HSV.
▪ Trong không gian màu RGB, mỗi màu sắc cụ thể đều có thể coi như một sự pha trộn kết hợp theo một tỉ lệ nhất định giữa ba màu cơ bản là Đỏ (Red), Lục (Green) và Lam (Blue). Ảnh số thu được trên OpenCV bao giờ mặc định cũng được lưu trên không gian màu này. ▪ Trong không gian màu HSV thì mỗi màu sắc cụ thể lại được coi như
sự kết hợp giữa ba yếu tố là Sắc thái (Hue), Độ bão hòa màu (Saturtion) và Cường độ sáng (Value -Brightness). Trong đó, Hue sẽ quyết định giá trị màu sắc cơ bản, Saturation sẽ quyết định độ đậm nhạt của màu (mức độ có mặt của màu, hay còn gọi là độ bão hòa màu) và giá trị Value sẽ quyết định mức độ sáng tối của màu. Việc phân chia theo ba yếu tố như vậy rất thuận lợi trong các ứng dụng liên quan đến việc nhận diện màu sắc, do đó ảnh số ở không gian màu RGB thường được chuyển sang không gian màu HSV.
➢ Ảnh xám (grey scale image) và ảnh nhị phân (binary image): Khác với ảnh màu, ảnh xám là ảnh được lưu ở không gian một chiều, mỗi pixel có giá trị từ 0 đến 255 thể hiện mức xám khác nhau. Ảnh xám được tạo ra từ sự kết hợp giữa các thành phần không gian màu của ảnh màu. Ảnh nhị phân là ảnh một chiều mà mỗi điểm ảnh chỉ có hai giá trị là 0 hoặc 1.
Hình 2.48. Không gian màu HSV