2013-05-13 23 views
26

Tôi đang tìm một công thức hiệu chỉnh gamma đơn giản cho hình ảnh thang độ xám với các giá trị từ 0 đến 255.công thức hiệu chỉnh gamma:.^(Gamma) hoặc.^(1/gamma)?

Giả sử gamma của màn hình là 2.2 (đó là màn hình LCD nên tôi có thể ước tính nó một quy trình phức tạp hơn, nhưng giả sử màn hình của tôi hoạt động tốt).

Công thức nào sau đây sẽ chính xác?

(1) Sửa = 255 * (Hình ảnh/255).^2.2

HOẶC

(2) Corrected = 255 * (Hình ảnh/255).^(1/2,2)

(những người được mệnh để được mã MATLAB nhưng tôi hy vọng họ có thể hiểu được ngay cả đối với người không phải người mẫu)

Tôi đã tìm kiếm trên internet nhưng tìm thấy cả hai công thức đi xung quanh. Tôi nghi ngờ (2) là một trong những quyền, và sự nhầm lẫn của tôi là do xu hướng gọi "giá trị gamma" nghịch đảo của giá trị gamma thực tế, nhưng tôi thực sự sẽ đánh giá cao một số thông tin phản hồi của những người biết những gì họ đang nói về .. .

Cảm ơn bạn :-)

+1

bạn quyền yêu cầu. điều này rất khó hiểu. –

Trả lời

22

Điều chỉnh Gamma kiểm soát độ sáng tổng thể của hình ảnh. Hình ảnh không được chỉnh sửa có thể trông bị tẩy trắng hoặc quá tối. Giả sử một màn hình máy tính có chức năng điện 2.2 là cường độ phản ứng với đường cong điện áp. Điều này chỉ có nghĩa là nếu bạn gửi một thông báo đến màn hình mà một pixel nhất định phải có cường độ bằng x, nó sẽ thực sự hiển thị một pixel có cường độ bằng x 2.2 Vì phạm vi điện áp được gửi đến màn hình là giữa 01, điều này có nghĩa là giá trị cường độ được hiển thị sẽ nhỏ hơn giá trị bạn muốn. Một màn hình như vậy được cho là có gamma là 2.2.

Vì vậy, trong trường hợp của bạn,

Corrected = 255 * (Image/255)^(1/2.2). 
+1

cảm ơn bạn rất đơn giản! chúc một ngày tốt lành – user42174

19

Cả hai công thức được sử dụng, một để mã hóa gamma, và một để giải mã gamma.

Gamma mã hóa được sử dụng để nâng cao chất lượng các giá trị bóng khi một hình ảnh được lưu trữ như các giá trị cường độ nguyên, vì vậy để làm gamma mã hóa, bạn sử dụng công thức:

encoded = ((original/255)^(1/gamma)) * 255 

Gamma giải mã được sử dụng để khôi phục lại bản gốc các giá trị, do đó, công thức cho điều đó là:

original = ((encoded/255)^gamma) * 255 

Nếu màn hình giải mã gamma, bạn sẽ muốn sử dụng công thức đầu tiên để mã hóa dữ liệu hình ảnh.

+3

tốt nhưng CẨN THẬN. trong công thức đầu tiên của bạn 'original' là một giá trị SYNTHESIZED từ, ví dụ, một renderer. (raytracing, raster gì). và ở trong không gian (vật lý) tuyến tính. Nếu 'original' là pixel của một bức ảnh, hoặc một texture, thì bạn KHÔNG ÁP DỤNG BẤT CỨ CÔNG THỨC, bởi vì chúng đã được mã hoá gamma rồi. nếu bạn làm thế, bạn sẽ làm mọi thứ hai lần. Đây là nơi mọi thứ trở nên phức tạp, nếu bạn có kết cấu như đầu vào của trình kết xuất đồ họa? bạn cần phải tuyến tính hóa bằng cách áp dụng công thức 2 trước, sau đó làm toán, sau đó gamma-ify quay lại lưu trữ. –

+0

Làm thế nào để biết giá trị gammaa nào được sử dụng trong ảnh chụp bằng camera logitech? – Abc

+1

@Abc: Thông thường giá trị gamma là 2.2 cho hình ảnh được dự định hiển thị trên màn hình thông thường. Thông thường đó là một hình ảnh JPEG sử dụng không gian màu sRGB hoặc Adobe RGB. – Guffa

Các vấn đề liên quan