Mã hóa JPEG có nên tính đến gamma?


11

Khi một hình ảnh được mã hóa bằng JPEG, các pixel RGB trước tiên được mã hóa thành YUV và sau đó các kênh UV được ghép xuống. Trước khi thực sự thực hiện DCT và mã hóa các hệ số, JPEG không gamma sửa kênh Y. Điều này có đúng không? Chúng ta không nên xác định các hệ số DCT sẽ ảnh hưởng nhất đến kết quả đã xem của chúng ta?


Tôi không biết nhưng chắc chắn không có ý nghĩa gì khi không sửa gamma.
joojaa

Tôi không đăng bài này như một câu trả lời vì tôi không tự tin vào nó, nhưng nhận thức về tầm nhìn của con người về độ sáng không phải là tuyến tính. Trên thực tế, sRGB thực hiện khá tốt việc bù đắp cho điều đó và đưa ra độ chính xác cao nhất trong các lĩnh vực quan trọng. Vì vậy, bạn có thể thấy rằng việc sửa gamma trước khi nén luma thực sự có thể mang lại kết quả tồi tệ hơn.
yuriks

AFAIK, các tiêu chuẩn video giả định R'G'B ', tức là. một không gian màu phi tuyến tính, khi áp dụng biến đổi màu 3x3 thành / từ YCbCr. Trong một ứng dụng như video mà người ta muốn tối đa hóa chất lượng trên mỗi bit, việc sử dụng tuyến tính là vô nghĩa. Tôi nghĩ phần 27 và 29 của Câu hỏi thường gặp về màu sắc của Charles Poyton thể hiện rõ hơn: poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC27
Simon F

"Video bị khử màu
Simon F

Số mũ gamma được lưu trữ trong dữ liệu exif JPEG. hầu hết các phần mềm hoàn toàn bỏ qua nó. nhưng bạn có thể giả sử sau khi giải mã một jpeg đã có trong không gian gamma để không phải thực hiện chuyển đổi nào trước khi gửi giá trị rgb trên bộ đệm hiển thị.
v.oddou

Câu trả lời:


2

Theo Wikipedia (chèn độ chính xác từ chối trách nhiệm RE):

JPEG không xác định mã hóa màu nào sẽ được sử dụng cho hình ảnh. JFIF định nghĩa mô hình màu sẽ được sử dụng: hoặc Y cho thang độ xám hoặc YCbCr như được định nghĩa bởi CCIR 601.

YCbCr là một định dạng phi tuyến tính. Như tôi đã đề cập trước đó, "Video bị làm sáng tỏ":

"YCbCr là không gian màu ban đầu được xác định bởi BT.601 và hiện được sử dụng cho tất cả các định dạng video thành phần kỹ thuật số. .... Ký hiệu chính xác về mặt kỹ thuật là Y'Cb'Cr 'vì cả ba thành phần đều có nguồn gốc từ R'G'B '. "

và Charles' Poynton của Màu FAQ bang

Các hệ thống video gần đúng đáp ứng độ sáng của tầm nhìn bằng cách sử dụng tín hiệu R'G'B ', mỗi đối tượng có chức năng nguồn 0,45.

Với nén, chúng ta theo sau biểu diễn trực quan tốt nhất trên mỗi bit và, vì mắt là phi tuyến tính theo cách này, nên sử dụng các biểu diễn phi tuyến tính là điều hợp lý.


Từ những chi tiết này, theo tôi hiểu, JPEG hy vọng các giá trị RGB đầu vào sẽ được mã hóa theo cách mà màn hình sẽ áp dụng chức năng nguồn khi hiển thị. Để tạo lại các giá trị RGB cụ thể đó, chúng không nên được sửa trước khi mã hóa.
Mokosha

1
Rắc rối với việc nói như thế là nó hơi mơ hồ. Có lẽ chúng ta nên nói rằng, trên thực tế, nếu dữ liệu "RGB" của bạn là R'G'B '(và giả sử sRGB rơi vào danh mục đó) thì bạn không nên sửa đổi các giá trị trước khi áp dụng R'G'B' => Ma trận YCbCr. Tuy nhiên, nếu dữ liệu đã được tính toán với trình kết xuất (có thể là tuyến tính), được xử lý bằng cách sử dụng thu nhỏ (cần được thực hiện trong không gian tuyến tính) hoặc, được ghi lại (và được dọn sạch) bằng một CCD (mà tôi nghĩ là tuyến tính), sau đó nó phải được ánh xạ lại trước khi nén JPEG.
Simon F

7

Câu trả lời ngắn gọn là "không", vì những lý do được nêu trong bản ghi nhớ của Alvy Ray Smith, Gamma Correction . Gamma không phải là về sự phi tuyến tính trong nhận thức của con người, nó là về sự phi tuyến tính trong các thiết bị hiển thị (và, tôi cho rằng, các thiết bị mua lại cũng vậy).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.