La diffusion est une famille de processus physiques par lesquels des particules se déplacent et se propagent progressivement avec le temps, depuis une source qui les génère. En traitement d’image, la diffusion se produit principalement à deux endroits :

  • diffusion of photons through lens glass (blur) or humid air (hazing),
  • diffusion of pigments in wet inks or watercolors.

Dans les deux cas, la diffusion rend l’image moins nette en laissant “fuir” des particules et en lissant les variations locales.

Le module diffusion ou netteté utilise un modèle physique généralisé pour décrire plusieurs sortes de diffusion, et peut être utilisé par les créateurs d’images soit pour simuler soit pour inverser des processus de diffusion.

Comme il s’agit d’un module hautement technique, plusieurs préréglages sont fournis pour montrer son utilité pour divers usages.

La diffusion peut être éliminée pour :

  • recover the original image from sensors with an anti-aliasing filter or mitigate the blur created by most demosaicing algorithms (use one of the sharpen demosaicing presets and move the module before the input color profile module in the pipeline),
  • reverse static lens blurring/defocusing (use one of the lens deblur presets),
  • remove atmospheric haze (use the dehaze preset),
  • add extra acutance for better legibility (use the local contrast preset).

Notez que les flous de mouvement ne peuvent pas être éliminés en annulant le processus de diffusion, car ils ne sont pas créés par un phénomène de diffusion.

La diffusion peut être ajoutée pour :

  • create a bloom or Orton effect (use the bloom preset),
  • inpaint missing or damaged parts of an image (use the inpaint highlights preset),
  • denoise in an edge-preserving way (use one of the denoise presets)
  • apply a surface blur (use the surface blur preset).

Comme le procédé est physique, même ses effets indésirables peuvent être utilisés à des fins créatives. Par exemple, vous pouvez :

  • simulate line drawing or watercolor (use the simulate line drawing and simulate watercolor presets),
  • create random patterns and textures by increasing noise (over time, with iterations, noise will connect with neighbours to create random specks).

Remarque : Ce module est très gourmand en ressources, car il s’agit d’un solveur d’équations différentielles aux dérivées partielles, anisotropique et multi-échelles. Le temps d’exécution du module augmente avec le nombre d’itérations et OpenCL est fortement recommandé. Quelques préréglages « rapides » sont fournis pour l’utilisation sur des systèmes sans OpenCL (les préréglages avec la mention rapide).


concepts

time

La diffusion est un processus dépendant du temps : plus il dure, plus loin les particules peuvent se propager. Dans ce module, le temps est simulé en utilisant le nombre d’itérations (le nombre de fois que l’algorithme s’exécute sur lui-même). D’avantage d’itérations peuvent rendre la reconstruction (correction de flou, débruitage, suppression de la brume) plus précise si elle est correctement définie mais peuvent aussi la faire dégénérer.

direction

La diffusion naturelle se produit habituellement depuis les points à haut potentiel (haute énergie ou haute concentration de particules) vers les points à bas potentiel (basse énergie ou basse concentration de particules). Dans une image, cela signifie que la diffusion se produit toujours des pixels les plus clairs vers les pixels les plus sombres.

This particular implementation can simulate natural diffusion, using what is called an isotropic diffusion (all directions have the same weight, like heat diffusion), but can also force a weighted direction parallel to the gradients (forcing diffusion across object edges and creating ghost edges), or a weighted direction perpendicular to the gradients, called isophote (forcing diffusion to be contained inside edges, like in a droplet of watercolor). The relative weight of each direction (gradient and isophote) is user-defined and can be found in the direction section of the module.

vitesse

Depending how fluid the environment is, particles can move more or less freely and therefore more or less fast. The speed of diffusion can be set in the speed section of the module.

Lors d’une reconstruction (débruitage, correction de flou, suppression de la brume), il est conseillé d’utiliser des vitesses faibles pour une meilleure précision. Cela empêche les dépassements numériques (et donc la détérioration de la solution) et peut requérir d’avantage d’itérations. Pour de petits nombres d’itérations, des vitesses plus importantes peuvent être utilisées. Notez que des flous larges ont besoin de beaucoup d’itérations pour une reconstruction correcte, et la vitesse doit être ajustée en conséquence pour éviter de dégénérer la solution.

Toutes les vitesses sont additionnées (premier au quatrième ordre), et les sommes “premier ordre + second ordre” et “troisième ordre + quatrième ordre” ne devraient jamais dépasser ± 100%, sauf si vous voulez produire du glitch art .

échelle

La diffusion naturelle est censée se produire uniquement aux coordonnées voisines les plus proches. C’est à dire que, à chaque itération, chaque pixel ne devrait interagir qu’avec ses 9 voisins les plus proches.

Ici, nous accélérons un peu les choses pour gagner du temps et réutiliser le schéma d’ondelettes multi-échelles du module égaliseur de contraste, afin que nous puissions diffuser à différentes échelles. L’échelle maximale de diffusion est définie par le paramètre étendue de rayon.

Indépendamment de la diffusion, un paramètre netteté permet d’augmenter ou de diminuer les détails à chaque échelle, un peu comme les contrôles spline de l’égaliseur de contraste. Avec le curseur sensibilité aux bords, cela offre les mêmes fonctionnalités que le module égaliseur de contraste (onglet luma et contour), mais dans un espace RVB relatif à la scène.

module controls

paramètres

itérations
Le nombre de fois que l’algorithme doit être exécuté par dessus lui-même. Des valeurs élevées ralentissent le module mais permettent des reconstructions plus précises, à condition que les vitesses de diffusion soient suffisamment faibles.
central radius
The main scale of the diffusion. Zero causes the diffusion to act more heavily on fine details (used for deblurring and denoising). Non-zero values define the size of details to be heavily diffused (used to increase local contrast).
étendue de rayon
Cela vous permet de sélectionner la bande de rayons de détails sur laquelle agir, autour du rayon central. L’étendue de diffusion définit une plage d’échelles de détail (entre centre - étendue et centre + étendue ) à l’intérieur de laquelle la diffusion est confinée. Les valeurs élevées diffusent sur une large bande de rayons, au détriment du temps de calcul. Les valeurs faibles diffusent plus proche autour du rayon central. Si vous envisagez de corriger un flou, la portée du rayon doit être approximativement égale à la largeur du flou de votre objectif et le rayon central doit être égal à zéro. Si vous prévoyez d’augmenter le contraste local, mais que vous ne voulez pas affecter la netteté ou le bruit, la portée du rayon doit être de 3/4 de votre rayon central maximum.

Les rayons sont exprimés en pixels de l’image en pleine résolution, donc copier-coller les réglages entre images de résolution différente peut conduire à des résultats légèrement différents, à l’exception de la netteté au niveau des pixels.

Pour les ingénieurs électriciens, ce qui est défini ici est un filtre passe-bande dans l’espace des ondelettes, utilisant une fenêtre fréquentielle gaussienne centrée sur le rayon central avec une atténuation (écart type) de l'étendue du rayon. Les échelles d’ondelettes sont analogues aux fréquences harmoniques et chaque échelle d’ondelettes définit le rayon des détails sur lesquels agir.

vitesse (netteté ↔ diffusion)

Dans les commandes suivantes, les valeurs positives appliquent la diffusion, les valeurs négatives annulent la diffusion (donc plus net) et zéro ne fait rien.

1st order speed (gradient)
The speed of diffusion of the low-frequency wavelet layers in the direction defined by the 1st order anisotropy setting.
2nd order speed (laplacian)
The speed of diffusion of the low-frequency wavelet layers in the direction defined by the 2nd order anisotropy setting.
3rd order speed (gradient of laplacian)
The speed of diffusion of the high-frequency wavelet layers in the direction defined by the 3rd order anisotropy setting.
4th order speed (laplacian of laplacian)
The speed of diffusion of the high-frequency wavelet layers in the direction defined by the 4th order anisotropy setting.

direction

Dans les contrôles suivants, les valeurs positives font que la diffusion évite les bords (isophotes), les valeurs négatives font que la diffusion suit les gradients au plus près, et zéro affecte les deux de manière égale (isotrope).

1st order anisotropy
The direction of diffusion of the low-frequency wavelet layers relative to the orientation of the gradient of the low-frequency (1st order speed setting).
2nd order anisotropy
The direction of diffusion of the low-frequency wavelet layers relative to the orientation of the gradient of the high-frequency (2nd order speed setting).
3rd order anisotropy
The direction of diffusion of the high-frequency wavelet layers relative to the orientation of the gradient of the low-frequency (3rd order speed setting).
4rd order anisotropy
The direction of diffusion of the high-frequency wavelet layers relative to the orientation of the gradient of the high-frequency (4th order speed setting).

gestion des bords

sharpness
Apply a gain on wavelet details, regardless of properties set above. Zero does nothing, positive values sharpen, negative values blur. This is mostly useful as an adjustment variable when blooming or blurring, to retain some sharpness while adding a glow around edges. You are not advised to use this for sharpening alone, since there is nothing to prevent halos or fringes with this setting.
sensibilité aux bords
Applique une pénalité sur les vitesses de diffusion lorsque des bords sont détectés. Cette détection utilise la variance locale autour de chaque pixel. Zéro désactive la pénalité, des valeurs plus élevées rendent la pénalité plus forte et plus sensible aux bords. Augmentez si vous remarquez des artefacts de bord comme des franges et des halos.
seuil des bords
Définit un seuil de variance, qui affecte principalement les zones à faible variance (zones sombres ou floues, ou surfaces planes). Des valeurs positives augmenteront la pénalité pour les zones à faible variance, ce qui est bon pour accentuer ou augmenter le contraste local sans écraser les noirs. Des valeurs négatives diminueront la pénalité pour les zones à faible variance, ce qui est bon pour le débruiter ou flouter avec un effet maximal sur les régions noires et floues.

spatialité de la diffusion

seuil du masque de luminance
Ce contrôle est utile si vous souhaitez remplir les très hautes lumières en propageant le contenu voisin (inpainting). Pour des valeurs supérieures à 0 %, la diffusion ne se produira que dans les régions avec une luminance supérieure à ce réglage. Notez que du bruit gaussien sera ajouté dans ces régions pour simuler les particules et initialiser l’inpainting.

flux de travail

La principale difficulté de ce module est que si le résultat peut varier considérablement en fonction de ses paramètres d’entrée, ces paramètres n’ont aucun lien intuitif avec la vie quotidienne. Les utilisateurs risquent d’être dépassés, à moins qu’ils ne soient déjà familiarisés avec les équations aux dérivées partielles de Fourier. Cette section propose quelques façons d’aborder ce module sans avoir à comprendre la théorie sous-jacente.

general advice

Si vous prévoyez de corriger le flou de votre image avec ce module, commencez toujours par corriger adéquatement les aberrations chromatiques et le bruit dans l’image, car cette correction risque d’amplifier ces défauts. Il est important de ne pas avoir de pixels noirs écrêtés/bouchés dans l’image. Ceux-ci peuvent être corrigés avec la correction du niveau de noir du module exposition.

Puisqu’il fonctionne sur les canaux RVB séparés, il est préférable d’appliquer ce module après le module calibration couleur, de sorte que vous commenciez avec une image d’entrée entièrement neutre et corrigée pour la balance des blancs. Notez qu’augmenter le contraste local ou la netteté va aussi induire un léger renforcement du contraste de couleur et de la saturation, ce qui est habituellement une bonne chose. Comme il utilise une régularisation basée sur la variance pour détecter les bords, il est également préférable de placer ce module avant toute opération non-linéaire.

starting with presets

Les préréglages fournis ont été ajustés par le développeur et testés sur une gamme d’images pour des usages typiques. Le moyen le plus simple consiste simplement à partir des préréglages, puis à les modifier au besoin :

  • if the effect seems too strong, decrease the number of iterations,
  • if edge artifacts appear, increase the edge sensitivity,
  • if deblurring starts to affect valid blurry parts (bokeh), reduce the radius,
  • if deblurring seems correct in bright areas but excessive in dark areas, increase the edges threshold,
  • if deblurring clips black pixels, lower the black level correction in exposure module,
  • fine-tune the sharpness to your taste.

partir de zéro

Les réglages par défaut du module sont entièrement neutres et ne feront rien à votre image. L’esprit du module est que chaque ordre affecte la texture de l’image d’une façon particulière.

Commencez par régler les paramètres du premier ordre (vitesse et anisotropie) pour avoir une base initiale. Ensuite, ajustez le rayon. Ceci va affecter les textures les plus grossières (les flouter ou les rendre plus nettes). Souvenez vous que le premier ordre agit sur les basses fréquences des échelles d’ondelettes et suit une direction parallèle ou perpendiculaire au gradient des basses fréquences.

Ensuite, commencez les ajustements sur les paramètres du deuxième ordre (vitesse et anisotropie). Le deuxième ordre agit également sur les basses fréquences des échelles d’ondelettes mais suit cette fois une direction parallèle ou perpendiculaire au gradient des hautes fréquences, qui peut être soit la direction de la netteté maximale soit celle du bruit. Ceci peut être utilisé pour réduire le bruit (en utilisant le deuxième ordre en mode diffusion, avec des valeurs positives) quand vous avez utilisé le premier ordre en mode netteté (avec des valeurs négatives).

Ces deux étapes peuvent être effectuées sur l’image dézoomée. Souvenez-vous que, même si l’on a pris grand soin de rendre le résultat visuel de l’algorithme assez invariant à l’échelle, l’aperçu ne sera exact qu’en cas de zoom 1:1. Dans tous les cas, tout ce qui se passe au niveau du pixel (rayon < 2px) ne sera pas visible pour les niveaux de zoom inférieurs à 50 %.

À ce stade, vous souhaiterez peut-être modifier le contrôle sensibilité aux bords pour vous occuper des artefacts aux bords. En théorie, diffuser dans la direction isophote garantit que la diffusion est contenue à l’intérieur des bords, mais cela ne suffit pas lorsque des coins et des formes convexes pointues sont présents dans l’image.

When the edge sensitivity control has been adjusted to produce satisfying results, the image usually becomes quite soft. In most cases it will be necessary, at this point, to increase the number of iterations in order to compensate. This will come with a performance penalty so tread carefully with the performance/quality trade-off depending on your hardware. If you can’t increase the number of iterations, you will have to increase the diffusing speed.

La dernière étape consiste à affiner les troisième et quatrième ordres, qui s’occupent des hautes fréquences de chaque échelle d’ondelettes. Avec ces paramètres vous devrez faire preuve de beaucoup plus de mesure que dans le cas des premier et deuxième ordres. En effet ils peuvent très vite faire exploser le bruit.

Le troisième ordre suit la direction du gradient ou de l’isophote de la couche basse fréquence, il peut donc être utilisé pour guider la diffusion haute fréquence dans une direction qui est plus susceptible d’être légitime en ce qui concerne les bords réels (et moins susceptible de capter du bruit).

Le quatrième ordre suit la direction du gradient ou de l’isophote de la couche haute fréquence et est plus susceptible de capter le bruit. La diffusion sur le quatrième ordre est le meilleur moyen de réduire le bruit sans trop affecter la netteté, soit en tant que débruitage autonome, soit en tant qu’étape de régularisation dans un processus de suppression du flou.

utiliser plusieurs instances pour la reconstruction d’image

Le post-filtrage du bruit peut bénéficier de l’ajout d’un processus de diffusion ; ceci peut être appliqué comme une étape supplémentaire après le module réduction du bruit (profil).

À l’inverse, les problèmes optiques suivant peuvent bénéficier d’une reconstruction par inversion du processus de diffusion :

  1. blur introduced by a sensor’s low-pass filter (LPF) and/or anti-aliasing performed by the demosaic module,
  2. static lens blur,
  3. haze/fog,
  4. light diffusion (using a diffuser that is too large), leading to even lighting and lack of local contrast on the subject.

While more than one of these issues can affect the same picture at the same time, it is better to try to fix them separately using multiple instances of the module. When doing so, ensure the issues are corrected from coarse scale to fine scale, and that denoising always happens first. That is, your instances should appear in the following pipe order:

  1. denoise,
  2. local contrast enhancement,
  3. dehaze,
  4. lens blur correction,
  5. sensor and demosaic correction.

Commencer par les reconstructions sur les échelles les plus grossières réduit la probabilité d’introduire et d’augmenter le bruit en effectuant les reconstructions sur les échelles les plus fines. Ceci est contre-intuitif car ces processus n’arrivent pas dans cet ordre pendant la formation de l’image. Pour la même raison, le débruitage devrait toujours être effectué avant toute tentative d’augmenter la netteté ou le piqué.

remarques et avertissements

Bien que ce module ait été conçu pour être indépendant de l’échelle, sa sortie ne peut être garantie qu’à un zoom de 100 % et sur les exportations en haute qualité ou à pleine résolution. Les résultats à des niveaux de zoom plus bas ou à des dimensions d’exportations plus basses peuvent ne pas correspondre à vos attentes.

En réglant un algorithme de défloutage, essayez de garder à l’esprit que beaucoup des plus belles images de l’histoire de la photographie ont été prises avec des objectifs qui étaient très loin d’offrir la netteté de ceux disponibles aujourd’hui. Bien que la mode actuelle soit de construire et de vendre des objectifs de plus en plus nets, et d’avoir des logiciels qui appliquent des niveaux insensés d’accentuation de la netteté par dessus, cette vague ne conduit pas à de meilleures images et rend le processus de retouche plus pénible. Un léger flou a aussi un intérêt poétique dont les images HD aseptisées et chirurgicales peuvent manquer.

Il doit être noté que le contraste global (utilisant une simple courbe de tonalité ou les niveaux de blanc et de noir) affecte aussi notre perception de netteté, ce qui est très différent d’une netteté optique (la résolution optique). Les yeux humains ne sont sensibles qu’au contraste local, qui peut venir d’une vraie netteté optique (i.e. d’une absence de diffusion – des bords fins) mais aussi de transitions tonales amplifiées. Si un mappage global de tonalité est en place pour augmenter le contraste, l’image va paraître plus nette. Si un mappage de tonalité est utilisé pour diminuer le contraste, l’image va paraître plus floue. Dans aucun de ces cas, les bords réels des objets ne sont affectés d’une quelconque façon, et les conséquences perceptuelles ne sont que pure illusion.

Une partie du processus de vieillissement est la perte de la vue. Le niveau d’accentuation de la netteté que des gens de plus de 50 ans vont trouver plaisant risque de ne pas être le même que pour des gens dans la vingtaine. Cela mérite de chercher à augmenter la netteté pour obtenir un résultat plausible (correspondant à votre perception habituelle) plutôt qu’un résultat plaisant (qui risque de ne paraître beau que pour les gens qui ont la même vue que vous).

Finalement, juger de la netteté des images, zoomé à 1:1 (100 %) ou plus est une tâche insensée. Dans les musées, les expositions, et même à l’écran, le grand public regarde les images comme un ensemble, pas avec une loupe. De plus, dans la plupart des usages courants, les photographies dépassent rarement une résolution de 3000×2000 pixels (environ un tirage aux dimension A4/lettre à 300 PPP), ce qui, pour des capteurs de 24 Mpx, signifie sous-échantillonner par un facteur de 4. Quand vous examinez un fichier de 24 Mpx à 1:1, vous êtes en fait en train de regarder une image qui n’existera jamais. Augmenter la netteté au niveau du pixel, dans ce contexte, est un gaspillage de temps et de cycles processeur.