Author Topic: Mas reducción de ruido/More noise reducction  (Read 11144 times)

Offline Silvercup

  • PixInsight Addict
  • ***
  • Posts: 187
Mas reducción de ruido/More noise reducction
« on: 2009 October 01 15:13:15 »
Hola a todos:

A raiz de este hilo http://fotografiaastronomica.com/viewtopic.php?f=33&t=3286 iniciado por RBA sobre una forma de eliminar ruido, me propuse investigar cómo aplicar el método descrito con PixInsight. A continuación explico el resultado de mis intentos no sin antes indicar que es un método para casos extremos. No hay mejor método anti ruido que la toma de muchas exposiciones y aplicar los correspondientes darks, flats, darkflats y bias.

Dicho lo anterior, me animo a mostrar mis resultados porque veo algunos compañeros que publican imágenes que a pesar del esfuerzo que supone obtenerlas salen arruinadas por el ruido. El sistema consiste simplemente en equilibrar el ruido con el fondo del cielo, de tal manera que se enmascare el ruido con el mismo. Evidentemente, en tomas con zonas de  señal muy pobre o aquellas tomas con nebulosidades muy ténues que se confunden con el fondo del cielo este sistema supondrá pérdida de datos, aunque siempre se puede actuar con máscaras para proteger las zonas más débiles.

Para explicar el procedimiento y sus resultados voy a utilizar una imágen de la hélice que en este momento no se a quién pertenece, pero los créditos van a la persona que tomó la imagen, que espero no le moleste que use su imágen. En nigún momento he utilizado máscaras para proteger los datos aunque es altamente recomendable usarlas.

La imagen original:



El equilibrio con el fondo se realiza mediante una simple operación con pixelmath con los siguientes parametros:

R/K:  iif($T[0]<bg,tbgR,$T[0])

G:    iif($T[1]<bg,tbgG,$T[1])

B:    iif($T[2]<bg,tbgB,$T[2])


Symbols: bg=0.06, tbgR=0.04, tbgG=0.05, tbgB=0.04


El resultado:



En este caso he ajustado los parámetros de forma conservadora intentando preservar al máximo los datos del canal rojo.

Podemos ajustar los parametros en Symbols a nuestro gusto. bg es el umbral de fondo de cielo que se usará para equilibrar, todos los pixeles que sean menores a ese umbral serán equilibrados en el canal correspondiente. tbgR, tbgG y tbgB son los factores de equilibrado con el fondo por cada canal, podemos equilibrar más o menos los diferentes canales, dependiendo de la tonalidad del ruido. A menor valor, menor corrección y viceversa. Es cuestión de prueba y error llegar a los resultados deseados. Los valores iniciales los podemos obtener pinchando en algun lugar de la imagen con ruido, vease el ejemplo:



Ajustando los valores podemos llegar a eliminar completamente el ruido a costa de perder señal en las zonas más debiles (si no usámos máscaras de protección), este es el resultado con los siguientes Symbols: bg=0.07, tbgR=0.06, tbgG=0.06, tbgB=0.06



Por último, podemos aplicar ruido sintético al fondo del cielo para mejorar el aspecto plano del mismo aplicando una máscara de luminancia invertida.

Espero que os sea de ayuda.

Un saludo, Silvercup.
 





Hello everyone,

Following this thread http://fotografiaastronomica.com/viewtopic.php?f=33&t=3286 started by RBA on a way to remove noise, I decided to investigate how to apply the described method with PixInsight. I explain the result of my attempts but indicating that it's a method for extreme cases. There is no better anti-noise method than taking many exposures with darks, flats, darkflats and bias.

That said, I dare to show my results because I see some colleagues who publish images that, despite of the effort involved in obtaining them, they are ruined by noise. The system is simply to balance the noise with the sky background, so that mask the noise with it. Obviously, in images with very poor signal areas or those images with very faint Nebula which blends with the sky background such a system will loss data, but you can always acting with masks to protect the faint areas.

To explain the procedure and its results I will use an image of the helix at this point I don't Know who owns it, but the credits go to the person who took the picture, which I hope does not bother that I use his image. I haven't used masks to protect data in the examples, but is highly advisable to use them.

The original image:



The sky background balance is performed with an easy operation with PixelMath with the following parameters:

R/K:  iif($T[0]<bg,tbgR,$T[0])

G:    iif($T[1]<bg,tbgG,$T[1])

B:    iif($T[2]<bg,tbgB,$T[2])


Symbols: bg=0.06, tbgR=0.04, tbgG=0.05, tbgB=0.04

The result:



In this case I have adjusted the parameters of a conservative way, trying to preserve as much the red channel data.

We can adjust the parameters in Symbols to our liking. bg is the sky background threshold to be used for balance, all pixels that are smaller than this threshold will be balanced on each channel. tbgR, tbgG and tbgB balancing factors are the target background for each channel, we can balance more or less the different channels, depending on the noise tone. A lower value, less correction and vice versa. It's a matter of trial and error to get the desired results. The initial values we can obtain by clicking somewhere in the noisy zone of the image, see example:



Adjusting the values we can completely eliminate the noise at the expense of losing signal in weak areas (if not using protective masks), this is the result with the following Symbols: bg = 0.07, tbgR = 0.06, tbgG = 0.06, tbgB = 0.06



Finally, we can apply synthetic noise in the sky background to improve the flat appearance while applying a inverted luminance mask.

I hope you found usefull

Regards, Silvercup.
  
« Last Edit: 2009 October 01 15:23:21 by Silvercup »

Offline mmirot

  • PixInsight Padawan
  • ****
  • Posts: 881
Re: Mas reducción de ruido/More noise reducction
« Reply #1 on: 2009 October 01 19:10:25 »
The noise in the first image seem very low begin with. My monitor is pretty good too.
Therefore, it is a bit hard to follow the effect of the process.

Looks very interesting Silvercup.

Max

PS Thanks for the post in both languages. I surely appreciate the extra effort.

Offline Carlos Milovic

  • PTeam Member
  • PixInsight Jedi Master
  • ******
  • Posts: 2172
  • Join the dark side... we have cookies
    • http://www.astrophoto.cl
Re: Mas reducción de ruido/More noise reducction
« Reply #2 on: 2009 October 01 20:30:13 »
Sorry english speakers... I'll post in spanish here :P Later I'll make a summary.


Hola Silvercup

Primero que nada, me gusta mucho ver a alguien tan activo/curioso como tú. Felicitaciones. Así es como esto mejora. Cualquier crítica que haga no tiene finalidad de menoscabar eso, o despreciarlo, sino que es un "ejercicio" para extraer lo mejor que se pueda. Así que, hecha esa declaración, pasemos a la batalla ;) Y sigue llegando con nuevas ideas ;)

Lo que has descrito se puede reproducir también con HistogramTrasnform. No es exactamente lo mismo, pero es bastante similar. La idea es jugar con el ajuste del punto negro (shadows clipping) y la extensión del histograma, canal a canal, o de forma global. El resultado no acumula las intensidades en un valor intermedio, sino en el máximo del intervalo, pero la idea es más o menos la misma.
Veamos ahora este método de forma más crítica (el que propones). Al tirar todos los valores a un punto intermedio del intervalo estas introduciendo pequeños artefactos, ya que estás desconectando regiones. Por supuesto, tiene la ventaja de mantener en gran medida el flujo, pero esto no es en realidad de gran ayuda. El problema, como dices por ahí, es que estás eliminando información junto con el ruido. Y no solo estoy hablando de nebulosidades u objetos débiles. El mismo flujo del cielo es información, y no es bueno cortarlo de esa manera. Si quieres ser agresivo, puedes usar ACDNR. Para ser más selectivo con el fondo puedes bajar el punto blanco (highlights), y eliminar un par de capas de wavelets. Incluso, en vez de trabajar sobre Luminancia/Crominancia podrías extraer los canales y trabajar sobre los RGB... para este tipo de ruido podría funcionar mejor. Incluso, usando una máscara similar hecha a mano, podrías usar un filtro gaussiano normal, o la convolución promedio que se usa en Blur. Otra alternativa mejor a mi gusto sería un filtro morfológico, usando la mediana.



Ahora, vamos a ver un poco el método que aplica RBA. Al principio, dice que trató de usar SCNR, pero sin resultados satisfactorio. La intuición era buena, sin embargo. SCNR no sirve en este caso, ya que es demasiado "global", pero la idea de comparar las intensidades en realidad es bastante buena. Falta un detalle. Aquí importan además que sean cambios de escala muy pequeña (y mucha intensidad, relativa). Y, por supuesto, que no haya correlación entre los canales es la clave. Tengo una idea de cómo aplicar esto manualmente... pero es algo tedioso (requiere separar las escalas, aplicar filtros, luego juntarlas...). Deja darle un par de vueltas mentales más, y quizás pueda escribir alguna herramienta sencilla que trabaje sobre este tipo de ruido.
Regards,

Carlos Milovic F.
--------------------------------
PixInsight Project Developer
http://www.pixinsight.com

Offline Silvercup

  • PixInsight Addict
  • ***
  • Posts: 187
Re: Mas reducción de ruido/More noise reducction
« Reply #3 on: 2009 October 02 02:08:25 »
Hola Carlos:

Gracias por tus amables palabras. Como ya dije en otro foro PixInsight me permite hacer dos cosas que me gustan mucho, procesar imágenes y programar.
Como el tiempo no acompaña y además para mí es muy dificil salir a tomar fotos (anque espero que esto cambie pronto), pues me dedico a procesar imagenes e intentar solucionar problemas que veo, desde mi modesto conocimiento del tratamiento de imágenes (la parte técnica).

En relación a tu analisis, voy a comentar algunos aspectos con la idea de aportar ideas y avanzar en el tema del ruido que me interesa mucho, pues no todo el mundo puede disponer del tiempo necesario para hacer las tomas necesarias para mejorar la SNR, ni tampoco tienen equipos de alta gama que permitan mejorar en este sentido.

Ya desde el principio he dicho que el procedimiento es para casos extremos en el que tenemos tal cantidad de ruido que la imágen no tiene gran valor desde el punto de vista estético (no entro en el valor científico, pués una imágen con tanto, ruido pienso que ha perdido tal valor). Evidentemente, no se me ocurriria aplicar este método a la imagen de NGC 5189 del Gemini ya que tiene suficiente SNR como para aplicar los métodos avanzados de reducción de ruido.

Comentas que se podría llegar a un resultado parecido con HistogramTranformation, desde mi punto de vista, reproducir el resultado con esta herramienta no es posible. Puedes ajustar las sombras y reducir la intensidad de los canales y el ruido desaparecerá hasta hacerlo imperceptible, pero seguirá estando ahí por que supone un cambio de intensidad global y si cortas las sombras es evidente que pierdes datos. Por otra parte, hacer un ajuste de histograma o curvas preciso es una labor ardua que puede requrir mucho tiempo, sin embargo el pixelmath solo es cuestión de ajustar los parametros y listo.

En cuanto a que al ajustar los valores a un punto medio del intervalo estamos introduciendo artefactos y rompiendo el flujo del fondo del cielo, esto no te lo niego es evidente que esto ocurre. Pero yo parto de una premisa, las imágenes están tan degradadas por el ruido que el flujo del fondo del cielo es inexistente y utilizando ACDNR con este tipo de ruido se generan muchos artefactos que en tomas de más SNR no se producen, probablemente por que este tipo de tomas hay que ser menos agresivo. Procesé una toma de un compañero de m81 y m82 en la que el fono estaba dominado por ruido cromático, por supuesto debido a la
poca exposición no aparece ni rastro de la Integrated Flux Nebula, le he pasado el pixelmath, con sus mascaras por supuesto y bajo mi punto de vista la imagen mejora "estéticamente" y ya le reduje el ruido mediante los procedimientos habituales, pero no llegaba a reduicir por completo el ruido.

Se podría usar, un Gaussian Blur o un filtro minimo o incluso un filtro erosion, lo he intentado con MaximDL y los resultados no mejoran nada en absoluto, mitigan algo el efecto pero nada más. Se podría tarbajar por canales independientes, pero insisto es un trabajo arduo y que a lo mejor para este tipo de imágenes no compensa. El método de RBA me pareció muy interesante, por eso he intentado reproducirlo con pixelmath, el hacia un replace color con photoshop del ruido con el fondo del cielo. Eso es ni más ni menos lo que he intentado hacer. Y vuelvo a insistir es para imágenes "extremas" que no tienen otras posibilidades de tratamiento y con un valor meramente estético. Me da mucha pena cuando alguien tira sus tomas porque tienen este tipo de defectos.

Por ultimo, quiero darte las gracias por ponerte a investigar este tema y agradezco mucho todos tus esfuerzos y lo que estas desarrollando. Yo por mi parte, seguiré investigando procedimientos y exponiendolos, sobre todo para que personas como tú que saben mucho más del tema que yo, puedan llegar a solucionarlos.

English version soon.

Offline Carlos Milovic

  • PTeam Member
  • PixInsight Jedi Master
  • ******
  • Posts: 2172
  • Join the dark side... we have cookies
    • http://www.astrophoto.cl
Re: Mas reducción de ruido/More noise reducction
« Reply #4 on: 2009 October 02 10:55:22 »
Quote
Comentas que se podría llegar a un resultado parecido con HistogramTranformation, desde mi punto de vista, reproducir el resultado con esta herramienta no es posible. Puedes ajustar las sombras y reducir la intensidad de los canales y el ruido desaparecerá hasta hacerlo imperceptible, pero seguirá estando ahí por que supone un cambio de intensidad global y si cortas las sombras es evidente que pierdes datos.

Exactamente. Es evidente que se pierden datos. Mira, deja explicarte el procedimiento con más detalle, para emular tu expresión en PixelMath (como dije, similar, no igual).
Primero cortas, canal a canal, las sombras, usando tbgX como valor. Luego, pones el mismo valor en la extensión de rango dinámico en las sombras.
El resultado es que el rango queda igual, pero has acumulado todos los valores de los pixeles en tbgX.
Puedes hacer exactamente lo mismo que en tu expresión en Curves, poniendo una línea plana (pendiente cero) de 0 a bg, y salida tbgX, para luego continuar con la recta diagonal.
De cualquier manera, es evidente que se pierde información. Una ventaja que tendría la aproximación por las curvas es que puedes hacer la función más suave en los extremos, y así se evitan artefactos.

Quote
Pero yo parto de una premisa, las imágenes están tan degradadas por el ruido que el flujo del fondo del cielo es inexistente y utilizando ACDNR con este tipo de ruido se generan muchos artefactos que en tomas de más SNR no se producen, probablemente por que este tipo de tomas hay que ser menos agresivo.

Hmmm. Yo no diría que el flujo del cielo de fondo es inexistente. Si así fuera, el cielo tendría media cero, y en el histograma es evidente que no es así (el peak). Incluso, si el flujo realmente fuera cero, no importando la mediana, entonces nada te impediría cortar todo eso con un ajuste de punto negro muy agresivo. ¿Por qué no, si solo es ruido? De hecho, esa es la razón porque yo suelo cortar con el ajuste automático al 0.1%. Puedo estar razonablemente seguro que todo lo cortado es ruido, y no flujo del cielo. Incluso podría ser mucho más agresivo, pero la conciencia me empieza a pesar. :D
Concuerdo con que ante ruido muy grande (no en escala) ACDNR no siempre es la mejor solución. Por la misma naturaleza del ruido, a veces aparecen patrones de escala intermedia o grande, que se mantienen. Por eso un filtro mediana podría comportarse mejor.

Quote
Se podría usar, un Gaussian Blur o un filtro minimo o incluso un filtro erosion, lo he intentado con MaximDL y los resultados no mejoran nada en absoluto, mitigan algo el efecto pero nada más.

El filtro mínimo y el de erosión son lo mismo ;)
En este caso, el ruido es "simétrico", a partir de un punto medio que es el flujo del cielo. Osea, hay ruido brillante y oscuro. Por eso, un filtro mínimo o uno máximo no sirven. La mediana, por otro lado, tiene la ventaja de ser bastante insensible a valores extremos, ya que su valor de salida no es el promedio, sino el valor intermedio de la serie ordenadas de intensidades. Por ejemplo, la mediana de 1-2-10 es 2, mientras que el promedio es 4.3.

Quote
El método de RBA me pareció muy interesante, por eso he intentado reproducirlo con pixelmath, el hacia un replace color con photoshop del ruido con el fondo del cielo. Eso es ni más ni menos lo que he intentado hacer.

Si, usas un valor global (que debería ser extraído de la imagen, no puesto a dedo... pero bueno), en vez de un ajuste local, que es lo que hacen los filtros convolutivos o morfológicos. Ahora, la selección que haces es más por intensidad que una desviación cromática. Estas agarrando ***todos*** los pixeles con intensidades menores a bg. Por decirlo de cierta manera, es mutilar severamente la imagen ;) El truco está en ser mucho menos agresivo, mantener cierta dispersión, pero agarrar esos pixeles que claramente se escapan del valor del cielo promedio. Y en establecer los criterios para esa selección es donde empieza lo divertido. Una selección por color, lo que hace es decir: no existen objetos reales con esta coloración. Es una selección tridimensional, ya que las 3 intensidades son evaluadas, y se aplica una esfera de tolerancia alrededor para seleccionar valores similares. Esto es relativamente fácil de implementar, crear una proceso que genere máscaras a partir de tales selecciones. Incluso, reproducir la varita mágica es muy sencillo. Pero, la razón por la que no lo hemos hecho aún es que el criterio de selección es muy arbitrario (sin embargo, es algo que debe hacerse...).

En fin, volviendo a la discusión, el tema no es reproducir cómo se hace la selección en sí, sino cómo se decide si un pixel es ruido o no. Aquí es donde debe estar el refinamiento. Cómo decir, de forma genérica, si un pixel con cierto color es ruido o señal. No es lo mismo un pixel rojo, aislado en medio del cielo, que uno rojo en medio de una nebulosa, aún cuando tengan exactamente los mismo valores. Tampoco es lo mismo tener un pixel con una intensidad en cierto canal mucho mayor que los vecinos, si también tiene esa diferencia en los otros canales. Quizás es una estrella subsampleada. Sin embargo, para el otro lado es mucho menos probable encontrar objetos... no hay "estrellas oscuras", "agujeros negros", en nuestras fotos. Las nebulosas oscuras suelen tener bordes relativamente suaves (de mediana escala).
Resumiendo, son esos criterios los que hay que resolver primero, y luego pensar en cómo implementarlos. Tu solución es establer un rango de intensidades y nada más. Puede funcionar muy bien en ciertos casos, pero es demasiado simple. Y en realidad, no es lo mismo que hacía RBA. Trata de imaginar en 3 dimensiones lo que es seleccionar todo lo está debajo de cierto valor para cada canal, versus una región alrededor de un valor particular.


Gracias por tus palabras ;) Yo creo que aquí hay material suficiente como para crear una herramienta nueva, pero prefiero esperar un poco más, para ver cómo sigue evolucionando el tema :)
Regards,

Carlos Milovic F.
--------------------------------
PixInsight Project Developer
http://www.pixinsight.com