Không gian màu – color space

pixel

Cấu tạo tự nhiên của mắt nhạy với 3 màu Red-Green-Blue. Dựa vào đó các thiết bị hiển thị màu đa số đều cấu tạo để phù hợp với mắt người. Các hệ màu khác được sử dụng chủ yếu cho in ấn, xử lý dữ liệu hoặc cần hiển thị màu đẹp hơn.

Ví dụ: màn hình LCD máy tính cấu tạo mỗi pixel màu từ 3 kênh màu, để thay đổi giá trị của pixel màu người ta thay đổi giá trị của từng kênh.



Ảnh nhị phân và ảnh xám

5_coin_overlap_distance_transform

Ảnh nhị phân và ảnh xám được tạo bởi 1 kênh màu, mỗi pixel được tạo bởi 1 màu duy nhất. Các hệ màu khác được tạo từ nhiều kênh màu, có nghĩa là tách từng kênh ra ta sẽ được ảnh xám. Lưu ý OpenCV sắp kênh màu theo thứ tự B-G-R

Tuy rằng code tách ra 3 kênh màu B-G-R, nhưng khi display thì tất cả đều là ảnh xám.


Hệ màu RGB

Hình bên dưới là các pixel được phóng lớn, có các màu red-green-blue được lặp lại, cứ 3 màu được 1 pixel


Hình ảnh đa số cấu tạo từ 3 kênh màu Red-Green-Blue. Tuỳ theo từng trường hợp sử dụng mà có thêm kênh thứ tư là kênh Alpha (độ trong suốt). Khi tách mỗi kênh màu ta được 1 ma trận các giá trị từ [0;255] với 8 bits, tương tự là [0;65535] với 16 bits,….

splitChannel2

Code để tách 1 kênh màu, cụ thể là màu green:

Hàm cv::merge dùng để merge nhiều kênh màu vào 1 ảnh, số 3 có nghĩa là input có 3 kênh màu.


Hệ màu HSV

Hệ màu HSV dùng để xử lý màu rất thuận tiện, vì mỗi màu sẽ có 1 giá trị Hue [0;360], còn Value và Saturation chỉ thị độ sáng và độ bão hoà của màu. Hệ màu này được ứng dụng để theo dõi đối tượng theo màu

Có vài nơi gọi là HSB, Value được thay bằng Brightness nhưng ngữ nghĩa như nhau. Code bên dưới dùng để convert từ BGR sang HSV, còn các phép biến đổi cũng tương tự:



Hệ màu HSL

Hệ màu HSL viết tắt của Hue, Saturation, và Luminance. Nó cũng tương tự như HSV và cũng phù hợp cho việc lọc màu.

Code bên dưới dùng để convert từ BGR sang HSL



Hệ màu CMYK

Hệ màu CMYK chủ yếu dùng cho in ấn nên không xét nhiều trong lập trình xử lý ảnh. Để chuyển từ BGR sang CMYK dùng code bên dưới ( Nguồn)

Leave a Reply