Traitement d'image à partir de zéro avec python (5) Transformation de Fourier

Une série d'étude du traitement d'image de base à partir de zéro (5).

Reportez-vous au tutoriel OpenCV-Python Livre de reconnaissance d'image https://www.amazon.co.jp/dp/4061529129/ Il s'agit d'une politique visant à promouvoir la compréhension du traitement qui est effectué dans.

table des matières

  1. Environnement
  2. Transformée de Fourier
  3. Filtre passe-haut
  4. Filtre passe-bas

environnement

Python 3.7.0 OpenCV 4.1.0 Jupyter Notebook

Transformée de Fourier

Appliquez une transformation de Fourier discrète 2D (DFT) aux images squelettes en échelle de gris. La zone blanche est concentrée au centre et contient de nombreux composants basse fréquence.

fourier.py



import cv2
import numpy as np
from matplotlib import pyplot as plt
from pylab import rcParams
%matplotlib inline
rcParams['figure.figsize'] = 25, 20

#Lire avec des niveaux de gris
img = cv2.imread('/brabra/1.jpg',0)

#Transformée de Fourier
f = np.fft.fft2(img)
#Changer le centre de l'image à l'origine
fshift = np.fft.fftshift(f)
#Le résultat de la conversion de Fourier étant un nombre complexe, il est défini sur une valeur absolue et transformé en journal.
magnitude_spectrum = 20*np.log(np.abs(fshift))

plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(magnitude_spectrum, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()
fourier.PNG

Filtre passe-haut

Un filtre passe-haut (ne laissant que les composants haute fréquence) a été réalisé. Après la transformation de Fourier, les composants proches de l'origine sont filtrés dans une fenêtre rectangulaire et renvoyés à l'image.

highpass.py



rows, cols = img.shape
#Centre de l'image
crow,ccol = int(rows/2) , int(cols/2)
#Largeur près de l'origine à filtrer
reg = 50

#Filtre à partir de l'image de la transformée de Fourier
fshift[crow-reg:crow+reg, ccol-reg:ccol+reg] = 0
#Retour à l'image par transformation de Fourier inverse
f_ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(f_ishift)
img_back = np.abs(img_back)

plt.subplot(131),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(132),plt.imshow(img_back, cmap = 'gray')
plt.title('Image after HPF'), plt.xticks([]), plt.yticks([])
plt.subplot(133),plt.imshow(img_back)
plt.title('Result in JET'), plt.xticks([]), plt.yticks([])

plt.show()

ダウンロード.png

Il s'est avéré que le bord du squelette était resté.

Filtre passe bas

Un filtre passe-bas (ne laissant que les composants basse fréquence) a été réalisé. Après la conversion de Fourier, il est traité de manière à ne laisser que le voisinage de l'origine et renvoyé à l'image.

lowpass.py



#Transformée de Fourier avec opencv
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
#Changement d'origine
dft_shift = np.fft.fftshift(dft)
#Valeur absolue,log
magnitude_spectrum = 20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))

rows, cols = img.shape
crow,ccol = int(rows/2) , int(cols/2)
#Largeur près de l'origine à laisser
fil2 = 20

#Fabrication de masques
mask = np.zeros((rows,cols,2),np.uint8)
mask[crow-fil2:crow+fil2, ccol-fil2:ccol+fil2] = 1

#Appliquer un masque sur l'éléphant transformé de Fourier
fshift = dft_shift*mask
#Retour à l'image par transformation de Fourier inverse
f_ishift = np.fft.ifftshift(fshift)
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1])

plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img_back, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()

low.png

Cette fois, les bords sont devenus plus minces. Ce qui ressemble à une vague près du bord est l'effet de sonnerie qui apparaît lorsque vous filtrez avec une fenêtre rectangulaire.

Résumé

Nous avons effectué des transformées de Fourier sur des images, des filtres passe-haut et des filtres passe-bas pour approfondir notre compréhension.

Les références

--Traitement d'image avec OpenCV (tutoriel OpenCV-Python) http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_table_of_contents_imgproc/py_table_of_contents_imgproc.html#py-table-of-content-imgproc

Recommended Posts

Traitement d'image à partir de zéro avec python (5) Transformation de Fourier
Traitement d'image à partir de zéro avec python (4) Extraction de contour
Traitement d'image avec Python
Traitement d'image avec Python (partie 2)
Traitement d'image avec Python (partie 1)
Traitement d'image avec Python (3)
[Python] Traitement d'image avec scicit-image
Traitement du signal en Python (1): transformée de Fourier
Traitement d'image avec la binarisation Python 100 knocks # 3
100 traitement d'image par Python Knock # 2 Échelle de gris
traitement d'image python
Traitement d'image par Python 100 knock # 10 filtre médian
100 traitement d'image avec Python Knock # 8 Max Pooling
Efficacité commerciale à partir de zéro avec Python
Traitement d'image avec Python et OpenCV [Tone Curve]
Traitement d'image par Python 100 knock # 12 motion filter
Acquisition d'images depuis une caméra avec Python + OpenCV
Dessin avec Matrix-Reinventor of Python Image Processing-
Traitez facilement des images en Python avec Pillow
Traitement d'image avec Python 100 knocks # 7 pooling moyen
Traitement d'image léger avec Python x OpenCV
Traitement d'image par Python 100 knock # 9 Filtre Gaussien
Traitement d'image avec MyHDL
Premier traitement d'image Python
Traitement d'image avec la configuration de l'environnement Python pour Windows
Traitement d'image avec PIL
Comment récupérer des données d'image de Flickr avec Python
Lire le code QR à partir du fichier image avec Python (Mac)
Traitement d'image avec PIL (Pillow)
"Traitement Apple" avec OpenCV3 + Python3
Édition d'image avec python OpenCV
Traitement du signal acoustique avec Python (2)
Traitement du signal acoustique avec Python
Tri des fichiers image avec Python (2)
Tri des fichiers image avec Python (3)
Tweet avec image en Python
Tri des fichiers image avec Python
Traitement d'image par python (Pillow)
Collection de traitement d'image en Python
Avec skype, notifiez avec skype de python!
[Jouons avec Python] Traitement d'image en monochrome et points
Découpez une image avec python
Principes de base du traitement d'image en temps réel avec opencv
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
[Python] Traitement parallèle facile avec Joblib
Utilisation de Rstan de Python avec PypeR
100 traitements de langage avec Python
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
Installez Python à partir des sources avec Ansible
100 traitements de langage avec Python (chapitre 3)
Notes personnelles pour le traitement d'images python
Exécutez Aprili depuis Python sur Orange
Faisons du scraping d'images avec Python
Appelez python de nim avec Nimpy
Trouver la similitude d'image avec Python + OpenCV
Traitement d'image | prédire les espèces à partir d'images
Charger fbx depuis python avec cinema4d
Envoyer l'image avec python et enregistrer avec php
Génération d'images dégradées avec Python [1] | np.linspace
Essayez d'extraire une chaîne de caractères d'une image avec Python3