Manipulating Luma In Yuv Color Space
Solution 1:
The little that I know from this API is that the values for the 3 channels are concatenated in a byte array. So, likewise in Windows working with RGB, I guess here you have the same, I mean, every 3 bytes representing one pixel. So I GUESS, you could access it jumping every 3 positions to access only one single channel (Luma in your case). I just don't know if the luma is represented by the first, second or third byte.
Second, if I understand you just want to change bright/contrast (increase/decrease) is that correct? Because if so, contrast is just multiplication and brightness is addition.
For instance - pseudo code assuming you are working with 8bits channel:
luma[y] = luma[y] * 1.10; //Increases contrast
or you can have a more generic form:
luma[y] = luma[y] + (luma[y] * contrast); //where contrast ranges from -1.0 to 1.0
Similarly you can do the same with brightness:
luma[y] = luma[y] + bright; //Where bright can rangefrom-255to255
In both cases you have to be careful with overflows and underflows before you assign the final pixel result to your image.
Solution 2:
YUV processing is best demonstrated in the APLEAGLView.m file of this sample app:
Proper adjustments to brightness and contrast so that they maintain their relationship in proportion to each other is demonstrated in the Shader.fsh file at:
If you need help interpeting the code, I can help. For now, though, using a user-specified luma threshold value, the luma-adjusted Y plane is calculated like this:
Y' = (Y - (16 / 255)) * lumaThreshold;
Post a Comment for "Manipulating Luma In Yuv Color Space"