6

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

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

我怎样才能在 Java 中轻松实现这一点。

4

2 回答 2

1

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

您可以从那里获取不同颜色分量标准的新图像,并根据需要转换回 RGB。

步骤(但不是在java中):

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

通过这种方式,您可以使用此处描述的算法对亮度进行归一化。

否则,您可以平均每个通道的平均值,并将其用作新图像的归一化因子的分子,分别计算每个通道。

于 2012-06-29T02:17:27.413 回答
0

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

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

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

于 2012-06-29T04:15:10.720 回答