Tôi biết rằng một hình ảnh 24 bit dành riêng 8 bit cho R, G và B. Có phải nó chỉ dành cho không gian màu RGB. Trong không gian màu YCbCr cho hình ảnh JPEG 24 bit, các bit được phân phối như thế nào?
Tôi biết rằng một hình ảnh 24 bit dành riêng 8 bit cho R, G và B. Có phải nó chỉ dành cho không gian màu RGB. Trong không gian màu YCbCr cho hình ảnh JPEG 24 bit, các bit được phân phối như thế nào?
Câu trả lời:
Có một vài định dạng cho YCbCr. nói chung, mắt nhạy cảm hơn với những thay đổi về độ chói (Y, độ sáng) so với thay đổi sắc độ (Cb, Cr, màu). Vì vậy, có thể xóa một số thông tin sắc độ trong khi vẫn giữ được chất lượng hình ảnh.
Do đó, định dạng "đắt nhất" là 4: 4: 4, trong đó đối với mỗi thành phần luma (Y) có 1 thành phần Red chênh lệch (Cr) và một thành phần khác biệt Blue (Cb).
Sau đó, áp dụng nguyên tắc tôi đã đề cập, có 4: 2: 2 trong đó với mỗi 2 thành phần Y có 1 Cb và 1 Cr. Và nó còn đi xa hơn nữa đến 4: 1: 1 và 4: 2: 0, v.v. Thông tin thêm ở đây .
Một JPEG có thể bắt đầu với 8 bit trên mỗi kênh R, G và B, nhưng khi được lưu trong JPEG, nó được lưu trữ rất khác nhau, nơi không có "độ sâu bit" thực sự mà thay vào đó các giá trị được lưu trữ dưới dạng hệ số tần số của độ chính xác nhất định.
Trong JPEG , tốc độ lượng tử hóa có liên quan hơn , ảnh hưởng đến lượng thông tin bị vứt đi trong giai đoạn nén lượng tử hóa và do đó, mỗi hệ số chính xác đến mức nào. Tỷ lệ lượng tử hóa này được đặt theo cài đặt "chất lượng" khi bạn lưu JPEG trong photoshop. Tuy nhiên, nó không liên quan đến độ sâu bit như trong ảnh raster và thậm chí bạn có thể nói rằng ảnh JPEG không có độ sâu bit trong khi ở định dạng JPEG, mặc dù bộ mã hóa / giải mã JPEG bắt đầu bằng / kết thúc bằng 24 bit hình ảnh để quét.
Yếu tố chính khác có liên quan trong việc lưu JPEG là loại lấy mẫu phụ sắc độ . Trong JPEG, bạn có tùy chọn giảm một nửa chiều ngang hoặc cả hai chiều ngang và dọc, độ phân giải của các kênh màu (Pr và Pb) so với kênh độ chói (độ sáng). Khi giải nén, các kênh màu được nội suy và trong hầu hết các chủ đề ảnh, nó không tạo ra sự khác biệt lớn.
Đây là một bản tóm tắt sơ bộ về cách một hình ảnh được chuyển thành JPEG.
Giá trị RGB được chuyển đổi thành giá trị Y, Pb, Pr. Không gian màu YPbPr phù hợp hơn để nén hiệu quả vì nó giữ thông tin độ chói, mang chi tiết nhất, chỉ trong một kênh. Chuyển đổi này là một hoạt động số học đơn giản, hoàn toàn có thể đảo ngược, ngoài việc có bất kỳ lỗi làm tròn nào.
Nếu sử dụng bất kỳ mẫu phụ sắc độ nào (nói cách khác, sử dụng bất kỳ thứ gì ngoài chế độ 4: 4: 4), thì độ phân giải dọc và / hoặc ngang của các kênh Pb và Pr chỉ bị giảm đi một nửa. Do đó, các kênh này sẽ có kích thước pixel khác nhau với kênh độ chói. Điều này dẫn đến mất độ phân giải vĩnh viễn trong các kênh màu.
Đối với mỗi kênh, hình ảnh được chia thành các khối 8 pixel cho 8 pixel, cung cấp 64 giá trị tuyến tính cho mỗi khối như vậy trong mỗi kênh. Nếu một kênh không phải là bội của 8 pixel ở cả hai chiều, thì các pixel cạnh sẽ được lặp lại (và sẽ bị loại bỏ khi giải nén - do đó, nén JPEG luôn hiệu quả hơn với các kích thước là bội số của 8 pixel hoặc 16 nếu bạn tính hệ số trong mẫu phụ sắc độ).
64 giá trị trong mỗi khối trải qua một phép biến đổi từ miền không gian sang miền tần số, trong trường hợp này được gọi là phép biến đổi cosin rời rạc. Bạn kết thúc với 64 hệ số, mỗi hệ số biểu thị biên độ của một bản đồ tần số cụ thể trên khu vực được chụp bởi khối đó. Giá trị đầu tiên là tần số thấp nhất có hiệu quả là giá trị trung bình của tất cả các pixel, cho đến các giá trị cuối cùng mô tả thành phần tần số cao nhất của khối. Tất cả các giá trị trước đó đều sai lệch nhiều hơn và quan trọng hơn đối với giao diện của hình ảnh cuối cùng so với các giá trị sau trong một khối. Hoạt động này là hoàn toàn có thể đảo ngược miễn là bạn sử dụng đủ độ chính xác.
Sau đó là bước lượng tử hóa, trong đó mỗi trong số 64 hệ số bạn có được ở bước trước được chia cho một số (gọi là hệ số lượng tử hóa) và phần còn lại sẽ bị loại bỏ. Đây là nơi độ chính xác của các mẫu bị ảnh hưởng nhiều nhất, nhưng đó là nơi bạn có được sự tiết kiệm không gian lớn từ JPEG so với nén không mất mát. Vì mọi thứ đều nằm trong miền tần số kể từ lần chuyển đổi trước, sự mất độ chính xác này thực hiện công việc tốt nhất của nó trong việc duy trì chất lượng hình ảnh cảm nhận hơn là chỉ đơn giản là giảm độ sâu / độ chính xác của pixel trước khi chuyển đổi này. Mặt trái của quy trình này chỉ đơn giản là nhân với cùng một số bạn đã chia các hệ số cho, nhưng tất nhiên vì bạn đã ném phần còn lại đi nên cuối cùng bạn sẽ có độ chính xác thấp hơn của các hệ số. Điều này dẫn đến mất chất lượng vĩnh viễn,
Sau quá trình lượng tử hóa này, điển hình cho nhiều hệ số sau này, các hệ số ít quan trọng hơn bằng 0, do đó chúng bị loại bỏ. Sau đó, một thói quen mã hóa có độ dài thay đổi (lossless) mã hóa tất cả các hệ số còn lại một cách hiệu quả, mặc dù mỗi loại có thể sử dụng một số bit khác nhau.
Không thể nói rằng một yếu tố lượng tử hóa nhất định tương đương với độ sâu bit nhất định vì lượng tử hóa không tạo ra dải như khi bạn giảm độ sâu bit, mà thay vào đó làm mất chi tiết về nhận thức tổng thể, bắt đầu từ những phần mà bạn nhận thấy ít hơn bởi vì nó có biên độ thấp như vậy cho tần số của nó.
Đại diện cho sắc độ (Cb Cr) trong các kênh riêng biệt từ luma (Y) có tác động tích cực khác đến nén. Hầu hết các thông tin có thể nhìn thấy là trong kênh luma. Mắt người chịu được cả độ phân giải không gian thấp hơn và lượng tử hóa mạnh hơn trong các kênh sắc độ. Vì vậy, một hình ảnh được nén mạnh mẽ có thể sẽ tiêu tốn khoảng 10% dung lượng tệp cho sắc độ và phần còn lại cho độ sáng, và trông vẫn ổn.
Vào cuối ngày, nó vẫn bị nén mất.
Khoảng 8 bit cho mỗi kênh, nhưng có một số cách hơi khác nhau để làm điều đó. Các chi tiết được đưa ra trong bài viết Wikipedia trên YCbCr .