Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion.

Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules.

 

Go Back   Doom9's Forum > Capturing and Editing Video > Avisynth Usage

Reply
 
Thread Tools Search this Thread Display Modes
Old 15th March 2019, 23:55   #1  |  Link
Stormborec
Registered User
 
Join Date: Feb 2013
Posts: 161
Gamma settings - in YUV with preservation of saturation

How to set gamma correctly in YUV, without convert to RGB (less rounding errors, without banding)

Code:
levels(0,1.32,255,0,255)
tweak(sat...)
dark parts are desaturated, light ones are oversaturated...


The right way but converting to RGB:

Code:
converttorgb32
levels(0,1.32,255,0,255)
converttoyv12
or the same:

Code:
converttorgb32
RGBAdjust(rg=...,gg =...,bg=...)
converttoyv12

There are 2 ways:

1) convert to "deeper bit" (or float) RGB -> change gamma -> convert back to YUV (slow)


2) make it all "in one step" = stay in YUV:

a) change gamma in luma
b) change "saturation" of chroma "adaptively", in relation to each pixel value of luma (lower luma means higher saturation lost by gamma change)

something like this (but it's still not ok):

Code:
y = converttoy8()
u = utoy8()
v = vtoy8()

y_adjusted = mt_lut("x 16 - 219 / 1 1.32 / ^ 219 * 16 +", chroma="copy")
y_scaled   = y.bilinearresize(width(u),height(u))
u_adjusted = mt_lutxy(u,y_scaled,"x 128 - y 16 - 219 / 1 1.32 / ^ 219 * 16 + y / * 128 +")
v_adjusted = mt_lutxy(v,y_scaled,"x 128 - y 16 - 219 / 1 1.32 / ^ 219 * 16 + y / * 128 +")

ytouv(u_adjusted,v_adjusted,y_adjusted)

In a nutshell:

We take the gamma adjusted luma value of each pixel and divide it by the original luma value of each pixel.
This gives a coefficient for each pixel to multiply the saturation adjustment according to the gamma change.
The greater the luma change, the greater the saturation lost.

Last edited by Stormborec; 17th March 2019 at 15:01.
Stormborec is offline   Reply With Quote
Old 16th March 2019, 03:22   #2  |  Link
LemMotlow
Registered User
 
Join Date: Jul 2011
Location: Tennessee, USA
Posts: 266
Quote:
Originally Posted by Stormborec View Post
Code:
converttorgb32
RGBAdjust(rg=...,gg =...,bg=...)
converttoyv12
Above is the only example that affects chroma's gamma. The others affect only luma's gamma. gamma_u and gamma_v have no effect -- which is clearly stated in the system documentation for ColorYUV:
Quote:
gamma adjusts gamma of the specified channel. A value of 0 is the same as gamma 1.0. When the value is set to 256 it is the same as gamma 2.0. The value is valid down to -256, where it is the same as gamma 0.0. Note: gamma for chroma is not implemented (gamma_u and gamma_v are dummy parameters).
So, which gamma are you trying to work with? luma in YUV or chroma in RGB? In YUV, luma and chroma are stored separately. In RGB, "color" and "brightness" are integral.
LemMotlow is offline   Reply With Quote
Old 16th March 2019, 09:47   #3  |  Link
Stormborec
Registered User
 
Join Date: Feb 2013
Posts: 161
Quote:
So, which gamma are you trying to work with? luma in YUV or chroma in RGB?
In YUV (thus without color space conversion) but with the same result like in RGB...
Stormborec is offline   Reply With Quote
Old 16th March 2019, 11:38   #4  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 7,477
Well I know that you are familiar with ColorYUV2 (as you have posted about it before), but here anyways in case you forgot:- https://forum.doom9.org/showthread.p...ight=colorYUV2

Groucho also has 64 bit build of it, in his stuff.



Also RgbAdapt has RPow/SPow stuff. https://forum.doom9.org/showthread.p...light=RgbAdapt




EDIT: And demo of the iMin, iMax, OMin, OMax stuff (mask creation or whatever) [EDIT: Grid turned off].


EDIT: Also, VirtualDub2 has some kind of 6 axis RGB adjustment function thingy.

EDIT:
Quote:
In YUV (thus without color space conversion) but with the same result like in RGB...
Nobody knows how to do it properley in YUV, Gamma is an RGB concept.
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???

Last edited by StainlessS; 16th March 2019 at 22:33.
StainlessS is offline   Reply With Quote
Old 16th March 2019, 12:13   #5  |  Link
Stormborec
Registered User
 
Join Date: Feb 2013
Posts: 161
These tools can calculate proper values e.g. from RGBAdjust to ColorYUV ?
Stormborec is offline   Reply With Quote
Old 16th March 2019, 12:20   #6  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 7,477
Nobody knows how to do it properley in YUV, Gamma is an RGB concept.
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???
StainlessS is offline   Reply With Quote
Reply

Tags
gamma correction

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 09:40.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2020, vBulletin Solutions Inc.