Xử lý độ sáng tối của ảnh bằng OpenCV

Để có thể nhận diện hình ảnh chính xác thì ảnh input cần phải chuẩn, trong đó độ sáng tối là 1 trong những điều quan trọng. Việc xác định ảnh sáng tối và đưa về đúng chuẩn là bước tiền xử lý trước khi đưa vào phân lớp/dự đoán (classification/predict).

Sau khi xác định được ảnh quá tối hoặc quá sáng thì tùy bài toán mà xử lý phù hợp:

  1. Loại bỏ ảnh, không nhận diện ảnh không đáp ứng đúng yêu cầu
  2. Áp dụng thuật toán cân bằng sáng để khắc phục, đưa ảnh về độ sáng đúng chuẩn

Lý thuyết về độ sáng ảnh

Dựa vào bài viết về quang đồ (histogram) thì ảnh bị thiếu sáng là ảnh có quang đồ lệch về bên trái. Ảnh dư sáng là ảnh có quang đồ lệch về bên phải, còn ảnh đủ sáng là quang đồ phân bố đều.

Trong Photoshop cũng có quang đồ, VD bên dưới là quang đồ của 1 ảnh chụp ban đêm (Ấn Crl + L trong photoshop)

Hình trên quang đồ lệch về bên trái, để khắc phục thì chỉnh như hình dưới để về đúng sáng

Xác định ảnh thiếu sáng bằng thuật toán OpenCV

Nguyên lý để xác định là đếm số pixel thiếu sáng và pixel dư sáng trên tổng số pixel. Như hình dưới là quang đồ được chia thành 3 khoảng, nếu số pixel nằm trong vùng tối nhiều hơn thì suy ra thiếu sáng.

Tùy theo bài toán mà các bạn có thể điều chỉnh khoảng cho phù hợp nhất. Để dễ dàng tính toán ta sử dụng hệ màu HSV để tính giá trị dễ dàng vì kênh màu V thể hiện độ sáng của ảnh.

Code python phát hiện ảnh thiếu sáng




Xử lý ảnh thiếu sáng

Cách phổ biến đó là dùng hàm cv2.equalizeHist() => kết quả mất đi độ tương phản (contrast) khá nhiều nên phương pháp này khó ứng dụng tự động.

Có 1 phương pháp khác đó là thay đổi giá trị contrast và brightness của ảnh, kết quả vẫn giữ được contrast rõ ràng.

Code python thay đổi độ sáng ảnh



Kết luận

Đây là 1 cách khá hiệu quả và dễ sử dụng, các bạn có thể dùng cho các bài toán không yêu cầu độ chính xác quá cao. Code có tích hợp vào TGMTpython để các bạn test thử

Leave a Reply