Xác định độ sáng của ảnh bằng OpenCV

Để nhận diện hình ảnh chính xác thì input cần phải chuẩn, càng giống với ảnh được học thì càng tốt. Việc xác định ảnh sáng tối 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.

Có cách khác là dùng Photoshop để xem 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ả nhìn chán òm, mất đi contrast khá nhiều nên mình không giới thiệu cách này.

Cách mà mình giới thiệu đó là thay đổi giá trị contrast và brightness của ảnh, mình ưng ý kết quả này

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ử