Làm chủ kỹ thuật nâng cấp chất lượng hình ảnh bằng OpenCV

Làm sạch ảnh là kỹ thuật đáng giá mà mọi nhà thiết kế đều nên biết. Bạn có thể làm chủ những kỹ thuật tăng cường chất lượng ảnh bằng OpenCV.

Nâng cao chất lượng ảnh trong OpenCV

Image enhancement - Nâng cao chất lượng ảnh là một công cụ quan trọng cho thị giác máy tính và các ứng dụng chỉnh sửa ảnh. Nó nhắm tới mục tiêu cải thiện chất lượng hình ảnh.

Bằng cách nâng cao chất lượng ảnh, độ chính xác và tin cậy trong kỹ thuật phân tích và xử lý ảnh cũng được tăng lên đáng kể. Điều này đặc biệt quan trọng trong phát hiện, nhận diện, phân đoạn và theo dõi ứng dụng.

Nâng cao chất lượng ảnh còn hữu ích khi những nhân tố như điều kiện ánh sáng thấp, nhiễu cảm biến, nhòe chuyển động hay lỗi đường truyền làm giảm chất lượng ảnh.

Thiết lập môi trường

Bắt đầu bằng cách thiết lập môi trường Python, sau đó chạy lệnh terminal sau để cài thư viện OpenCV. Bạn sẽ dùng OpenCV để tải và xử lý ảnh ban đầu và lưu ảnh đã được cải tiến sau cùng.

pip install opencv-python

Bạn sẽ dùng Matplotlib để hiện 2 ảnh. Cài đặt nó bằng lệnh này:

pip install matplotlib

Cuối cùng, cài NumPy mà bạn sẽ dùng cho các toán tử số bao gồm tạo bảng tra cứu để chỉnh sửa gamma, và xác định chi tiết làm sắc nét ảnh.

pip install numpy

Sau khi đã cài đặt những thư viện này trong môi trường của bạn, bạn đã sẵn sàng code.

Nhập thư viện cần thiết

Nhập thư viện đã cài trước đó trong môi trường của bạn:

import cv2
import matplotlib.pyplot as plt
import numpy as np

Lưu ý rằng bạn cần nhập OpenCV dưới dạng cv2. Đây là ví dụ thực hành chuẩn nhắm tới việc đảm bảo khả năng tương thích code và dễ hiểu với các lập trình viên khác.

Tải và hiện ảnh gốc

Bắt đầu bằng cách tải ảnh gốc bằng hàm cv2.imread. Đây là ảnh nhập vào để chương trình áp dụng các kỹ thuật nâng cao chất lượng ảnh. Sau đó, hiện nó bằng các hàm Matplotlib phù hợp:

image = cv2.imread('example.jpg')
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.show()

Hiện ảnh gốc sẽ giúp bạn so sánh kết quả của chương trình sau:

Ảnh gốc

Giảm nhiễu trong ảnh

Giảm nhiễu là kỹ thuật loại bỏ các chi tiết méo, nhiễu ngẫu nhiên trong ảnh. Kết quả cho tác phẩm mượt mà hơn. OpenCV cung cấp chức năng fastNlMeansDenoisingColored cho mục đích này. Nó dùng thuật toán phương tiện phi cục bộ để loại bỏ các điểm nhiễu trong khi vẫn giữ được chi tiết hình ảnh.

# Áp dụng nâng cao chất lượng ảnh
# Khử nhiễu ảnh
denoised_image = cv2.fastNlMeansDenoisingColored(image, None, 10, 10, 7, 21)

fastNlMeansDenoisingColored xem xét một số tham số, bao gồm ảnh, độ mạnh bộ lọc, kích thước cửa sổ mẫu & cửa sổ tìm kiếm. Bạn có thể thử nghiệm các giá trị khác nhau để nhận được kết quả như ý.

Kéo giãn tương phản để cải thiện khả năng hiển thị

Kéo giãn tương phản hay còn gọi là chuẩn hóa. Nó kéo giãn giá trị mật độ để kéo dài một phạm vi nhất định. Điều này lần lượt cải thiện khả năng hiển thị của các chi tiết trong ảnh.

Bạn có thể áp dụng kéo giãn tương phản để khử nhiễu ảnh bằng normalize của OpenCV:

# Thực hiện kéo giãn tương phản
contrast_stretched_image = cv2.normalize(denoised_image, None, 255, 0, cv2.NORM_MINMAX, cv2.CV_8UC1)

Cách làm sắc nét ảnh

Làm sắc nét ảnh nâng cao các cạnh và chi tiết trong ảnh, giúp cải thiện độ sắc nét.

# Làm sắc nét ảnh
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
sharpened_image = cv2.filter2D(contrast_stretched_image, -1, kernel=kernel)

Code trên tạo một ma trận hạt nhân làm nổi bật các cạnh và chi tiết trong ảnh. Hàm cv2.filter2D áp dụng kernel cho ảnh được kéo giãn tương phản, làm sắc nét hình ảnh.

Điều chỉnh độ sáng để cải thiện độ phơi sáng

Các điều khiển điều chỉnh độ sáng kiểm soát độ sáng tổng thể của ảnh. Nó giúp ảnh trông hấp dẫn và được phơi sáng tốt.

# Điều chỉnh độ sáng
brightness_image = cv2.convertScaleAbs(sharpened_image, alpha=1, beta=5)

Hàm cv2.convertScaleAbs điều chỉnh độ sáng của ảnh. Tham số alpha kiểm soát độ tương phản, còn tham số beta kiểm soát độ sáng, tăng giá trị beta nhằm nâng cao độ sáng của ảnh.

Áp dụng hiệu chỉnh gamma để làm sáng ảnh

Một ảnh có thể hiện quá sáng sau khi dùng kỹ thuật điều chỉnh độ sáng. Hiệu chỉnh gamma thay đổi độ sáng tổng thể và tương phản của ảnh. Nó chỉnh ảnh bị quá tối hoặc quá sáng.

# Hiệu chỉnh gamma
gamma = 1.5
lookup_table = np.array([((i / 255.0) ** gamma) * 255 for i in np.arange(0, 256)]).astype("uint8")
gamma_corrected_image = cv2.LUT(brightness_image, lookup_table)

Đoạn code trên tạo một bảng tra cứu áp dụng dụng chuyển đổi hiệu chỉnh gamma cho ảnh được chỉnh độ sáng. Giá trị gamma kiểm soát khả năng điều chỉnh. Dùng những giá trị lớn hơn 1 để làm ảnh tối hơn, giá trị nhỏ hơn 1 để làm ảnh sáng hơn.

Lưu và hiện ảnh cuối cùng

Sau khi đã áp dụng những kỹ thuật nâng cao chất lượng ảnh trên, lưu ảnh đã hoàn tất xử lý vào file.

# Lưu ảnh cuối cùng
cv2.imwrite('final_image.jpg', gamma_corrected_image)

Sau đó hiện kết quả của chương trình bằng Matplotlib.

# Hiện ảnh được nâng cao sau khi hoàn thiện
plt.imshow(cv2.cvtColor(gamma_corrected_image, cv2.COLOR_BGR2RGB))
plt.title('Final Enhanced Image')
plt.show()

Kết quả:

Ảnh sau khi được nâng cao chất lượng

Tương lai của nâng cao chất lượng ảnh nằm ở lĩnh vực trí tuệ nhân tạo. Các thuật toán học máy được huấn luyện để tự động triển khai các kỹ thuật tăng cường hình ảnh. Hi vọng bài viết giúp bạn hiểu rõ hơn về cách dùng OpenCV trong lĩnh vực này.

Thứ Tư, 14/06/2023 14:06
51 👨 2.693
0 Bình luận
Sắp xếp theo