Điểm ảnh YUV và RGB

Đơn vị cơ bản của một bức ảnh là điểm ảnh (pixel), mỗi điểm ảnh có thể được biểu diễn bằng n bytes dưới các hệ màu khác nhau và tùy theo...

Đơn vị cơ bản của một bức ảnh là điểm ảnh (pixel), mỗi điểm ảnh có thể được biểu diễn bằng n bytes dưới các hệ màu khác nhau và tùy theo định dạng mà ta có bố cục, cách sắp xếp các thành phần trong điểm ảnh sẽ khác nhau. Việc chuyển đổi giữa các hệ màu thông thường được thực hiện thông qua các phép biến đổi ma trận. Trong bài viết này tôi sẽ giới thiệu phương thức chuyển đổi từ điểm ảnh 24 bits RGB sang điểm ảnh YCbCr.

Để thực hiện chuyển từ RGB sang YCbCr có nhiều công thức theo chuẩn khác nhau, theo chuẩn ITU-R BT.601 sẽ như sau:


Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

Với chiều ngược lại được thực hiện :

B = 1.164(Y - 16) + 2.018(U - 128)
G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
R = 1.164(Y - 16) + 1.596(V - 128)
Hai công thức này được trình bày trong cuốn sách "Video Demystified" của Keith Jack (ISBN 1-878707-09-4). Trong cả hai công thức trên giá trị RGB đều trong khoảng từ [0 - 255], Y nằm trong khoảng [16 - 235], U / V thuộc giá trị [16 - 240]. Thật ra đây không phải là công thức duy nhất cho quá trình chuyển đổi, nó có nhiều người anh em khác tùy, theo mục đích sử dụng và thiết bị cũng như công nghệ hiển thị hình ảnh mà có hiệu quả tối ưu khác nhau, hay nói cách khác có nhiều chuẩn quy định cho sự chuyển đổi qua lại giữa hai hệ màu. Ví dụ nếu theo ITU-R BT.709 ta sẽ có công thức:
Hoặc trong tình huống nếu muốn sử dụng vùng giá trị tối đa cho 8 bit màu [0 - 255] với YCbCr ta có thể tiếp cận công thức:
Trong bài viết này tôi không định đẩy bạn dính vào sự rối rắm liên quan tới các bộ quy định và chuẩn mực mà chỉ muốn giúp trình bày một cái phổ biến và từ đó bạn đọc dễ dàng mở rộng hoặc thay đổi về sau trong ứng dụng cụ thể.

Ở trên tôi đã trình bày việc chuyển đổi giữa các thành phần của hai hệ màu, tuy nhiên nếu chỉ có bấy nhiêu hầu như chẳng hữu ích gì. Vì khi ta nói tới hệ màu, ta phải nói tới điểm ảnh và cấu trúc tạo nên một ảnh, khi đó nó mới có tính ứng dụng thực tiễn. Khi ta nói tới YUV ta hiểu đơn giản tổng quan về một hệ màu có 3 thành phần, nhưng phân phối các thành phần đó vào điểm ảnh ra sao, đặt trong cấu trúc chung một ảnh như thế nào thì đó lại là vấn đề cần phải nói thêm rất nhiều. Dưới đây tôi trình bày 3 loại khác nhau của ảnh YUV đó là YUV422I, YUV420SP và YUV420P. Do có rất nhiều tài liệu, cũng như cái sự ba cha bảy mệ của YUV nên xin vui lòng đừng thắc mắc tại sao bạn đọc ở đâu đó có chút khác biệt về tên hay khái niệm, chỉ cần hãy đặt niềm tin ở Bioz và IEEV.  

Trước khi đi vào chi tiết tôi sẽ nói với các bạn 2 từ khóa rất quan trọng, hầu hết các kiểu cấu tạo ảnh YUV đều được phân vào 1 trong hai nhóm ứng với các từ khóa này. Đầu tiên là Packed,  đó là khái niệm được dùng khi các thành phần của hệ màu được trộn vào nhau, nằm lẫn vào nhau trong bộ nhớ để hình thành nên các điểm ảnh. Khái niệm thứ hai là Planar, nó được sử dụng khi các thành phần màu của điểm ảnh được chia ra, đặt trong các vùng nhớ riêng biệt mà ta có thể dễ dàng lấy ra từng thành phần màu trong toàn bộ ảnh. Mọi thứ có vẻ hơi mù mờ, nhưng không sao, khi đi vào chi tiết 3 loại ảnh phía dưới vui lòng liên hệ với những gì bạn đã đọc ở đây, vấn đề sẻ trở nên sáng tỏ.

1. YUV422I: thuộc loại Packed, mỗi điểm ảnh có 16 bit, cứ 2 thành phần Y sẽ có 1 thành phần U và V. Từng cặp 2 điểm ảnh một sẽ đi chung với nhau. Hình dưới minh họa cho phân phối cụ thể của định dạng này với một ảnh 6 x 4.

2. YUV 420P: thuộc loại Planar, mỗi điểm ảnh có 12 bit, cứ 4 thành phần Y sẽ có 1 thành phần U và một thành phần V. Hình dưới minh họa cho phân phối cụ thể của định dạng này với một ảnh 6 x 4:


3. YUV 420SP: giống như loại YUV 420P, ngoại trừ U và V không nằm tách bạch mà đan vào nhau theo thứ tự như sau

U1V1U2V2U3V3
U4V4U5V5U6V6

Ví dụ ứng dụng:

Nhằm sử dụng công thức chuyển đổi ở trên, kết hợp với kiến thức về  định dạng ảnh YUV đã trình bày, tôi sẽ gởi đến các bạn một hàm viết bằng C được trích trong thư viện VnSLib của IEEV, nhằm giải quyết yêu cầu chuyển đổi một ảnh RGB với định dạng điểm ảnh tuần tự: R1G1B1 R2G2B2 R3G3B3 ... sang ảnh YUV 420P:




Binh Nguyen - Bioz

COMMENTS

BLOGGER
Name

Chuyên Đề,5,Computer Vision,17,Data Mining,2,Dữ Liệu Test,6,Hệ Thống Nhúng,12,Kiến Thức Nền,17,Lập Trình,22,Mã Hóa,3,Mã Nguồn Mở,3,MySQL,1,Ngôn Ngữ C,7,Ngôn Ngữ PHP,3,Nhiếp Ảnh,7,OpenCV,8,Phân Vùng,3,Raspberry Pi,7,Sắp Xếp,9,Tài Liệu,29,Thông Báo,2,Thuật Toán,30,Tìm Kiếm,2,tips,4,Triển Khai,32,Xác Suất,4,Xử Lý Âm thanh,1,Xử Lý Ảnh,27,Ý Tưởng,5,
ltr
item
S3LAB.: Điểm ảnh YUV và RGB
Điểm ảnh YUV và RGB
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSoUXynstJYBK7Dtjkd6M04eJU9HNCJkWiPAZzkMEZNTWrsS58cLik_vNUHAvLG3ywojwzTbOpsggOHmKVCZ10ppvSZCLxy8qKA6Oib17Pc3WbxZuqL_I5-XA7Jifm1ReU3tQyE7G90bHn/s200/ycrcbmap.jpg
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSoUXynstJYBK7Dtjkd6M04eJU9HNCJkWiPAZzkMEZNTWrsS58cLik_vNUHAvLG3ywojwzTbOpsggOHmKVCZ10ppvSZCLxy8qKA6Oib17Pc3WbxZuqL_I5-XA7Jifm1ReU3tQyE7G90bHn/s72-c/ycrcbmap.jpg
S3LAB.
http://s3lab.sectic.com/2012/03/inh-dang-iem-anh-yuv-va-tuong-quan-voi.html
http://s3lab.sectic.com/
http://s3lab.sectic.com/
http://s3lab.sectic.com/2012/03/inh-dang-iem-anh-yuv-va-tuong-quan-voi.html
true
708158252392514934
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content