AICurious Logo
Published on
Wednesday, September 19, 2018

Ảnh số và các không gian màu trong xử lý ảnh

1289 words7 min read
Authors

Ảnh số (digital image) là một thành phần biểu diễn hình ảnh trong hầu hết các thiết bị điện tử hiện nay như máy ảnh, điện thoại, máy tính, các công cụ hỗ trợ có sử dụng ảnh. Để bắt đầu với xử lý ảnh, chúng ta phải nắm được các kiến thức cơ bản về ảnh số và cách biểu diễn ảnh số trong máy tính. Bài viết này sẽ khái quát sơ lược về ảnh số và các không gian màu để biểu diễn ảnh số.

1. Ảnh số là gì? Có những loại ảnh số nào?

Ảnh số thực tế là biểu diễn số học của hình ảnh trong máy tính, thường là biểu diễn nhị phân. Có thể phân ảnh số thành 2 loại: ảnh raster và ảnh vector.

Ảnh raster

Ảnh Raster là một tập hợp hữu hạn các giá trị số, gọi là điểm ảnh (pixel - picture element). Thông thường một hình ảnh được chia thành các hàng và cột chứa điểm ảnh. Điểm ảnh là thành phần bé nhất biểu diễn ảnh, có giá trị số biểu diễn màu sắc, độ sáng... của một thành phần trong bức ảnh.

Ảnh raster thường được thu từ camera, các máy chiếu, chụp, quét... và chính là đối tượng chính của xử lý ảnh và thị giác máy tính.

Ảnh vector

Ảnh vector là loại ảnh tạo thành từ các thành phần đơn giản của hình học như điểm, đường thẳng, hình khối... Thay vì được lưu lại thành các ma trận điểm ảnh như ảnh raster, ảnh vector được biểu diễn dưới dạng tọa độ của các thành phần trong ảnh.

Chính điều này đã tạo nên sự đặc biệt của ảnh vector, khiến nó có thể được kéo dãn, thu nhỏ tùy ý mà không bị vỡ, không xuất hiện răng cưa như ảnh raster. Dữ liệu trong ảnh vector nhỏ, do vậy thường tiết kiệm dung lượng lưu trữ hơn ảnh raster.

Tuy thế, màu sắc trong ảnh vector nhìn không thật, sắc độ ít tinh tế hơn ảnh raster.

Thông thường người ta sử dụng ảnh vector trong thiết kế các logo, banner, giao diện đồ họa... Loại ảnh này gần như không xuất hiện khi đề cập đến xử lý ảnh / thị giác máy tính.

Kết quả nhân ảnh cho vector image

Ảnh vector

2. Các không gian màu biểu diễn ảnh

Các không gian màu là một mô hình toán học dùng để mô tả các màu sắc trong thực tế được biểu diễn dưới dạng số học. Ở đây mình sẽ chỉ đề cập đến một số không gian màu chủ yếu và thường sử dụng để biểu diễn ảnh raster.

2.1. Không gian màu RGB

Không gian màu RGB

RGB là không gian màu phổ biến dùng trong máy tính, máy ảnh, điện thoại và nhiều thiết bị kĩ thuật số khác. Không gian màu này khá gần với cách mắt người tổng hợp màu sắc. Nguyên lý cơ bản là sử dụng 3 màu sắc cơ bản R (red - đỏ), G (green - xanh lục) và B (blue - xanh lam) để biểu diễn tất cả các màu sắc.

Thông thường, trong mô hình 24 bit (không gian màu mặc định sử dụng bởi OpenCV - tuy nhiên OpenCV đảo 2 kênh R và B, trở thành BGR), mỗi kênh màu sẽ sử dụng 8bit để biểu diễn, tức là giá trị R, G, B nằm trong khoảng 0 - 255. Bộ 3 số này biểu diễn cho từng điểm ảnh, mỗi số biểu diễn cho cường độ của một màu.

Với mô hình biểu diễn 24bit, số lượng màu tối đa sẽ là:

255×255×255=16581375255\times255\times255 = 16581375

2.2. Không gian màu CMYK

Không gian màu CMYK

Không gian màu CMYK chỉ mô hình màu loại trừ, thường dùng trong in ấn. Mô hình màu này dựa trên cơ sở trộn các chất màu của các màu sau:

  • C=Cyan trong tiếng Anh có nghĩa là màu xanh lơ hay cánh chả
  • M=Magenta trong tiếng Anh có nghĩa là màu cánh sen hay hồng sẫm
  • Y=Yellow trong tiếng Anh có nghĩa là màu vàng
  • K=Key (trong tiếng Anh nên hiểu theo nghĩa là cái gì đó then chốt hay chủ yếu để ám chỉ màu đen mặc dù màu này có tên tiếng Anh là black do chữ B đã được sử dụng để chỉ màu xanh lam (blue) trong mô hình màu RGB

Hỗn hợp của các màu CMY lý tưởng là loại trừ (các màu này khi in cùng một chỗ trên nền trắng sẽ tạo ra màu đen). Nguyên lý làm việc của CMYK là trên cơ sở hấp thụ ánh sáng. Màu mà người ta nhìn thấy là từ phần của ánh sáng không bị hấp thụ. Trong CMYK hồng sẫm cộng với vàng sẽ cho màu đỏ, cánh sen cộng với xanh lơ cho màu xanh lam, xanh lơ cộng với vàng sinh ra màu xanh lá cây và tổ hợp của các màu xanh lơ, cánh sen và vàng tạo ra màu đen.

2.3. Không gian màu HSV (HSB)

Không gian màu HSV

Không gian màu HSV (còn gọi là HSB) là một cách tự nhiên hơn để mô tả màu sắc, dựa trên 3 số liệu:

  • H: (Hue) Vùng màu
  • S: (Saturation) Độ bão hòa màu
  • B (hay V): (Bright hay Value) Độ sáng

2.4. Không gian màu CIE LAB

Không gian màu CIE L_a_b* là không gian màu có sự đồng đều trong dải màu sắc, do vậy phù hợp để so sánh sự khác biệt giữa màu sắc này với màu sắc khác. Các giá trị Lab mô tả tất cả những màu mà mắt một người bình thường có thể nhìn thấy được.

Lab được xem là một mô hình màu độc lập đối với thiết bị và thường được sử dụng như một cơ sở tham chiếu khi chuyển đổi một màu từ một không gian màu này sang một không gian màu khác.

Không gian màu CIE LAB

Theo mô hình Lab, tất cả các màu có cùng một độ sáng sẽ nằm trên cùng một mặt phẳng có dạng hình tròn theo 2 trục a* và b*. Màu có giá trị a* dương thì ngả đỏ, màu có giá trị a* âm thì ngả lục. Tương tự b* dương thì ngả vàng và b* âm thì ngả lam. Còn độ sáng của màu thì thay đổi theo trục dọc.

2.5. Chuyển đổi giữa các không gian màu trong OpenCV

Việc chuyển đổi giữa các không gian màu trong OpenCV có thể sử dụng cvtColor() trong C++ hoặc cv2.cvtColor trong Python.

Ví dụ trong Python, để chuyển đổi ảnh frame từ hệ màu BGR (hệ màu mặc định trong OpenCV) sang hệ màu hsv, ta sử dụng lệnh như sau:

hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

Tương tự với C++:

cvtColor(frame, hsv, cv::COLOR_BGR2HSV);