Ok, disculpad la demora.
Imaginemos que tenemos 2 imágenes, con tiempos de exposición conocidos (se puede extender fácilmente a más tomas, usando pares). Llamémoslos Ts (por short) y Tl (por long) para identificarlos. Sean a su vez, las imágenes "Short" y "Long".
Ambas imágenes deben estar calibradas, pero no reescaladas; todavía en lineal.
Ya que el tiempo de exposición es la única diferencia entre ambas, y sabemos que la intensidad de los pixeles dependen linealmente del tiempo de exposición, usaremos esta propiedad para combinarlas. Además, como sabemos que la de larga exposición tiene mejor SNR en las sombras, es deseable mantener esa información, no contaminarla con la de corta exposición, y a su vez, utilizar las luces altas de la de corta exposición, que no están saturadas.
Para realizar esto, el primer paso es clonar la imagen "Long" -> Long_clone
Esta será la máscara en el proceso de reemplazo de los datos saturados. Para que sea la máscara apropiada, tenemos que procesar este clon con HistogramTransform:
Dependiendo de la razón Ts/Tl, se puede crear un intervalo de "confianza" para los datos de la toma "Short". Si el valor es pequeño, es razonable que el ruido en las zonas alrededor de los pixeles saturados sea comparable al de la toma "Long". Por eso, en vez de hacer un corte "binario", dejaremos un intervalo donde ambas imágenes se combinarán linealmente. Si Ts/Tl es grande, usaremos igual un intervalo, para evitar algún corte brusco en los datos, pero su extensión será mucho menor.
Bien, veamos en la práctica cómo crear ese intervalo. Ajustaremos solamente el punto negro y el punto blanco del clon.
- Punto Blanco: Con este parámetro diremos cuál es el valor máximo donde creemos que no hay pixeles saturados. Como se ha restado bian y darks, no será igual a 1; puede tomar valores distintos. Supongamos que después de evaluar la toma, decidimos que el valor es 0.95. Esto no es muy crítico, no importa que el valor sea algo bajo, pero sí debe reemplazarse a todos los pixeles saturados.
- Punto Negro: Ahora se define el intervalo de confianza. Mi regla "práctica" es que Ts/Tl es un buen indicador del ancho, en una escala normalizada. Ejemplo: si las tomas son Ts= 1s, Tl = 10s, Ts/Tl = 0.1. Entonces, ese es mi rango de confianza. Ajusto el punto negro en 0.85 (Punto blanco - intervalo confianza). Esto es muy al ojo, y se debe revisar el resultado.
Opcional: Para terminar la máscara, puede ser necesario eliminar una o dos capas de wavelets para suavisar su efecto. Así se logran transiciones más suaves, y se evitan artefactos.
Teniendo la máscara lista, ahora se debe modificar la imagen de larga exposición, para que la escala de intensidades sea la misma que la de la de corta exposición.
Paso previo: si la imagen no está en 32bits, puede ser recomendable transformarla ahora, para evitar errores por redondeo.
Como sabemos que el único parámetro "libre" ha sido el tiempo de exposición, usamos ese dato para reescalar la toma de larga exposición. En PixelMath, se escribe la siguiente expresión: $T*Ts/Tl (reemplazando Ts y Tl por los valores que corresponden, en las mismas unidades)
Ahora. habilitamos la máscara para la imagen de larga exposición. Sin invertir, está lista para actuar.
Para reemplazar los datos, usamos la expresión: Short
Esto reemplazará los pixeles de la imagen Long con los de Short. Como hay una máscara actuando, solo donde la máscara es 1 será reemplazado totalmente, y en los valores intermedios se hará un promedio ponderado.
Eso es todo. Por supuesto, si se tienen varias tomas con el mismo tiempo de exposición, se deben integrar previamente. Para mezclar más tomas, hacemos el mismo procedimiento, ordenándolas primero por tiempo de exposición y combinando de a pares, o bien, ir combinándolas secuencialmente sobre la de más tiempo de exposición (La máscara se debe ir creando cada vez, y reescalar la imagen Long antes de reemplazar, por Ts_i/Ts_i+1; es decir, tomar la razón entre el actual tiempo de escalamiento que tiene y el de la toma que se quiere aplicar).