Compensación de la exposición después de tomar las imágenes

Tengo una pila de mosaicos de imágenes (tomados de un dron) que quiero crear en mosaico en una sola imagen. Quiero hacer una compensación de exposición para reducir la variación en la iluminación entre los mosaicos de la imagen antes del mosaico debido a las variaciones dentro de cada imagen. He visto la siguiente fórmula utilizada para tal tarea:compensación de exposición

dónde:

p' es el píxel correcto

p es el píxel original sin corregir

k es el número F de apertura

t es el tiempo de exposición

K es la ISO

De mis datos de metadatos EXIF ​​obtengo los siguientes valores:

k = 2.200000078

t = 0,002007692122

K = 100

Esto me da un factor de corrección de 24.1072836326 (basado en la ecuación anterior), que si uso para multiplicar contra todos los píxeles (p) en la imagen, resulta en un cambio drástico en los valores de píxeles (p'). ¿Hay algo que estoy haciendo incorrectamente aquí? Por ejemplo, ¿mis unidades son correctas?

No entiendo esto en absoluto. ¿El píxel "correcto"? ¿Qué significa multiplicar un píxel? ¿Qué estás multiplicando? Y si tiene algún factor de multiplicación que se calcula por píxel... oh, no lo sé. En resumen, ¿qué?
¿Todas las imágenes fueron tomadas bajo las mismas condiciones de iluminación? ¿O en diferentes momentos bajo diferente iluminación?
Es posible que deba convertir el tiempo de obturación de un valor decimal (0,002007692122) al denominador de un valor fraccionario 1/x (500)
Tomado bajo diferentes condiciones de iluminación; es decir, nubes intermitentes, luz solar directa, elevación solar variable

Respuestas (2)

P: "¿Cómo compenso la exposición de un montón de fotos para poder unirlas?".

Yo tampoco estoy de acuerdo con la fórmula, ¿no debería ser: p' = p + (p * (k^2)/(t*k)) ? [Nota: le gustaría corregir "t" como se mencionó anteriormente en el comentario de @Michael Clark.]

En cualquier caso, su "método de compensación" es simplemente hacer que cada píxel de una foto en particular sea un poco más oscuro o un poco más brillante, igualarlos y luego unirlos.

Mire un diagrama de bloques para la demostración de unión de OpenCV:

Diagrama de bloques de costura

¿Ver? (su método no producirá resultados hermosos y perfectos, en su forma actual).

  • Primero (bueno, comenzaré por ahí) necesita Datos de registro (bloque amarillo en el medio).

  • Los datos de registro van a "Deformar imágenes", uno de los cuales va a "Estimar errores de exposición" y luego a "Compensar errores de exposición".

  • Luego se mezclan las imágenes deformadas y compensadas.

Puede ver el código fuente para ver cómo se implementa la fórmula.

Simplemente puede descargar un ejecutable de Windows desde SourceForge para ahorrar algo de lectura, aprendizaje y compilación.

Hay muchos otros programas de unión gratuitos, la mayoría con código fuente disponible.

Sugiero que su fórmula producirá este tipo de resultado:

Líneas de costura visibles

En cambio, probablemente desee este tipo de resultado:

Resultado de la demostración de unión de OpenCV

¿Hay algo que estoy haciendo incorrectamente aquí?

Sí. Está asumiendo que la vista en cada imagen debe tener un brillo promedio igual. Pero cuando apuntas la cámara en diferentes direcciones bajo las mismas condiciones de iluminación, estás cambiando las composiciones de la escena. Es posible que esté capturando un cielo menos brillante y un primer plano más oscuro. O puede estar capturando menos hierba de colores claros y árboles de colores más oscuros. No puede esperar que la totalidad de cada imagen tenga el mismo brillo promedio cuando cada imagen se toma apuntando en diferentes direcciones a diferentes objetos.

La forma más eficaz de evitar este problema es establecer la exposición en el mismo valor para todos los fotogramas antes de tomar las imágenes (es decir, exposición manual o bloqueo de exposición ). Como no lo hizo, lo mejor que puede hacer es ajustar la exposición relativa de cada cuadro para compensar las diferencias en la exposición cuando se tomaron las imágenes. Es decir, debe seleccionar el valor de exposición en un cuadro y luego normalizar todos los otros cuadros compensando las diferencias en ISO, tiempo de obturación y apertura al valor de exposición en su imagen seleccionada.

¿No es eso exactamente lo que se supone que debe hacer la fórmula? para mí, parece que se está normalizando para las variaciones en la configuración de exposición.
No, porque cosas diferentes son brillos diferentes. Si desea que todo tenga exactamente el mismo brillo, todo lo que tendrá es una imagen gris sólida.
la fórmula aplica un factor de corrección de exposición constante a todos los píxeles de una imagen. el factor depende únicamente de los parámetros de exposición.
@esa fórmula, si es correcta, sería útil para normalizar imágenes del mismo campo de visión exacto tomadas con diferentes exposiciones. Pero cuando se modifica el campo de visión y se "promedian" las exposiciones para que coincidan, los mismos puntos que se incluyen en ambos campos de visión terminarán casi con seguridad con brillos diferentes. Un punto con brillo medio con cosas muy brillantes a un lado y cosas muy tenues al otro aparecerá en un cuadro que incluye principalmente las cosas tenues como muy brillantes, pero aparecerá como tenue en un cuadro que incluye principalmente las partes más brillantes. de la escena