L’évaluation du bruit

Pour étudier les caractéristiques d’une image, rien de mieux qu’une vue des données la composant. Et le premier sujet toujours à la mode est l’évaluation du “bruit” dans celle-ci.

Comme évoqué, la partie “visible” d’une image RAW est facilement extraite en LibRaw et rawpy via rawpy.raw.raw_image_visible. Mais qu’extrait-on ? Du signal ou du bruit ? Et comment le quantifier ?

Mais comment estimer du “bruit” ?

Reprenons les notions de “bruit” dans le cas d’une capture numérique.

  • Un “bruit” est tout ce qui perturbe un “signal
  • Un signal peut engendrer du bruit de par lui-même, ou par sa capture / transformation. Chaque type de signal pouvant être capté peut donc en générer.
  • Si les origines des bruits sont multiples, leurs effets le sont également :
    • Bruits additifs :
      f(x,y) = s(x,y) + b(x,y), b=bruit pour le pixel x,y concerné et une variable aléatoire de moyenne égale à 0
    • Bruits multiplicatifs :
      f(x,y) = s(x,y) * b(x,y), b=bruit pour le pixel x,y concerné et une variable aléatoire de moyenne égale à 1
    • Bruits convolutifs (ex : le flou)
      f(x,y) = s(x,y) ⋆ b(x,y), b=bruit pour le pixel x,y concerné et une variable aléatoire de moyenne égale à 1
  • Si les “signaux” s’additionnent simplement…
    • Si A, B, C = signaux, Somme(A,B,C) = A+B+C
  • Mais les “bruits” s’additionnent de manière quadratique
    • Si B1, B2, B3 = bruits, Somme(B1,B2,B3) = √(B1²+B2²+B3²)
  • Selon le type de bruit, sa suppression ou sa prise en compte sera plus ou moins complexe (un additif est plus simple à supprimer qu’un convolutif)
  • Dans notre cas, la luminosité (signal utile) disponible est déterminante dans la capture et le bruit lié.
    • Si le signal est suffisamment fort, le bruit peut y être largement englobé et quasi invisible.
    • Dans le cas de l’astrophotographie : on dispose de très peu de lumière, donc de signal et le bruit doit être pris en considération.
    • Le concept de rapport Signal/Bruit (S/B ou S/N, pour Signal/Noise) est très important et devrait s’afficher dans une analyse d’une situation de capture (trop faible, correct, idéal ?).

Le rapport signal/bruit

Inutile de rappeler ici toutes dizaines de sites bien fait sur ce (complexe) sujet… ex : theory.uchicago.edu/~ejm/pix/20d/tests/noise/index.html
(que j’ai consulté dès sa création)

Mais bien de s’interroger sur les programmes destinés à les évaluer, car entretemps, il y a de nouveaux capteurs, de nouveaux éléments et de nouvelles manières de “faire”.

Quelle proportion de Signal sera utile par rapport au bruit total engendré ?
La réponse n’a pas changé : S/B = rapport Signal/bruit .
Donc, il faut inventorier les signaux et bruits possibles.

Premier bruit : le bruit de photons
Les photons n’arrivent pas de manière régulière. Ils arrivent de manière
pseudo-aléatoire (loi de Poisson, ex : distribution des gouttes de pluie).
Ex : 19,20,25,19,35,…Ɣ (photons) sur un photosite.

Cette fluctuation autour d’une valeur moyenne est appelée « bruit de photons » et vaut √(N), avec N le nombre de photons => ce bruit sera toujours présent (même avec un capteur idéal).

Exemple (Wikipedia) de l’accumulation progressive des photons,
tombant de manière aléatoire et complétant l’image au fur et à mesure…

La “fluctuation” autour de la moyenne (l’écart type) va varier autour de la racine carrée de cette moyenne.
Donc,
– pour N=100 Ɣ, bruit = √(100) = 10 et S/B=100/10=10
– pour N=10000 Ɣ, bruit = √(10000) = 100 et S/B=10000/100 = 100
Si on veut vraiment diviser le bruit par 2, il faut 4x plus de photons :
S/B = 400/√(400) = 20
S/B = 40000/√(40000) = 200
Et pour cela :
– soit via plus grand diamètre (optique)
– soit plus de pose (mécanique)
– soit par une capture plus grande (privilégier la sensibilité versus résolution, ex “binning“).

Donc, ici, avec un APN qui est moins sensible au départ (une grille de bayer capte 4x moins dans chaque longueur d’onde) = on est mal parti…
Sa seule chance, c’est d’avoir plus de photosites que les autres capteurs.

Deuxième bruit : la pollution lumineuse
Le rayonnement parasite du ciel se rajoute aux photons de l’objet, ce qui provoque la saturation plus rapide du photosite.

Si N=10000 photons, PL=20000 photons, bruit de photons total = √(10000+ 20000) = 173, rapport S/B = 10000/√(30000) = ~58
En posant 4x plus longtemps, on aura 40000 et 80000 photons, le S/B devient 40000/√(120000) = ~115 et ce nombre de photons auront certainement saturé le capteur : plus d’informations disponibles.

Au niveau RAW : ces signaux et bruits seront indissociables, car constituent le résultat capturé par un photosite. L’erreur de PL étant additive, il suffira de retirer une estimation (plus ou moins précise) de celle-ci pour retrouver un signal original relativement correct (“retrait du gradient” : qui pourrait être programmé via une estimation).

Troisième bruit : le signal et bruit thermique
Dépend de la température et du temps de pose.
– Le temps de pose x 2 = signal thermique x 2
– Un écart de +~7°C = signal thermique x 2
=> donc, le refroidissement du capteur vise à réduire son apparition.

Ce signal est reproductible, si les facteurs de capture sont strictement identiques (température extérieure, intérieure, type de capteur, durée de pose). Le traitement de ce signal engendre donc un bruit thermique, appelé courant d’obscurité (dark current).

Pour tous ces bruits, l’unité utilisée est le “e-” (électron), exprimé par temps et pixel. Cette valeur de “dark current” est normalement indiquée par les fabricants, par ex : dans le cas des CCD, il est relativement facile de trouver l’information.

Exemple de “Dark Current”, pour la ZWO ASI1600

Ce bruit est “faible”, mais elle s’applique à chaque conversion photoélectrique, donc : s’applique sur une grande quantité de photons…
Dans le cas des APN, c’est une donnée qui devra généralement

  • soit être décodée (fournie dans un tag interne de l’image)
  • soit déterminée par l’examen des “pixels” non visibles de l’image (donc, ne recevant pas, ou peu, de lumière).
  • soit estimée (par la différence entre deux captures en conditions identiques).
    Un exemple de mesure :
Canon 350D (Rebel XT)    0.5   e/pixel/sec
Canon 550D (Rebel T2i)   0.4   e/pixel/sec
Sony A7S                 0.13  e/pixel/sec

Quatrième bruit : les réponses parasites
Certains photosites répondent différemment que d’autres, de part leur qualité de construction ou leur état actuel.

  • Hot pixel : le photosite est plus sensible au signal thermique présent (point précédents) que d’autres, cela donne un “point chaud” selon le cas (généralement rouge).
  • Dead pixel : le photosite est déficient et ne répond plus à l’accumulation de charge, il donne une réponse identique (généralement noir)
  • Stuck pixel : le photosite est toujours opérationnel, mais ne répond plus correctement, les valeurs sont généralement sur-évaluées (généralement vert ou bleu intense)

Une analyse statistique sur plusieurs images peut détecter ceux-ci et la correction peut se faire via l’examen de pixels adjacents.
Ex : la détection des “hot pixels” peut par exemple se faire via

Fonction de détection d’un hotpixel via les pixels adjacents,
avec x,y : le pixel, pixel(x,y) = dark value
(SPIE – The International Society for Optical Engineering · March 2008)

Cinquième bruit : le bruit de lecture
C’est une incertitude sur la mesure de la conversion analogique vers digital, également exprimé en “e-” (électron) et qui varie selon les caractéristiques du capteur. Il est indépendant du temps de pose, mais introduit à chaque pose mais et fort lié à la notion de Gain.
Sur une CCD : le gain est “fixe” (hardware)
Sur un APN : le gain est variable (hardware et software) => valeur ISO

Ex : en une 1 sec, 1000 photons de 550nm sont reçus par un capteur
– d’une efficacité quantique (ou Quantum Efficacity, QE) de 60% dans cette longueur d’onde.
=> 1000 photons seront convertis en 600 e- et 400 photons seront perdus…
– si le Gain est de 1e-/ADU (donc, pour 1 e- = 1 unité détectable dans l’image)
– et le “bruit” de lecture lié est de 10 e-.
Alors : les lectures successives de la même source oscilleront entre 600 +/- 10 e-, soit 605, 590, 597, 610, etc…

Là aussi, pour les CCD, cette mesure est mise disponible par le fabricant.

Exemple ASI16000, on dispose de 1e-/1ADU pour un gain “affiché” de 139,
et le bruit de lecture sera < 2e-

Pour les APN, il va falloir également le décoder dans des informations mises présentes, soit le déterminer expérimentalement, et les méthodes diffèrent.
(ex : une méthode parmi d’autres…).

Dans le monde Python, il existe des librairies (telle que Astropy) et des fonctions (tels que de “CCD Data Reduction“) des discussions (sur AVVSO) et des publications (telle que ici, très récentes)… On y reviendra.

Sixième bruit : le bruit de quantification
C’est une erreur de conversion analogique vers digital lié à la précision de la conversion (vers des valeurs finies). De nos jours (ce ne fut pas le cas jadis), ce bruit (=perte de signal) est considéré comme négligeable…

Mais le “pas d’échantillonnage” (lié au capteur) est directement lié à cet aspect.

Ex : si la “Full Well” (ou FW) capacity (capacité maximale de stockage d’e- avant “débordement” sur d’autres) est de 100000 e-.
Mais la capacité d’échantillonnage est de 10 bits, soit 2^10 ou 1024 niveaux (ou ADU). Cela veut dire que 1 ADU vaut = 100000/1024 = 97 e-

Donc, un signal fournissant moins de ~100 e- ne sera pas détectable.

Faisons le bilan des bruits…

BruitLié àPour le mesurer
Bruit de lectureConversion e- > ADUBias (=offset)
Bruit thermiqueSignal thermique pendant la captureDark
Bruit PLSignal de la Pollution LumineuseLumière
Bruit de quantificationConvertisseurNégligeable…
Les sources de bruit…

Et maintenant, il faut les calculer / estimer sur base des informations disponibles dans une (ou plusieurs) RAW.

Détection du bruit de lecture.

Pour un APN, l’information est-elle disponible ?
Le gain dans le cas d’un APN se matérialise par le facteur ISO, qui est accessible dans l’image RAW via la lecture des métadonnées EXIF.

Ce sujet a été traité ici : https://ttfonweb.eu/lecture-des-metadonnees/
Donc, on va ré-utiliser la solution utilisée pour les extraire.

Maintenant, couplons les notions avec les “termes” courants de l’astrophoto tel qu’on le lit dans les manuels…

“An offset voltage called bias is applied to the CCD chip to ensure there are no negative counts during readout. There are small variations in the value of the bias across the chip, and there can be small variations in the bias level over time.”

Counts can be generated in a pixel due to thermal motion of electrons in CCD; cooling a CCD reduces, but may not fully eliminate, this dark current.
In modern CCDs the dark current is often ignorable except for a small fraction of pixels. Dark current is typically reported in electrons / second / pixel, and depends strongly on temperature.

There is read noise intrinsic to the electronics of the CCD. It is impossible to eliminate this noise (it’s present in every image taken by the camera) but there are approaches to minimizing it. Read noise is typically reported in electrons as it can depend on temperature.

Some light received by the telescope is scattered light coming from the night sky. The amount of sky background depends on the filter passband, the atmospheric conditions, and the local light sources.

Though a CCD chip is fairly small, it’s not unsual for cosmic rays to hit the chip, releasing charge that is then converted to counts
.”

J’ajoute, pour compléter, que pour les défauts de :

  • Vignetage (coins d’image sombres)
  • Poussières et obstacles dans le chemin optique
  • Variations dans la sensibillité des photosites
  • Les “Dead Pixels”

Ils seront corrigés via l’usage d’une image “Flat”, une image uniformément illuminée, qui servira de référence pour les éliminer.

La théorie mise en pratique


La suite en écriture…