Página 1 de 1

[ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Lun Mar 27, 2017 12:56 am
por Guillermo Luijk
Una encuesta para ver lo que intuitivamente pensáis: si tenemos dos capturas de una misma escena, una con más ruido que la otra (por ejemplo porque se obtuvo con menor exposición), podemos de algún modo obtener una imagen final con menos ruido que eligiendo simplemente la captura que individualmente tiene menos ruido?.

Pista: si hacemos dos capturas de una misma escena con los mismos parámetros, hay algo que suele hacerse para obtener una imagen final con menos ruido que el que presentan ambas capturas?.

Para votar hay que entrar por web.

Salu2!

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Lun Mar 27, 2017 6:07 am
por soyeltroll
En astrofotografia se hace mucho, y tiene su logica.

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Lun Mar 27, 2017 11:42 am
por Pau
A mi me gustarla saber como se hace.

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Lun Mar 27, 2017 11:54 am
por Alfon80
Me uno a Pau, también me gustaría saber como se hace!
saludos

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Lun Mar 27, 2017 12:11 pm
por toshiro
Pau escribió:A mi me gustarla saber como se hace.

Alfon80 escribió:Me uno a Pau, también me gustaría saber como se hace!
saludos


http://www.lonelyspeck.com/milky-way-ex ... photoshop/

[youtube]http://www.youtube.com/watch?v=zzVSm64zq44[/youtube]

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Lun Mar 27, 2017 12:21 pm
por Alfon80
Muchas gracias compi!


Enviado desde mi iPhone utilizando Tapatalk

alpha_optimo

NotaPublicado: Lun Mar 27, 2017 11:34 pm
por Guillermo Luijk
Parece que ni mi voto por la opción 1 os ha disuadido de votar la opción 2 :D
No sé si se entendía del todo lo que preguntaba: no era si haciendo la media de dos capturas iguales se reduce el ruido, algo que es de sobra conocido, sino si puede reducirse el ruido aún cuando una de las 2 captura es claramente más ruidosa que la otra. Puede resultar contraintuitivo: cómo va una imagen llena de grano a ayudar a limpiar otra que está más limpia?.

La realidad es que por mucho ruido que tenga la imagen más ruidosa, siempre puede contribuir a hacer el resultado más limpio. Si la diferencia de ruido entre las dos imágenes es muy grande la contribución de la ruidosa tenderá a 0, pero nunca será nula.

He calculado que si la relación entre el ruido de las imágenes 1 y 2 es k:

Ruido_1 = k * Ruido_2 (0 < k < oo)

O dicho de otro modo, si:

Relación S/N_1 = 1/k * Relación S/N_2

La máxima mejora al fusionar ambas imágenes se consigue con un parámetro de transparencia:

alpha_optimo = 1 / (k^2 + 1) (0 < alpha_optimo < 1)

En el ejemplo que he construido con ruido gaussiano puro, la diferencia de ruido la he tomado de k=1,66666..., lo que da un alpha_optimo = 26,47% de transparencia para la imagen ruidosa, y por tanto un 73,53% para la menos ruidosa. Cuando me he llevado las imágenes a Photoshop, el cálculo ha sido casi perfecto (con ruido siempre hay una incertidumbre): para una fusión con transparencia 73% (Photoshop no deja decimales) se tiene la máxima relación S/N en la fusión; aumentando o disminuyendo empeora. La mejora no es para tirar cohetes pero menos da una piedra:

Imagen


La animación muestra la imagen 1 (la más ruidosa), luego la 2 (la menos ruidosa) y por último la fusión óptima (el estrechamiento del histograma desde la imagen 2 es la contribución a la reducción del ruido de la imagen 1).

En esta gráfica puede verse que ninguna otra fusión habría dado una imagen menos ruidosa (cuando más varianza, más ruido y peor relación S/N): a la izquierda sería tomar solo la imagen 2, en el centro sería hacer una fusión 50%/50% (la habitual que hace casi todo el mundo, y que de hecho es el alpha_optimo cuando ambas imágenes tienen el mismo ruido):

Imagen


La fórmula de alpha_optimo no me la he sacado de la manga, un poco de estadística y se deduce:

Imagen


Que para qué sirve esto? en aplicaciones normales para nada desde luego. Pero en programas de HDR (donde hay capturas de diferente relación S/N que hay que fusionar), o en astrofotografía donde se tiene que afinar todo lo posible puede tener aplicación. A mí me ha venido genial para practicar con un lenguaje que estoy aprendiendo.

El código:

Código: Seleccionar todo
LARGO=160000
FINE=31L

SD1=0.04*3.5
SD2=0.024*3.5
k=SD1/SD2
alphaopt=1/(k^2+1) # alpha que maximiza la S/N de la mezcla
mejora_N1=(k^2+1)^0.5
mejora_N2=(1/(k^2)+1)^0.5

S1=seq(from=0.5, to=0.5, len=LARGO)
N1=rnorm(LARGO, mean=0, sd=SD1)
S2=S1
N2=rnorm(LARGO, mean=0, sd=SD2)

# xaxis=seq(from=0, to=1, len=LARGO)
# plot(xaxis, S1+N1, ylim=c(0,1) , type='l')
# plot(xaxis, S2+N2, ylim=c(0,1) , type='l')

alpha=as.array(seq(from=0, to=1, len=FINE))
y=array(0, dim=c(FINE,LARGO))
for (i in 1:FINE) y[i,]=alpha[i]*(S1+N1)+(1-alpha[i])*(S2+N2)
yopt=alphaopt*(S1+N1)+(1-alphaopt)*(S2+N2)

varianza=alpha
for (i in 1:FINE) varianza[i]=var(y[i,])

plot(alpha, varianza, ylim=c(0,max(var(N1),var(N2))), type='o')
abline(v=alphaopt, col='red')
abline(v=alpha, col="lightgray", lty = "dotted")

# Checks
SNR1=mean(S1)/(var(N1)^0.5)
SNR2=mean(S2)/(var(N2)^0.5)
SNRopt=mean(yopt)/(var(yopt)^0.5)

print(paste0("SNRopt/SNR1=", round(SNRopt/SNR1, digits=4)," vs mejora_N1=",
            round(mejora_N1,4)))
print(paste0("SNRopt/SNR2=", round(SNRopt/SNR2, digits=4)," vs mejora_N2=",
            round(mejora_N2,4)))

img1=as.array(S1+N1)
img2=as.array(S2+N2)
imgout=as.array(yopt)

dim(img1)   <- c(400,400) # Genialidad para convertir un vector en imagen
dim(img2)   <- c(400,400)
dim(imgout) <- c(400,400)
# library(grid)
# grid.raster(imagen-min(imagen))

hist(img1, breaks=200, xlim=0:1)

img1[img1 < 0] <- 0
img2[img1 < 0] <- 0
imgout[imgout < 0] <- 0

img1[img1 > 1] <- 1
img2[img2 > 1] <- 1
imgout[imgout > 1] <- 1

library(tiff)
writeTIFF(img1,   "img1.tif",   bits.per.sample=16, compression="LZW")
writeTIFF(img2,   "img2.tif",   bits.per.sample=16, compression="LZW")
writeTIFF(imgout, "imgout.tif", bits.per.sample=16, compression="LZW")


Salu2!

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Mar Mar 28, 2017 9:12 am
por soyeltroll
Ahhh vale, ahora me queda clarisimo :-p

Enviado desde Tapatalk

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Mar Mar 28, 2017 9:21 am
por Pau
Ya puestos, en vez de 2 fotos, 3 mejor? :mrgreen:

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Mar Mar 28, 2017 9:48 am
por toshiro
Pau escribió:Ya puestos, en vez de 2 fotos, 3 mejor? :mrgreen:


En astrofotografía, usando montura ecuatorial motorizada, lo habitual es hacer 20, 30, 50 o incluso 100

En esta web se puede ver la diferencia de ruido entre una única foto y 88 fotos apiladas: http://www.budgetastro.net/astrophotgra ... cking.html

Imagen

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Mar Mar 28, 2017 10:07 am
por arfoga
Igual es una pregunta tonta pero serviria tambien fusionar copias de una misma foto?

Enviado desde mi LG-H850 mediante Tapatalk

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Mar Mar 28, 2017 10:30 am
por Guillermo Luijk
Pau escribió:Ya puestos, en vez de 2 fotos, 3 mejor? :mrgreen:

Es que calculada la mezcla óptima para 2 fotos, puedes hacer la mezcla óptima de N fotos. Basta repetir el algoritmo con la relación S/N obtenida de la primera mezcla, por ejemplo para 3 fotos: SNR1, SNR2, SNR3
Mezclamos SNR1 y SNR2, el resultado da una SNR'
Mezclamos SNR' con SNR3
...

En relación con eso, otra aplicación de esta mezcla óptima que quise probar en su día es la obtención de BN con mínimo ruido. Un BN es la mezcla ponderada de los 3 canales RGB de la captura RAW, pero si alguno de los canales tiene mucho más ruido que los otros 2 (típicamente el azul por recibir menos exposición), lo óptimo de cara al ruido es hacer que ese canal pese menos en la mezcla. Lo tengo que probar, no me parece difícil hacer un algoritmo que genere un BN con mínimo ruido adaptándose a los niveles RGB en cada zona de la imagen, y la diferencia aquí será grande. Lo que me pregunto es qué pinta tendrá la luminosidad obtenida :D


toshiro escribió:En esta web se puede ver la diferencia de ruido entre una única foto y 88 fotos apiladas:
Imagen


La mejora por promediar 88 fotos es 88^0,5=9,38 veces menos ruido. Para hacernos una idea de la magnitud es la misma mejora que se logra en las sombras cuando se aumenta la exposición (apertura/velocidad) en log2(9,38)=3,2EV.


arfoga escribió:Igual es una pregunta tonta pero serviria tambien fusionar copias de una misma foto?


Pues no :) si la foto es la misma el ruido está correlado ya que es exactamente el mismo, y por lo tanto no hay mejora de relación S/N, (A+A)/2=A. Si miras las fórmulas verás que hay un término de Covarianza que solo vale 0 si el ruido está incorrelado.

Salu2!

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Mar Mar 28, 2017 1:15 pm
por soyeltroll
Voy a decir como una mente primitiva como la mia piensa que funciona esto y me corregis si es erroneo o incompleto vale?
El ruido, en una buena proporción, aparece de forma aleatoria, si juntamos 2 fotos bastante ruidosas y comparamos los cambios es una forma facil de discernir entre lo que es ruido y lo que no, y asi generar una foto mas limpia eliminando los puntitos que no se repiten...

Enviado desde Tapatalk

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Mar Mar 28, 2017 1:19 pm
por Guillermo Luijk
soyeltroll escribió:si juntamos 2 fotos bastante ruidosas y comparamos los cambios es una forma facil de discernir entre lo que es ruido y lo que no


Imagina dos imágenes monocromas de 1 píxel de resolución. En una el píxel vale 200 y en la otra vale 150.
Hala! disciérneme de manera fácil cuanto ruido tenía cada imagen :D

Salu2!

Re: alpha_optimo

NotaPublicado: Mar Mar 28, 2017 1:34 pm
por pablomaig
Guillermo Luijk escribió:Parece que ni mi voto por la opción 1 os ha disuadido de votar la opción 2 :D
No sé si se entendía del todo lo que preguntaba: no era si haciendo la media de dos capturas iguales se reduce el ruido, algo que es de sobra conocido, sino si puede reducirse el ruido aún cuando una de las 2 captura es claramente más ruidosa que la otra. Puede resultar contraintuitivo: cómo va una imagen llena de grano a ayudar a limpiar otra que está más limpia?.

La realidad es que por mucho ruido que tenga la imagen más ruidosa, siempre puede contribuir a hacer el resultado más limpio. Si la diferencia de ruido entre las dos imágenes es muy grande la contribución de la ruidosa tenderá a 0, pero nunca será nula.

He calculado que si la relación entre el ruido de las imágenes 1 y 2 es k:

Ruido_1 = k * Ruido_2 (0 < k < oo)

O dicho de otro modo, si:

Relación S/N_1 = 1/k * Relación S/N_2




La máxima mejora al fusionar ambas imágenes se consigue con un parámetro de transparencia:

alpha_optimo = 1 / (k^2 + 1) (0 < alpha_optimo < 1)

En el ejemplo que he construido con ruido gaussiano puro, la diferencia de ruido la he tomado de k=1,66666..., lo que da un alpha_optimo = 26,47% de transparencia para la imagen ruidosa, y por tanto un 73,53% para la menos ruidosa. Cuando me he llevado las imágenes a Photoshop, el cálculo ha sido casi perfecto (con ruido siempre hay una incertidumbre): para una fusión con transparencia 73% (Photoshop no deja decimales) se tiene la máxima relación S/N en la fusión; aumentando o disminuyendo empeora. La mejora no es para tirar cohetes pero menos da una piedra:

Imagen


La animación muestra la imagen 1 (la más ruidosa), luego la 2 (la menos ruidosa) y por último la fusión óptima (el estrechamiento del histograma desde la imagen 2 es la contribución a la reducción del ruido de la imagen 1).

En esta gráfica puede verse que ninguna otra fusión habría dado una imagen menos ruidosa (cuando más varianza, más ruido y peor relación S/N): a la izquierda sería tomar solo la imagen 2, en el centro sería hacer una fusión 50%/50% (la habitual que hace casi todo el mundo, y que de hecho es el alpha_optimo cuando ambas imágenes tienen el mismo ruido):

Imagen


La fórmula de alpha_optimo no me la he sacado de la manga, un poco de estadística y se deduce:

Imagen


Que para qué sirve esto? en aplicaciones normales para nada desde luego. Pero en programas de HDR (donde hay capturas de diferente relación S/N que hay que fusionar), o en astrofotografía donde se tiene que afinar todo lo posible puede tener aplicación. A mí me ha venido genial para practicar con un lenguaje que estoy aprendiendo.

El código:

Código: Seleccionar todo
LARGO=160000
FINE=31L

SD1=0.04*3.5
SD2=0.024*3.5
k=SD1/SD2
alphaopt=1/(k^2+1) # alpha que maximiza la S/N de la mezcla
mejora_N1=(k^2+1)^0.5
mejora_N2=(1/(k^2)+1)^0.5

S1=seq(from=0.5, to=0.5, len=LARGO)
N1=rnorm(LARGO, mean=0, sd=SD1)
S2=S1
N2=rnorm(LARGO, mean=0, sd=SD2)

# xaxis=seq(from=0, to=1, len=LARGO)
# plot(xaxis, S1+N1, ylim=c(0,1) , type='l')
# plot(xaxis, S2+N2, ylim=c(0,1) , type='l')

alpha=as.array(seq(from=0, to=1, len=FINE))
y=array(0, dim=c(FINE,LARGO))
for (i in 1:FINE) y[i,]=alpha[i]*(S1+N1)+(1-alpha[i])*(S2+N2)
yopt=alphaopt*(S1+N1)+(1-alphaopt)*(S2+N2)

varianza=alpha
for (i in 1:FINE) varianza[i]=var(y[i,])

plot(alpha, varianza, ylim=c(0,max(var(N1),var(N2))), type='o')
abline(v=alphaopt, col='red')
abline(v=alpha, col="lightgray", lty = "dotted")

# Checks
SNR1=mean(S1)/(var(N1)^0.5)
SNR2=mean(S2)/(var(N2)^0.5)
SNRopt=mean(yopt)/(var(yopt)^0.5)

print(paste0("SNRopt/SNR1=", round(SNRopt/SNR1, digits=4)," vs mejora_N1=",
            round(mejora_N1,4)))
print(paste0("SNRopt/SNR2=", round(SNRopt/SNR2, digits=4)," vs mejora_N2=",
            round(mejora_N2,4)))

img1=as.array(S1+N1)
img2=as.array(S2+N2)
imgout=as.array(yopt)

dim(img1)   <- c(400,400) # Genialidad para convertir un vector en imagen
dim(img2)   <- c(400,400)
dim(imgout) <- c(400,400)
# library(grid)
# grid.raster(imagen-min(imagen))

hist(img1, breaks=200, xlim=0:1)

img1[img1 < 0] <- 0
img2[img1 < 0] <- 0
imgout[imgout < 0] <- 0

img1[img1 > 1] <- 1
img2[img2 > 1] <- 1
imgout[imgout > 1] <- 1

library(tiff)
writeTIFF(img1,   "img1.tif",   bits.per.sample=16, compression="LZW")
writeTIFF(img2,   "img2.tif",   bits.per.sample=16, compression="LZW")
writeTIFF(imgout, "imgout.tif", bits.per.sample=16, compression="LZW")


Salu2!

Siempre intuí que tras ese pseudónimo se escondía Sheldon Cooper :lol:

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Mar Mar 28, 2017 6:29 pm
por Valdorg
soyeltroll escribió:Voy a decir como una mente primitiva como la mia piensa que funciona esto y me corregis si es erroneo o incompleto vale?
El ruido, en una buena proporción, aparece de forma aleatoria, si juntamos 2 fotos bastante ruidosas y comparamos los cambios es una forma facil de discernir entre lo que es ruido y lo que no, y asi generar una foto mas limpia eliminando los puntitos que no se repiten...

Enviado desde Tapatalk


Eso es lo que hace si se aplica la mediana (también se puede probar promedio) en los apilamientos. Elimina lo que no se repite que puede ser ruido, o cualquier otra cosa que no permanezca constante.

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Mar Mar 28, 2017 7:18 pm
por Guillermo Luijk
Valdorg escribió:
soyeltroll escribió:Voy a decir como una mente primitiva como la mia piensa que funciona esto y me corregis si es erroneo o incompleto vale?
El ruido, en una buena proporción, aparece de forma aleatoria, si juntamos 2 fotos bastante ruidosas y comparamos los cambios es una forma facil de discernir entre lo que es ruido y lo que no, y asi generar una foto mas limpia eliminando los puntitos que no se repiten...

Enviado desde Tapatalk


Eso es lo que hace si se aplica la mediana (también se puede probar promedio) en los apilamientos. Elimina lo que no se repite que puede ser ruido, o cualquier otra cosa que no permanezca constante.


La mediana y la media con dos fotos son la misma cosa :) La mediana solo tiene sentido cuando se tiene un número elevado de tomas.

Salu2!

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Mié Abr 05, 2017 1:18 am
por Guillermo Luijk
Puesto en limpio por si a alguien le interesa el tema:

Combinación óptima de señales para minimizar ruido con R

Salu2!

Aplicación: BN con mínimo ruido

NotaPublicado: Dom Abr 09, 2017 6:10 pm
por Guillermo Luijk
Con la idea de aplicar el algoritmo a la construcción de un BN basado en el RAW con mínimo ruido, he extendido el cálculo a la combinación de 3 señales (canales RGB):

Imagen

Imagen

Una primera prueba (el algoritmo es mejorable, de momento he asumido que todo el ruido es de lectura, pero para ruido fotónico la mezcla óptima varía) aplicando esos 3 pesos a los canales de una extracción RAW pura (la comparo con otros métodos conocidos):

ALGORITMO ÓPTIMO
Imagen

CAPA DE AJUSTE DE BN DE PHOTOSHOP
Imagen

CONVERSIÓN A LAB
Imagen

ESCALA DE GRISES
Imagen


Curiosamente este último método que suele ser desechado, en cuanto a ruido es el que más se acerca al algoritmo óptimo (algo que ya me había dado la impresión en el pasado), pero el algoritmo óptimo los supera a todos.

Esta imagen da una idea de por dónde han ido los tiros en la fusión de los 3 canales RAW, se trata de una imagen virtual que nos indica en cada zona la participación relativa que ha tenido cada canal en la construcción del BN. Puede verse que el canal azul, que generalmente tiene menos exposición y por tanto peor relación S/N que los otros dos, solo es dominante en la cabina de Koji Kabuto y en ciertas áreas de las sombras profundas que son azuladas:

Imagen

La cabina relativamente pobre en rojos y verdes tiene mucho menos ruido en la combinación óptima que en cualquiera de los otros métodos. También ocurre esto en las zonas rojas del pecho de Mazinger. En general intuyo que el algoritmo mejorará más a los métodos tradicionales en zonas atípicas donde el canal verde del RAW no sea dominante. Voy a probar con un RAW infrarrojo que tengo por algún lado.

Salu2!

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Dom Abr 09, 2017 6:23 pm
por Guillermo Luijk
Comparación con Capa de Ajuste de BN de Photoshop (Preset = None):

Imagen

Salu2!

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Vie Abr 21, 2017 11:00 am
por ssantos77
Aqui sigo leyendote para seguir aprendiendo. Muchisimas gracias por compartir tu conocimiento!

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Sab Abr 22, 2017 12:58 am
por danixmen
Cuando activamos la reducción de ruido por largas exposiciones en la cámara, esta tarda el doble de tiempo en procesar la imagen, ya que genera una imagen "en negro" y la mezcla con las zonas donde ha generado ruido la foto.
Es la misma "base" que mezclar estas 2 fotos que comentas?

Enviado desde mi CUBOT ECHO mediante Tapatalk

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Sab Abr 22, 2017 1:08 am
por Guillermo Luijk
No tiene nada que ver. Esa reducción de ruido es una resta para que los niveles RAW anómalos (hotpixels y ruido espacial en general, es decir el que aparece en igual localización y amplitud en todas las tomas), se cancele.

Aquí lo que he calculado es en qué % debe aparecer cada imagen origen en el resultado final para que el ruido sea mínimo.

Si tienes dos imágenes de igual exposición el peso será 50%/50%. Si son de diferente exposición los pesos serán distintos (me lo invento: 70% para la más y 30% para la menos expuesta).

Salu2!

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Sab Abr 22, 2017 9:25 am
por danixmen
Entiendo (o creo)....y si fuera una foto tan subexpuestas que fuera casi oscura, digamos que el peso fuera 99%-1%? Supongo que entonces apenas se reduciría el ruido

Enviado desde mi CUBOT ECHO mediante Tapatalk

Re: [ENCUESTA] Ruido al mezclar dos imágenes

NotaPublicado: Sab Abr 22, 2017 9:29 am
por Guillermo Luijk
Claro, en ese caso el resultado sería equivalente a tomar la captura mejor expuesta y desechar la otra.

Salu2!