Récupérez des images floues et défocalisées à l'aide du filtre Wiener. Implémentation en C ++ OpenCV

Dans la suite de l'article sur la restauration d'images défocalisées et floues, je souhaite partager mes résultats de restauration d'images réelles à l'aide du filtre Wiener. OpenCV 3.4 a été utilisé comme bibliothèque de traitement d'image. L'appareil photo est un Nikon D320, un objectif Nikon DX AF-S NIKKOR 18-105 mm, la mise au point a été effectuée manuellement, la prise de vue a été effectuée sans trépied.


Résultats de récupération d'image défocalisée


Pendant la défocalisation, le système de distorsion est bien approximé par la fonction de diffusion ponctuelle cylindrique (PSF) de rayon r.


o_psf
PSF cylindrique


Voici les résultats de la restauration de trois vraies images défocalisées du même objet (page de livre). La prise de vue a été effectuée sans trépied à une distance d'environ 50 cm Le degré de défocalisation de l'objectif a augmenté manuellement d'une image à l'autre. Les paramètres du filtre de Wiener r et le rapport signal / bruit (SNR) ont été sélectionnés manuellement de manière à assurer la meilleure qualité visuelle de la restauration. Pour compenser les effets de bord, une diminution progressive de la luminosité de l'image sur les bords est effectuée.


o1f
Image A


o1r_gamma-var_640
Résultat de récupération d'image A. r = 53, SNR = 5200


o2f
Image B


o2r_gamma-var_640
Résultat de la restauration d'image B. r = 66, SNR = 4400


o3f
Image C


o3r_gamma-var_640
Résultat de récupération d'image C. r = 102, SNR = 7100


On peut voir que même avec une défocalisation importante, la lisibilité du texte est pratiquement
entièrement restauré.


Les résultats de la restauration d'images floues des plaques d'immatriculation


Le flou de l'image se produit lorsque l'appareil photo et le sujet se déplacent l'un par rapport à l'autre pendant l'exposition. Ne considérez que le cas où le sujet se déplace linéairement par rapport à la caméra fixe. Dans ce cas, le système de distorsion est bien approximé par le PSF sous la forme d'un segment qui est dirigé le long du mouvement de l'objet. Un tel PSF est défini par deux paramètres: la longueur L et l'angle de lubrification THETA.


m_psf
PSF avec lubrification linéaire


Ci-dessous, une image déformée de deux voitures, obtenue avec une exposition insuffisamment courte, ce qui a conduit à l'apparition d'un flou notable.


m1
Image déformée de deux voitures


Vous trouverez ci-dessous les résultats de la restauration des nombres des deux voitures à l'aide du filtre Wiener. Les paramètres L, THETA et SNR ont été sélectionnés de manière à assurer la meilleure qualité visuelle de restauration du numéro de voiture.


m2
Résultat de la restauration d'un numéro de voiture lumineux. L = 78, THETA = 15, SNR = 300


m3
Résultat de la restauration d'un numéro de voiture sombre. L = 125, THETA = 0, SNR = 700


On peut voir que même avec une lubrification importante, il est possible de restaurer la lisibilité des nombres
voitures.


L'algorithme de filtrage est implémenté en C ++ OpenCV en tant qu'application console.
Les codes source peuvent être trouvés sur les liens ci-dessous.


https://github.com/VladKarpushin/out_of_focus_deblur/tree/full_color_version
https://github.com/VladKarpushin/motion_deblur
https://docs.opencv.org/4.0.0-alpha/de/d3c/tutorial_out_of_focus_deblur_filter.html
https://docs.opencv.org/4.0.0-alpha/d1/dfd/tutorial_motion_deblur_filter.html


Littérature


  1. RC Gonzalez, RE Woods. Fondamentaux de l'image numérique. 1987.
  2. I.S. Gruzman, V.S. Kirichuk, V.P. Kosykh, G.I. Peretyagin, A.A. Spector. Traitement d'image numérique dans les systèmes d'information. 2000.

Source: https://habr.com/ru/post/fr424987/


All Articles