Trong xử lý ảnh, nhiễu là một vấn đề phổ biến gây ảnh hưởng trực tiếp đến chất lượng hình ảnh và kết quả của các thuật toán thị giác máy tính. Việc xử lý ảnh nhiễu không chỉ giúp cải thiện chất lượng hình ảnh mà còn nâng cao độ chính xác cho các bài toán như nhận diện khuôn mặt, phát hiện vật thể hay phân tích y tế. OpenCV, thư viện xử lý ảnh mã nguồn mở mạnh mẽ, cung cấp rất nhiều công cụ để lọc và giảm nhiễu hiệu quả.
Nếu bạn đang bắt đầu với xử lý dữ liệu, hãy tham khảo trước bài Hướng dẫn tiền xử lý dữ liệu sạch để huấn luyện mô hình tốt hơn để hiểu về tầm quan trọng của dữ liệu chất lượng. Ngoài ra, bài Phân tích dữ liệu bán hàng bằng Python và Pandas sẽ giúp bạn làm quen với thao tác dữ liệu trong Python, còn bài Tạo mô hình phát hiện cảm xúc từ văn bản bằng NLP sẽ mở rộng hiểu biết của bạn về xử lý dữ liệu phi cấu trúc.
Giới thiệu về nhiễu trong ảnh
Nhiễu trong ảnh là những tín hiệu không mong muốn làm biến dạng hoặc che khuất thông tin gốc. Có nhiều loại nhiễu khác nhau, bao gồm Gaussian noise (nhiễu ngẫu nhiên theo phân phối chuẩn), Salt-and-pepper noise (nhiễu muối tiêu) và Speckle noise (nhiễu lốm đốm). Việc hiểu bản chất của từng loại nhiễu sẽ giúp lựa chọn phương pháp lọc phù hợp.
Trong bài viết này, chúng ta sẽ thực hành xử lý ảnh nhiễu bằng Python và OpenCV. Các phương pháp được sử dụng gồm lọc trung bình, lọc Gaussian, lọc median và bilateral filter.
Chuẩn bị môi trường
Python kết hợp với OpenCV là bộ đôi mạnh mẽ để xử lý ảnh. Bạn có thể thực hiện trên Google Colab để không phải cài đặt phức tạp. Truy cập https://colab.research.google.com và tạo một notebook mới.
Cài đặt các thư viện cần thiết nếu bạn dùng Jupyter Notebook:
!pip install opencv-python matplotlib numpy
Tải và hiển thị ảnh
Để thực hành, bạn có thể tải một ảnh bất kỳ từ Internet hoặc sử dụng ảnh mẫu có sẵn trong OpenCV. Trong ví dụ này, chúng ta sẽ sử dụng ảnh “Lena” nổi tiếng.
import cv2
import matplotlib.pyplot as plt
# Tải ảnh
img = cv2.imread(cv2.samples.findFile("lena.jpg"))
# Chuyển màu BGR sang RGB
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# Hiển thị ảnh
plt.imshow(img_rgb)
plt.title('Ảnh gốc')
plt.axis('off')
plt.show()
Thêm nhiễu vào ảnh để mô phỏng dữ liệu thực tế
Trong thực tế, ảnh thường bị nhiễu do điều kiện ánh sáng kém hoặc lỗi từ thiết bị ghi hình. Để mô phỏng, chúng ta sẽ thêm Gaussian noise và salt-and-pepper noise vào ảnh.

