Computer Vision

Lighting and color spaces

Xin chào, ở bài trước mình đã giới thiệu về các Color Space, hôm nay chúng ta sẽ tìm hiểu kỹ hơn về các Color Space này và sự ảnh hưởng của điều kiện ánh sáng đến Computer Vision.


LIGHTING CONDITIONS

Điều kiện ánh sáng là yếu tố quan trọng nhất đưa đến sự thành công của một thuật toán trong Computer Vision. Một sai lầm thường gặp nhất là các developer bỏ qua điều kiện ánh sáng cũng như ảnh hưởng của nó đến performance của thuật toán.

Một cách tổng quát, điều kiện ánh sáng cần phải hội đủ 3 yếu tố sau:

  • High Contrast (độ tương phản cao): tối đa hóa sự tương phản giữa các vùng hình ảnh mà chúng ta quan tâm. Nói cách khác, đối tượng mà chúng ta quan tâm cần có độ tương phản đủ cao so với phần còn lại của bức ảnh để dễ dàng xác định;
  • Generalizable (tổng quát): điều kiện ánh sáng phải đủ thích hợp để làm việc với từng đối tượng trong bức ảnh. Ví dụ khi chúng ta đang xác định các đồng xu trong một bức ảnh, điều kiện ánh sáng phải đủ tính bao quát để có thể nhận dạng từng đồng xu;
  • Stable (ổn định): tính ổn định, nhất quán của điều kiện ánh sáng là “chén thánh” của việc phát triển ứng dụng Computer Vision. Tuy nhiên, trên thực tế rất khó để đảm bảo sự ổn định của ánh sáng (nếu không muốn nói là không thể), đặc biệt là với các ứng dụng ngoài trời.

Hãy cố gắng đảm bảo điều kiện ánh sáng tốt nhất có thể trước khi bắt tay vào viết code. Sẽ dễ dàng và có ích hơn rất nhiều nếu kiểm soát điều kiện ánh sáng thay vì viết code để khắc phục điều kiện ánh sáng kém.


COLOR SPACES

Trong phần này chúng ta sẽ nói về Color Space và Color Model.

A color space is just a specific organization of colors that allow us to consistently represent and reproduce colors.

Nói một cách đơn giản, Color Space là một tập hợp các màu sắc mà chúng ta có thể sử dụng để biểu diễn.

A color model, on the other hand, is an abstract method of numerically representing colors in the color space.

Color model chính là cách biểu diễn các màu sắc trong Color Space. Chẳng hạn trong Color Space RGB, một pixel được biểu diễn bởi 3 số nguyên 8-bit Red, Green, Blue.

RGB

Chắc hẳn chúng ta đã quá quen thuộc với không gian màu này. RGB là viết tắt của Red-Green-Blue.

Để xác định màu sắc cho từng pixel ở không gian màu RGB, chúng ta cần xác định các thành phần Red, Green, Blue của pixel đó. Giá trị các thành phần này nằm trong khoảng [0, 255]. Với 3 thành phần màu Red-Green-Blue, chúng ta có thể tái tạo 256 x 256 x 256 = 16777216 màu sắc khác nhau.

color_spaces_rgb_color_cube

Figure 1 – RGB Color Space

The RGB color space is an example of an additive color space: the more of each color is added, the brighter the pixel becomes and the closer it comes to white.

Để tạo màu vàng, chúng ta cần (R=255,G=255,B=0), để tạo màu hồng, chúng ta cần (R=255,G=0,B=255). Có thể thấy rằng việc này khá thiếu trực quan, vì thế RGB không phù hợp cho các ứng dụng cần xử lý màu sắc. Trên thực tế, RGB được dùng chủ yếu để hiển thị hình ảnh vì nó khá đơn giản và dễ hiểu.

HSV

HSV là viết tắt của Hue-Saturation-Value. Trong đó: Hue – xác định màu sắc; Saturation – xác định độ trắng của màu sắc, Saturation = 0 tương đương với màu trắng; Value – xác định độ sáng của màu sắc, Value = 0 tương đương với màu đen.

Cần chú ý rằng, mỗi thư viện Computer Vision sẽ sử dụng một khoảng giá trị khác nhau để biểu diễn các giá trị Hue, Saturation và Value. Đối với OpenCV, Hue = [0,179], Saturation = [0, 255], Value = [0, 255].

color_spaces_hsv_color_cylinder

Figure 2 – HSV Color Space

Không gian màu HSV được sử rộng rãi trong Computer Vision, đặc biệt khi chúng ta cần tracking màu sắc của đối tượng trong bức ảnh vì việc xác định màu sắc của pixel đơn giản hơn rất nhiều so với RGB.

L*a*b

Trong khi RGB đơn giản nhưng không trực quan trong việc xác định màu sắc, HSV tuy trực quan hơn nhưng không biểu diễn được cách con người tiếp nhận màu sắc, thì L*a*b lại làm rất tốt việc này.

Không gian màu L*a*b gồm 3 thành phần: L-channel – độ sáng của pixel, a-channel và b-channel.

color_spaces_lab_axis

Figure 3 – L*a*b Color Space

Không gian màu L*a*b được sử dụng rộng rãi trong Computer Vision vì khoảng cách Euclidean của 2 màu sắc bất kỳ trong hệ màu L*a*b có ý nghĩa về thị giác (RGB và HSV thì không). Điều này cho phép khắc phục nhiều vấn đề về điều kiện ánh sáng, cũng như đóng vai trò là một bộ mô tả màu sắc (color image descriptor).

Grayscale

Grayscale isn’t actually a color space — it’s simply the grayscale representation of a RGB image.

Một bức ảnh grayscale biểu diễn hình ảnh chỉ với một channel, với giá trị trong khoảng [0, 255]. Việc chuyển từ RGB sang Grayscale không đơn giản là:

Y = 0,333 x R + 0,333 x G + 0,333 x B

Thay vào đó, mỗi channel màu cần có một trọng số khác nhau:

Y = 0,299 x R + 0,587 x G + 0,114 x B

Tại sao mỗi channel cần có một trọng số riêng? Điều này là do các tế bào nón và thụ thể của mắt cảm nhận lượng màu xanh lá cây nhiều gần gấp đôi so với màu đỏ và gấp 4 lần màu xanh dương.

Grayscale representation được sử dụng khi chúng ta không cần xử lý màu sắc (chẳng hạn là xác định khuôn mặt). Việc loại bỏ các kênh màu sắc cũng cho phép tiết kiệm bộ nhớ và đạt hiệu quả cao trong tính toán.


SUMMARY

Qua bài viết này chúng ta đã tìm hiểu về Lighting Conditions và Color Spaces. Hiểu biết về Lighting Conditions và Color Spaces sẽ giúp chúng ta đạt được hiệu quả cao việc áp dụng Computer Vision. Cảm ơn các bạn đã theo dõi bài viết.

Thân ái và quyết thắng.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s