如何使用参考RGB值标准化RGB值

时间:2012-06-29 01:12:10

标签: java image image-processing graphics normalization

我想在许多光照条件下获取图像的RGB值。为了获得某种中立的场景,我想用一些预定义图像的RGB值来标准化RGB值。

让我解释一下。我有6个预定义的图像,我知道它们的确切平均RGB值。现在我将在不同的光照条件下拍摄未知图像。我还将在相同条件下拍摄预定义的6张图像。现在我的目标是通过将预定义图像的已知参考rgb值与从摄像机图像计算的值进行比较来定义归一化公式。使用此归一化参数,我将校准未知图像的RGB值。因此,无论光照条件如何,我都可以以中性方式从未知图像中获得平均RGB值。

如何在Java中轻松实现这一目标。

2 个答案:

答案 0 :(得分:1)

您是这样做的原因是为了真正标准化RGB,还是您试图将图像标准化为具有相似的亮度。因为如果您的目标只是亮度,那么我会转换为具有亮度分量的颜色标准,并仅对亮度分量进行标准化。

从那里你可以使用不同的颜色分量标准拍摄新图像,并根据需要转换回RGB。

步骤(但不是在java中):

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

通过这种方式,您可以使用algorithm described here对亮度实施标准化。

ELSE,您可以平均每个通道的平均值,并将它们用作新图像的标准化因子的分子,分别计算每个通道。

答案 1 :(得分:0)

对于不同的照明情况,只需要线性RGB校正。只需将每个R,G,B值乘以每个通道的常数即可。

如果只有一种参考颜色,则很容易 - 乘以参考颜色,然后除以捕获的颜色。例如,如果您的参考颜色为(240,200,120)但您的图像被测量(250,190,150) - 您将红色乘以240/250,绿色乘以200/190,蓝色乘以120/150。对图像中的每个像素使用相同的常量。

要匹配多种颜色,您必须平均校正因子以得到一组常数。需要对更亮的颜色进行更大的加权,例如,如果你有一个(200,150,20)的参考,它的测量(190,140,​​10),你会试图将蓝色的数量加倍,这可能是非常远的。最简单的方法是将所有参考值相加,然后除以测量值的总和。