2012-06-29 124 views
5

Quiero obtener los valores RGB de una imagen en muchas condiciones de iluminación. Para obtener un escenario neutral de alguna manera, quiero normalizar los valores RGB con los valores RGB de algunas imágenes predefinidas.Cómo normalizar el valor RGB con los valores RGB de referencia

Déjame explicarte. Tengo 6 imágenes predefinidas y sé sus valores RGB promedio exactos. Ahora tomaré la fotografía de la imagen desconocida en diferentes condiciones de iluminación. También tomaré las imágenes de 6 imágenes predefinidas en las mismas condiciones. Ahora mi objetivo es definir una fórmula de normalización comparando los valores rgb de referencia conocidos de las imágenes predefinidas con los valores calculados a partir de la imagen de la cámara. con este parámetro de normalización calibraré el valor RGB de la imagen desconocida. Para que pueda obtener el valor RGB promedio de la imagen desconocida de forma neutral, independientemente de las condiciones de iluminación.

¿Cómo puedo lograr esto fácilmente en Java.

Respuesta

0

Para las diferentes situaciones de iluminación, una corrección lineal RGB es todo lo que se necesita. Simplemente multiplique cada uno de los valores R, G, B por una constante derivada para cada canal.

Si solo hubiera un color de referencia, sería fácil: multiplique por el color de referencia y divida por el color capturado. Por ejemplo, si su color de referencia era (240,200,120) pero se midió su imagen (250,190,150), se multiplicaría el rojo por 240/250, el verde por 200/190 y el azul por 120/150. Use las mismas constantes para cada píxel en la imagen.

Con varios colores para combinar, tendrá que promediar los factores de corrección para llegar a un único conjunto de constantes. Se debe otorgar mayor ponderación a los colores más brillantes, por ejemplo, si tuviera una referencia de (200,150,20) y midiera (190,140,10), estaría intentando doblar la cantidad de azul que podría estar muy lejos. El método más simple sería sumar todos los valores de referencia y dividir por la suma de los valores medidos.

+0

Hola, estoy usando tu método. Ahora, en lugar de valores RGB, estoy usando el espacio de color HSI y solo normalizo la matriz de intensidad. –

+0

@P basak - SO en otras palabras, esencialmente estás haciendo lo que yo propuse pero con HSI en lugar de YUV.Entonces, en otras palabras, simplemente querías la normalización de algo muy similar a un canal de brillo. – trumpetlicks

+0

@ Mark - Entonces, esencialmente, lo que está proponiendo son los promedios de cada canal y luego usar esos promedios como factor de normalización para las nuevas imágenes. – trumpetlicks

1

Es la razón por la que está haciendo esto para normalizar realmente RGB, o está tratando de normalizar las imágenes para tener un brillo similar. Porque si su objetivo es simplemente el brillo, entonces convertiría a un estándar de color que tenga un componente de brillo y normalizaré solo el componente de brillo.

A partir de ahí puede tomar la nueva imagen en el estándar de componente de color diferente y convertir de nuevo a RGB si lo desea.

Los pasos (pero no en Java):

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

De esta manera se puede implementar la normalización de la luminosidad mediante el algorithm described here.

ELSE, puede promediar los promedios de cada canal y usarlos como el numerador de los factores de normalización para sus nuevas imágenes calculando cada canal por separado.

+0

Hola, quiero verdaderamente normalizar rgb. –

+0

Quiero algo así como la calibración. Quiero calcular la desviación de las imágenes de referencia y aplicar esa desviación a la imagen desconocida para obtener valores neutros. –

+0

He convertido al espacio de color HSI. Ahora estoy buscando una forma de normalizar el índice con la referencia. –