Comment ça marche
Plus de détails sur le problème et sur la manière dont l'outil répare votre image.
Comprendre la source du problème
Commençons par une situation où tout va bien. Et pour chaque point de « source lumineuse », la mise au point par la lentille se fait en un seul point du capteur de l'appareil photo. L'image ci-dessous présente une telle situation. Sur le côté droit de l'image se trouve un écran noir avec un seul point lumineux net.
Prise de vue en cas de « mise au point nette »
Voyons maintenant ce qui se passe en cas de défaut de mise au point. Dans ce cas, la lentille de l'appareil est dans la mauvaise position et la lumière entrante, au lieu d'un seul point, est étalée autour du point principal. Sur le côté droit de l'image se trouve un écran noir avec un point lumineux diffus. Au lieu d'un seul point, nous avons la même quantité de lumière étalée tout autour.
Prise de vue en cas de « flou de mise au point »
Un problème similaire survient lorsqu'une image est déformée par le mouvement - mouvement d'objets ou de l'appareil photo lors de la prise de vue. Au lieu d'un seul point focal, nous obtenons une ligne de lumière.
Aperçu du processus de déconvolution
Ce qui est bien, c'est qu'il existe des méthodes capables de reproduire une image « nette » à partir d'une version floue. L'une de ces méthodes est la déconvolution de Richardson-Lucy. C'est un algorithme itératif qui utilise une Fonction d'Étalement du Point (PSF) pour restaurer la version originale d'une image. Qu'est-ce que la PSF ? Cette fonction indique comment chaque pixel est déformé. Si vous regardez le point précédent, ce serait l'« image sur fond noir » des illustrations ci-dessus.
La déconvolution est le processus dans une boucle de rétroaction qui « devine » l'image originale, puis affine cette supposition au cours de plusieurs étapes :
- 1. Estimation initiale : On commence par une estimation approximative de l'image originale (souvent l'image floue elle-même ou un champ gris plat).
- 2. Projection avant : On prend l'estimation actuelle et on la « refloute » en utilisant la PSF connue. Cela simule ce à quoi l'image devrait ressembler si l'estimation actuelle était correcte.
- 3. Comparaison : On compare cette version refloutée à l'image observée (floue) réelle en divisant l'une par l'autre. Cela crée un « facteur de correction » pour chaque pixel.
- 4. Projection arrière : On applique ce facteur de correction à l'estimation actuelle. Cela signifie essentiellement : « Dans les zones où l'image refloutée était trop sombre par rapport à la vraie, augmentez la luminosité de l'estimation ; là où elle était trop claire, diminuez-la. »
- 5. Répétition : Utilisez cette estimation mise à jour comme point de départ pour le tour suivant. Chaque itération rend généralement l'image plus nette et restaure plus de détails.
En savoir plus
Estimation de la taille du flou pour le point de départ
Une étape assez importante est l'estimation initiale de la fonction PSF. De bonnes estimations accélèrent tout le processus. Comment est-ce fait ici ? Eh bien, j'ai utilisé la même méthode que celle utilisée pour « détecter » si une image est floue ou manque de netteté : calculer l'écart-type de la transformation laplacienne d'une image.
Dans un premier temps, une transformation discrète de Laplace est effectuée. Cela génère une image en « noir et blanc » marquant tous les bords. Si l'image est nette, il y a de nombreux bords entre les zones sans bords. Dans le cas d'images floues, il n'y a presque pas de bords nets - plutôt une transition douce d'une couleur à une autre.
Ensuite, les pixels de l'image en « noir et blanc » sont traités comme un ensemble de pixels et l'écart-type est calculé. Cela donne un nombre indiquant l'uniformité de l'image. Si la valeur est élevée, cela signifie que l'image présente de nombreux changements nets. Si elle est basse, l'image est assez uniforme et plutôt « floue ». La même méthode est utilisée par de nombreux logiciels détectant si l'image est nette ou floue.
La dernière étape est la génération d'une fonction PSF correspondant à la valeur de l'écart-type. Cela a été un peu délicat et a nécessité quelques expérimentations. Enfin, il apparaît que pour des valeurs spécifiques d'écart-type, des fonctions PSF appropriées sont assignées. Une note importante : les fonctions PSF générées ont une forme gaussienne — un point unique avec une luminosité maximale s'estompant lentement vers le noir. Une PSF ainsi préparée constitue un bon point de départ pour l'algorithme.
En savoir plus
Quelques notes techniques
- Utilisation du GPU - de nombreux calculs d'image sont assez coûteux, mais ils utilisent des opérations similaires pour de nombreux pixels. Cela peut être facilement accéléré en utilisant le processeur graphique (GPU) de l'appareil. On y accède via la technologie WebGL intégrée au navigateur, et c'est fait automatiquement par la bibliothèque gpu.js.
- La lecture et l'enregistrement de l'image sont effectués automatiquement par l'API JS Canvas.
- Remarque : Une fois l'application chargée, elle peut fonctionner hors ligne. Ainsi, lorsque vous chargez la page principale avec la zone de dépôt d'image, vous pouvez l'utiliser même si vous n'avez pas de connexion internet. Essayez de traiter des images en mode hors ligne ;) . La page/application entière n'est pas encore totalement hors ligne, mais j'ai prévu de le faire.