Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Xử lý ảnh nhiễu bằng OpenCV trong đồ án
Hướng Dẫn Đồ ÁnLập Trình AI

Xử lý ảnh nhiễu bằng OpenCV trong đồ án

Chia sẻ
Chia sẻ

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.

import numpy as np

# Thêm Gaussian noise
row, col, ch = img.shape
mean = 0
sigma = 25
gauss = np.random.normal(mean, sigma, (row, col, ch))
noisy_img = img + gauss
noisy_img = np.clip(noisy_img, 0, 255).astype(np.uint8)

# Hiển thị ảnh nhiễu
noisy_rgb = cv2.cvtColor(noisy_img, cv2.COLOR_BGR2RGB)
plt.imshow(noisy_rgb)
plt.title('Ảnh có Gaussian noise')
plt.axis('off')
plt.show()

Lọc nhiễu bằng phương pháp lọc trung bình

Lọc trung bình là kỹ thuật làm mờ ảnh bằng cách lấy giá trị trung bình của các điểm ảnh xung quanh. Đây là phương pháp đơn giản nhất để giảm nhiễu.

# Áp dụng lọc trung bình
blur = cv2.blur(noisy_img, (5,5))

# Hiển thị ảnh sau lọc
blur_rgb = cv2.cvtColor(blur, cv2.COLOR_BGR2RGB)
plt.imshow(blur_rgb)
plt.title('Lọc trung bình')
plt.axis('off')
plt.show()

Lọc nhiễu bằng Gaussian filter

Gaussian filter sử dụng phân phối Gaussian để tính toán trọng số, giúp làm mờ ảnh nhưng giữ lại nhiều chi tiết hơn so với lọc trung bình.

# Áp dụng Gaussian filter
gaussian_blur = cv2.GaussianBlur(noisy_img, (5,5), 0)

# Hiển thị ảnh sau lọc
gaussian_rgb = cv2.cvtColor(gaussian_blur, cv2.COLOR_BGR2RGB)
plt.imshow(gaussian_rgb)
plt.title('Gaussian filter')
plt.axis('off')
plt.show()

Lọc median để xử lý nhiễu muối tiêu

Median filter đặc biệt hiệu quả với salt-and-pepper noise vì nó thay giá trị pixel bằng giá trị trung vị của vùng lân cận.

# Áp dụng Median filter
median_blur = cv2.medianBlur(noisy_img, 5)

# Hiển thị ảnh sau lọc
median_rgb = cv2.cvtColor(median_blur, cv2.COLOR_BGR2RGB)
plt.imshow(median_rgb)
plt.title('Median filter')
plt.axis('off')
plt.show()

Lọc Bilateral để giữ biên cạnh

Bilateral filter là phương pháp nâng cao giúp loại bỏ nhiễu nhưng vẫn giữ được các cạnh sắc nét.

# Áp dụng Bilateral filter
bilateral_blur = cv2.bilateralFilter(noisy_img, 9, 75, 75)

# Hiển thị ảnh sau lọc
bilateral_rgb = cv2.cvtColor(bilateral_blur, cv2.COLOR_BGR2RGB)
plt.imshow(bilateral_rgb)
plt.title('Bilateral filter')
plt.axis('off')
plt.show()

So sánh các phương pháp lọc

Sau khi áp dụng các phương pháp lọc khác nhau, bạn có thể đặt chúng cạnh nhau để so sánh và lựa chọn phương pháp phù hợp cho bài toán của mình.

fig, axs = plt.subplots(1, 4, figsize=(20,5))
titles = ['Lọc trung bình', 'Gaussian filter', 'Median filter', 'Bilateral filter']
images = [blur_rgb, gaussian_rgb, median_rgb, bilateral_rgb]

for i in range(4):
    axs[i].imshow(images[i])
    axs[i].set_title(titles[i])
    axs[i].axis('off')
plt.show()

Kết luận

Xử lý ảnh nhiễu là một bước quan trọng trong bất kỳ bài toán xử lý ảnh nào, đặc biệt là khi dữ liệu đến từ môi trường thực tế. OpenCV cung cấp nhiều phương pháp lọc mạnh mẽ để giảm nhiễu và cải thiện chất lượng ảnh. Trong bài viết này, chúng ta đã áp dụng lọc trung bình, Gaussian filter, Median filter và Bilateral filter để xử lý ảnh nhiễu. Việc lựa chọn phương pháp phù hợp phụ thuộc vào loại nhiễu và yêu cầu bảo toàn chi tiết của bài toán.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!