Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to normalize RGB value with reference RGB values

I want to get RGB values of an image in many lighting conditions. To get a somehow neutral scenario, I want to normalize the RGB values with RGB values of some predefined images.

Let me explain. I have 6 predefined images and I know their exact average RGB values. Now I will take the picture of the unknown image in different lighting conditions. I will also take the pictures of predefined 6 images in same conditions. Now my goal is to define a normalization formula by comparing the known reference rgb values of the predefined images to the values computed from the camera picture. with this normalization parameter I will calibrate the RGB value of the unknown picture. So that I can get average RGB value from the unknown picture in a neutral manner irrespective of the lighting condition.

How can I achieve this easily in Java.

like image 574
P basak Avatar asked Jun 29 '12 01:06

P basak


People also ask

How do you normalize RGB values?

When normalizing the RGB values of an image, you divide each pixel's value by the sum of the pixel's value over all channels. So if you have a pixel with intensitied R, G, and B in the respective channels... its normalized values will be R/S, G/S and B/S (where, S=R+G+B).

Why do RGB values go from 0 to 255?

It really comes down to math and getting a value between 0-1. Since 255 is the maximum value, dividing by 255 expresses a 0-1 representation. Each channel (Red, Green, and Blue are each channels) is 8 bits, so they are each limited to 256, in this case 255 since 0 is included.

Can RGB go past 255?

So no. For 24 -bit colors. 255 is thus simply defined as the maximum intensity of red/green/blue a monitor renders.

Can RGB values be any other range?

​RGB values are represented by 8 bits, where the min value is 0 and the max is 255. b. Can they be any other range? They can be any range someone desires, the range is arbitrary.


1 Answers

Is the reason you are doing this to truly normalize RGB, or are you trying to normalize the images to have similar brightness. Because if your goal is simply the brightness, then I would convert to a color standard that has a brightness component, and normalize only the brightness component.

From there you can take the new image in the different color component standard and convert back to RGB if you like.

The steps (but not in java):

1) Convert - RGBImage --> YUVImage
2) Normalize RGBImage using the Y component
3) Convert - Normalized(YUVImage) --> Normalized(RGBImage)

In this way you can implement Normalization on the brightness using the algorithm described here.

ELSE, you can average the averages for each channel and use those as the numerator for the normalization factors for your new images calculating each channel separately.

like image 125
trumpetlicks Avatar answered Sep 18 '22 18:09

trumpetlicks