darktable 3.8, nouveau module : diffusion ou netteté

La diffusion est un procédé physique par lequel des particules se répandent dans leur environnement, en équilibrant leur concentration dans l’espace. Elle affecte aussi la lumière qui traverse un milieu matériel transparent (air humide, verre de lentille). Ses équations sont bien connues et les résoudre permet de simuler ou de retirer des flous naturels dans une image. C’est ce que permet de faire le nouveau module diffusion ou netteté, de façon réversible. Au programme : suppression de voile atmosphérique, défloutage d’objectif, contraste local, débruitage, flou de surface, effet Orton, effets aquarelle et reconstruction de hautes lumières.

La démonstration (en anglais) :

La documentation (en anglais).

Aurélien PIERRE

Photographe portraitiste à Nancy-Metz. Spécialiste en calcul, modélisation et simulation numérique pour le traitement d'image (débruitage, défloutage, gestion de la couleur) et le génie thermique. Développeur de filmique, égaliseur de ton, balance couleur, du focus-peaking, etc. Utilisateur de darktable depuis 2010. darktable est mon métier, pensez à m'aider à le développer.

22 thoughts to “darktable 3.8, nouveau module : diffusion ou netteté”

  1. Bonjour,

    J’admire votre niveau de connaissance scientifique sur tout ce qui touche à la lumière et à la couleur.
    J’utilise avec plaisir certains modules que vous avez développé et je vous en remercie.

    Mais force est de constater que l’interface de ce module présente surtout la configuration technique de vos algorithmes plutôt que quelque chose qui parle à un photographe.

    Je connais votre point de vue sur le sujet et je sais qu’il est difficile de proposer une interface simple quand la problématique sous-jacente est complexe mais je pense qu’un logiciel comme Darktable devrait avoir une interface accessible au plus grand nombre ce qui je pense n’est pas le cas ici.
    Les presets sont un bon début mais une interface simplifiée à l’image de ce qui est fait dans le module de traitement du bruit serait à mon avis un vrai atout pour votre module.

    Bonne continuation.

    1. Certes, et une fois ce constat, comment le faire ? Croyez-vous que ce soit si simple. Tout n’est pas facilement vulgarisable et simplifiable sans perdre en précision ou sans masquer des infos, etc. Bref, en général les logiciels de traitement photo ou vidéo plus faciles masquent des infos et réglages. Et donc font des choix de traitement sur lesquels l’utilisateur n’a pas la main.

      On ne peut pas tout avoir. Le positionnement de darktable est d’abord sur la puissance et possibilité de traitement en ne cachant rien. Ensuite, si en plus ça peut être présenté simplement ok, mais quand c’est possible.

    2. Bonjour,

      je ne sais pas ce qu’est « un photographe ». Il y a en plein de versions différentes, et chacune d’entre elles est convaincue d’être l’épitomé de la représentativité statistique du « photographe moyen ». C’est à dire que chaque photographe est convaincu d’être plus normal et d’avoir des besoins plus important que ses collègues.

      Je sais que c’est un module technique et c’est écrit dessus. Je ne sais pas ce qu’est une interface simplifiée. Je ne sais pas comment simplifier un solveur d’équations différentielles aux dérivées partielles anisotropique multi-échelles régularisées par variance. Je ne sais vraiment pas.

      Reste que ce type d’outil permet d’atteindre des résultats impossible avec les outils classiques. Donc ça a un intérêt. Et comme c’est un module optionnel, rien n’est imposé.

      Donc en l’absence de conseil spécifiques et applicables sur le mode opératoire, il n’y aura pas de « simplification » du module. Simplifier ne veut rien dire. Tout le monde aime la simplicité. Sauf que parfois c’est juste pas possible.

      1. En fait je m’attendais à ce genre de réponse. 😉

        Quand vous dites que vous ne savez pas simplifiez “un solveur d’équations différentielles aux dérivées partielles anisotropique multi-échelles régularisées par variance”, dites-vous bien que 99% des photographes ne sauront pas ce qu’est “un solveur d’équations différentielles aux dérivées partielles anisotropique multi-échelles régularisées par variance”.
        Et heureusement ce n’est pas un prérequis pour faire une belle photo!

        Je sais que dans le monde de l’open source les développeurs travaillent avant tout à faire quelque chose qui leur plait mais en tant que développeur logiciel également j’attache aussi une grande importance à ce que mon travail puissent être compris par le plus grand nombre. A chacun son point de vue…

        1. Ça n’est pas une question de point de vue.

          J’ai un truc qui fait de la physique de BAC+3 en interne, comment je traduis ça en langage courant ?

          J’ai essayé dans la documentation, ça fait des phrases de 4 km qui ne simplifient pas vraiment l’explication, parce que pour éviter le vocabulaire technique concis, je dois user de circonlocutions et de périphrases interminables. C’est long, c’est lourd, est-ce que c’est plus clair ? Pas sûr.

          Les belles paroles, les vœux pieux et les intentions louables ne serviront à rien ici. Dites moi comment je peux faire concrètement ou ne dites rien du tout. Je suis un technicien, pas un politicien, les grandes prospectives ne sont pas ma préoccupation et la seule chose qui m’intéresse, c’est comment on fait. On aime tous la simplicité, mais la réalité est complexe et pas toujours simplifiable. C’est pour ça qu’il y a des gens qui font 5 à 12 ans d’études.

          L’alternative, c’est d’éviter d’utiliser l’outil.

          Je suppose qu’on peut faire la même remarque à propos de tous les outils du photographe. Je parie qu’il y a 30 ans, « un photographe » ne savait pas ce qu’était le JPEG, une carte SD ou un format 8 bits. Il a bien fallu qu’il apprenne… Toutes les disciplines se compliquent avec le temps parce qu’on cherche à aller plus loin, et on n’a pas le choix de se mettre à niveau des outils qui permettent d’accomplir cet objectif. Ou d’abandonner l’objectif et de se contenter de se qu’on a.

        2. Bonjour

          Je laisse les développeurs répondre à certains propos pouvant être considérés comme désobligeant.

          Je suis utilisateur de darktable depuis plusieurs années et l’interface ne me gêne pas.
          Certes, d’une part l’habitude, d’autre part le fait d’avoir réalisé des tutoriels et de faire des présentations de dt, est un facteur facilitant.
          Mais je ne suis pas opposé à une réflexion sur l’amélioration de l’interface.
          Puisque vous êtes développeur, il ne doit pas vous être compliqué de nous proposer une (des) maquette(s) d’interface simplifiée.
          Cela permettrait une discussion/réflexion sur le sujet à partir d’élément(s) concrets.

          1. Je n’ai pas voulu intervenir sur le sujet. Pour ce qui concerne l’interface, il y a le panneau d’accès rapide qui permet à tout un chacun de le construire à sa convenance ainsi que les préréglages des onglets qui permet de construire plusieurs interfaces plus ou moins étoffées. AMHA

  2. Polémique récurrente et inutile. Le traitement des fichiers bruts peut s’effectuer avec des outils simples aux interfaces limitées. C’est un choix respectable, réalisé le plus souvent avec d’autres outils que DT, desquels on peut se soustraire aussi en travaillant, aussi, directement en JPEG. Pour entrer dans DT il est nécessaire, avec la pédagogie à disposition, de maîtriser au minimum les notions de base sur la façon nos appareils récupèrent l’information et sur ce qu’est une couleur. Ce travail effectué l’interface se simplifie même si il est utile de savoir élaguer un peu dans ce qui, suite aux évolutions, pourrait apparaître obsolète. Pour ma part, ni super photographe, ni super matheux et encore moins codeur, j’apprécie la finesse grandissante des réglages proposés à condition d’en comprendre le fond. Et dans ces conditions je repense à la blague des Guignols de l’Info sur le piano à une touche de la poupée de David Guetta. Pour jouer de la musique il faut apprendre un peu de solfège.

  3. Un grand merci pour ce module, que je trouve d’une efficacité redoutable !!!
    Je l’utilise de manière très basique en confirmité avec la documentation :
    – plusieurs instances associées aux différents presets à utiliser dans le bon ordre au niveau du pipe.
    – modification / correction dans chaque instance des différents paramètres en fonction de l’apparition d’artefacts éventuels conformément à la doc.

    Mon premier REX est qu’avec 3, 4 instances / presets, on obtient déjà un résultat remarquable.
    Pour l’instant je n’ai utilisé ce module que pour la netteté. L’effet obtenu est beaucoup plus agréable et naturel que par le biais des modules classiques qui ont tendance à beaucoup trop trancher les images …

    Ce module est très largement utilisable en l’état de manière basique, en jouant dans mon cas pour chaque instance/preset sur 4 paramètres qui sont : le Nb itérations, les rayons, la sensibilité des bords, les seuils des bords.
    Je laisse les paramètres plus techniques tels que pré-définis dans les presets, sachant que la plupart d’entre eux sont déclinés en plusieurs niveaux (léger, moyen, fort), l’usage permet de mieux en mieux les appréhender en oubliant les maths qu’il y a derrière.
    Ce module connaitra certainemement des évolutions cosmétiques (ordre et renommage de quelques curseurs, graphiques, … ?), mais bon sang quel travail et quel résultat !!! BRAVO

  4. D’abord merci pour la conception de ce module qui doit représenter un très gros travail de réflexion et de réalisation.
    Après avoir visualiser le tuto et ayant trouvé une traduction française officielle de la documentation, je m’attache depuis quelques avec la version testing de darktable (en attendant la nouvelle version stable) à faire quelques essais, avec la documentation en appui. Sans être expert, après quelques essais, je suis convaincu que ce module permet d’effectuer des corrections de façon très fine et très subtile des images.
    J’ai quelques interrogations concernant la compréhension du module. Concernant les concepts de bases, j’ai un doute sur ma compréhension du concept de vitesse. Pour prendre un exemple concret, si je lâche une goutte de colorant dans un volume de solvant, le colorant va diffuser dans le solvant avec une certaine vitesse (en centimètres par seconde par ex) en fonction de la viscosité, de la température, etc…. Dans notre cas, un détail (un groupe de pixels homogènes) clairs va être diffusé autour de lui en luminosité et en teinte, d’abord vers les pixels proches puis vers les pixels de plus en plus éloignés. La vitesse serait donc en nombre de pixels et par itération la distance entre le détail diffusé et les pixels les plus éloignés modifiés par la diffusion ?
    Merci de m’éclairer sur ce point.

    1. Dans notre contexte, la distance est effectivement le rayon (en px) de diffusion. Le temps est le nombre d’itérations. Mais la vitesse n’est pas directement une distance de propagation divisée par un temps car la diffusion est surfacique (ici). La vitesse est plutôt l’intensité de diffusion par itération, en clair : la force de l’effet de lissage des variations locales par itération. Plus la vitesse est grande, plus vite on force la valeur des pixels à converger rapidement vers la moyenne locale, et la localité de cette moyenne est évaluée à l’intérieur de chaque rayon de détails sur les échelles d’ondelettes. En mode diffusif et sans régularisation des bords, augmenter la vitesse ou augmenter le nombre d’itérations revient sensiblement au même, aux erreurs d’arrondis et de troncature de l’arithmétique flottante près.

      Dès qu’on active la régularisation, par contre, on s’éloigne de la physique sous-jacente (phénomène de diffusion pure) pour introduire un comportement particulier et non-physique au niveau des bords (ou des zones à haute variance), et pour le coup, l’équivalence vitesse rayon / itérations ne tient plus (en toute rigueur, car dans les faits, on n’est pas loin).

      Et bien sûr, en mode accentuation de la netteté, comme on est sur un problème de reconstruction itérative qui tient plus de l’apprentissage machine supervisé (on fait une machine à détection de gradients) risque d’osciller et de sur-compenser, des vitesses élevées vont endommager les bords, et là encore, vitesse rayon / itérations.

      Bref, la notion de vitesse n’est pas tellement liée à un nombre de pixels / itération

      1. Merci pour la réponse. Si j’ai bien compris, en faisant abstraction de la gestion des bords, la vitesse de diffusion est liée à la façon plus ou moins rapide (intense) dont une zone de l’image va être modifiée par la diffusion d’un détail voisin, et cela dans une échelle d’ondelettes (de fréquences spatiales) donnée.
        Je suppose que le résultat de la diffusion dépend de cette rapidité (vitesse donc) du nombre d’itérations (temps) mais aussi de l’éloignement de la zone par rapport au détail diffusé.
        J’aurais une autre question concernant la notion de fréquences des ondelettes, qui, selon ma compréhension, permet de choisir une finesse des détails pris en compte dans le phénomène de la diffusion (pour visualiser la fréquence des ondelettes, j’imagine une tôle ondulée ou une ondulation sur la surface d’un liquide avec une ondulation + ou – large ). Je me demandais comment dans les calculs à quoi correspondent la plage de fréquences basses (par ex: taille du détail d’au moins x pixels) et celle des fréquences élevées (taille du détail d’au plus x pixels) et comment est choisi le seuil séparant ces deux plages (peut être en rapport avec le rayon central et l’étendue de rayon ) ?
        Merci de m’éclairer.

        1. Je pense que le raisonnement autour de l’éloignement des détails est une mauvaise façon de voir les choses et que ça ne fait qu’entretenir la confusion.

          L’ondelette choisie est une ondelette par spline cardinale, qui approxime une gaussienne mais à coefficients finis (FIR). Chaque niveau d’ondelettes sépare l’image en hautes et basses fréquences comme suit :

          BF = flou gaussien(image)
          HF = image – BF.

          Noter que HF est en fait un masque flou, qui revient à ce qui se passe dans le module filtre passe-haut ou dans le module netteté, sauf que ces deux modules ne travaillent que sur un seul rayon, et en Lab.

          À chaque niveau d’ondelette, on double le rayon du flou par rapport au niveau précédent, et le premier niveau applique un flou de rayon 1 px. Par un développement mathématique que j’ai détaillé sur mon blog (eng.aurelienpierre.com), on peut montrer que le calque HF est en fait égal à un laplacien (isotrope) à un coefficient près, c’est à dire modélise la variation locale dans l’image autour de la “moyenne” locale, contenue dans le calque BF. C’est la raison pour laquelle si l’on ré-applique un laplacien (isotrope ou pas) par dessus ce calque HF, on passe à l’ordre 4 (bilaplacien). Et je pense que ce qui rend le résultat si réaliste, c’est qu’on ne lisse pas l’image (ordre 0), ni même les gradients (ordre 1), mais bien les oscillations autour d’une moyenne qui, elle-même, contient les gradients.

          1. Merci pour la réponse.
            J’ai l’impression que ça devient un petit peu plus clair pour moi, au moins sur les principes et sur ce que je fais en jouant sur les curseurs (pour les calculs, c’est joker !).

            Donc (à ce que j’ai compris) à partir de l’image de départ et pour chaque échelle d’ondelettes on calcule une image BF obtenue par floutage adapté à chaque échelle d’ondelettes et une image HF correspondante obtenue mathématiquement et qui correspond à la différence entre l’image de départ et l’image BF.

            Les réglages se font par choix de la vitesse (force) du floutage (ou du défloutage) et par choix de l’orientation de ce floutage (isotrope, isophote ou perpendiculaire au gradiant) pour le calcul des deux types d’images BF et HF.
            Les réglages du 1ier ordre portent sur les images BF avec prise en compte du gradiant dans les images BF correspondantes.
            Les réglages du 4ième ordre portent sur les images HF avec le gradiant dans les images HF.
            Les réglages du 2nd ordre portent sur les images BF mais avec le gradiant dans les images HF
            Pour la 3ième ordre, c’est l’inverse. Ce panachage permet une meilleure gestion du bruit.
            L’image finale résultante est recomposée mathématiquement à partir des images BF et HF obtenues après réglages (4 images par échelle d’ondelettes).

            Wahou !

  5. Aller, je me lance … Si tu regardes dans le module, la vitesse est défnie en pourcentage. On peut imaginer que c’est le pourcentage d’une distance parcourue en un temps donnée (qui correspond à une itération).
    La distance en question est certainement liée aux paramètres de rayon central et de rayon étendu (qui sont bien définis en pixels) et qui sont les points d’entrée de la logique des ondelettes mise en oeuvre dans ce module. L’image est ainsi certainement décomposée en couches de hautes et basses fréquences correspondant aux échelles de détail des ondelettes (s’appuyant sur les rayons). Le module applique à chacune de ces couches un traitement distinct en fonction des paramètres définis par l’utilisateur (avec des vitesse différentes en module et direction) pour les hautes ou basses fréquences puis il recompose l’image en fusionnant les couches ainsi traitées.
    Concernant ta définition de la vitesse dans ce module, je pense que tu es dans le vrai et qu’elle définit une distance de traitement (% de nombre de pixels= un nombre de pixels) pour une itération et donc comme le dit la documentation que ces deux paramètres sont liés et peuvent provoquer des artefacts. Par exemple, dans le cas d’une diffusion isotrope (dans toutes les directions) si la somme des deux vitesses de diffusion définies pour une couche est supérieure à 100%, on dépassera la distance qui définit la couverture spatiale que l’on souhaite pour la diffusion, en une seule itération, … d’ou des débordements disgracieux !
    J’espère avoir éclairé ta lanterne et surtout ne pas être complètement à coté de la plaque … 😉
    Seul Aurélien pourra le dire si il passe par là, mais je pense qu’il a mieux à faire en ce moment … Et encore merci à lui pour ce travail.

      1. Alors fallait pas l’annoncer 🙂 N’empêche, je l’utilise sur mes N&B, ça me donne un velouté incomparable, mais je trouve que ça manque un peu de finesse en l’état, voilà pourquoi j’attendais beaucoup de ce nouveau module. Pas grave, je continuerai à affiner avec des masques.

        1. Je ne comprends pas de quoi tu parles. Diffusion/netteté a un pré-réglage effet Orton qui étale la couleur en RGB linéaire, ce qui donne un résultat bien meilleur que le module effet Orton, qui travaille en Lab.

          1. Désolée, je n’ai pas vu ce préréglage dans la vidéo. C’est justement ce que je cherchais. Donc merci d’avoir quand même prévu ce bidule qui donne d’horribles résultats… Blague à part, le meilleur des meilleurs c’est ton filmic, pour lequel je ne te remercie pas puisqu’il m’a obligée à reprendre complètement le traitement de plein de photos.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.