Comment rendre une image plus nette avec OpenCV ?
Il existe de nombreuses façons de lisser ou de flouter, mais aucune que je puisse voir de netteté.
image-processing
opencv
AruniRC
la source
la source
Vous pouvez essayer un noyau simple et la fonction filter2D , par exemple en Python:
Wikipedia a un bon aperçu des noyaux avec quelques autres exemples ici - https://en.wikipedia.org/wiki/Kernel_(image_processing)
la source
Vous pouvez trouver un exemple de code sur la netteté de l'image à l'aide de l'algorithme «masque flou» dans la documentation OpenCV .
Modification des valeurs de
sigma
,threshold
,amount
donnera des résultats différents.la source
Vous pouvez affiner une image à l'aide d'un masque flou . Vous pouvez trouver plus d'informations sur le masquage flou ici . Et voici une implémentation Python utilisant OpenCV:
la source
amount
est simplement la quantité de netteté. Par exemple, une valeuramount
de 2,0 donne une image plus nette que la valeur par défaut de 1,0.threshold
est le seuil du masque à faible contraste. En d'autres termes, les pixels pour lesquels la différence entre les images d'entrée et les images floues est inférieure àthreshold
resteront inchangés.Une façon est de convoluer un noyau de filtre auto-créé avec l'image.
Il existe une autre méthode pour soustraire une version floue de l'image d'une version lumineuse de celle-ci. Cela permet de rendre l'image plus nette. Mais cela doit être fait avec prudence car nous ne faisons qu'augmenter les valeurs de pixels. Imaginez une valeur de pixel en niveaux de gris 190, qui, si elle est multipliée par un poids de 2, donne 380, mais est rognée à 255 en raison de la plage de pixels maximale autorisée. Il s'agit d'une perte d'information et conduit à une image délavée.
la source
Pour plus de clarté dans ce sujet, quelques points doivent vraiment être soulignés:
La netteté des images est un problème mal posé. En d'autres termes, le flou est une opération avec perte et il n'est généralement pas possible de revenir en arrière.
Pour affiner des images individuelles, vous devez en quelque sorte ajouter des contraintes (hypothèses) sur le type d'image que vous souhaitez et sur la façon dont elle est devenue floue. C'est le domaine des statistiques d'images naturelles. Les approches de l'affûtage conservent ces statistiques explicitement ou implicitement dans leurs algorithmes (l'apprentissage en profondeur étant les plus codés implicitement). L'approche courante consistant à augmenter la pondération de certains niveaux d'une décomposition de la pyramide DOG ou laplacienne , qui est la généralisation de la réponse de Brian Burns, suppose qu'un flou gaussien a corrompu l'image, et la façon dont la pondération est effectuée est liée aux hypothèses sur ce qui était dans l'image pour commencer.
D'autres sources d'informations peuvent rendre le problème de netteté bien posé. Ces sources d'informations courantes sont la vidéo d'un objet en mouvement ou le réglage à vues multiples. La netteté dans ce contexte est généralement appelée super-résolution (ce qui est un très mauvais nom pour cela, mais elle est restée dans les cercles académiques). Il existe depuis longtemps des méthodes de super-résolution dans OpenCV ... bien qu'elles ne fonctionnent généralement pas très bien pour les problèmes réels, je les ai vérifiées. Je m'attends à ce que le deep learning ait également produit de merveilleux résultats ici. Peut-être que quelqu'un publiera des remarques sur ce qui en vaut la peine.
la source
Pour affiner une image, nous pouvons utiliser le filtre (comme dans de nombreuses réponses précédentes)
Ce sera le plus lorsque le dénominateur est 1 et diminuera au fur et à mesure de l'augmentation (2,3 ..)
Le plus utilisé est lorsque le dénominateur est 3.
Voici la mise en œuvre.
la source
Essayez avec ceci:
Vous trouverez peut-être plus d'informations ici .
la source