Eine Reihe von Studien zur grundlegenden Bildverarbeitung von Grund auf neu (5).
Weitere Informationen finden Sie im OpenCV-Python-Tutorial Bilderkennungsbuch https://www.amazon.co.jp/dp/4061529129/ Es ist eine Politik, das Verständnis für die Verarbeitung zu fördern, in der gearbeitet wird.
Python 3.7.0 OpenCV 4.1.0 Jupyter Notebook
Wenden Sie 2D Discrete Fourier Transform (DFT) auf Graustufenskelettbilder an. Der weiße Bereich ist in der Mitte konzentriert und enthält viele Niederfrequenzkomponenten.
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
#Lesen Sie mit Graustufen
img = cv2.imread('/brabra/1.jpg',0)
#Fourier-Transformation
f = np.fft.fft2(img)
#Ändern Sie die Bildmitte auf den Ursprung
fshift = np.fft.fftshift(f)
#Da das Fourier-Konvertierungsergebnis eine komplexe Zahl ist, wird es auf einen absoluten Wert gesetzt und in ein Protokoll umgewandelt.
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()
Ein Hochpassfilter (wobei nur Hochfrequenzkomponenten übrig blieben) wurde durchgeführt. Nach der Fourier-Transformation werden die Komponenten in der Nähe des Ursprungs in einem rechteckigen Fenster gefiltert und zum Bild zurückgeführt.
highpass.py
rows, cols = img.shape
#Bildmitte
crow,ccol = int(rows/2) , int(cols/2)
#Breite in der Nähe des zu filternden Ursprungs
reg = 50
#Filter aus Fourier-Transformationsbild
fshift[crow-reg:crow+reg, ccol-reg:ccol+reg] = 0
#Rückkehr zum Bild durch inverse Fourier-Transformation
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()
Es stellte sich heraus, dass der Rand des Skeletts erhalten blieb.
Ein Tiefpassfilter (wobei nur Niederfrequenzkomponenten übrig blieben) wurde durchgeführt. Nach der Fourier-Konvertierung wird sie so verarbeitet, dass nur die Nähe des Ursprungs verbleibt, und zum Bild zurückgeführt.
lowpass.py
#Fourier-Transformation mit opencv
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
#Ursprungsverschiebung
dft_shift = np.fft.fftshift(dft)
#Absolutwert,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)
#Breite in der Nähe des Ursprungs zu verlassen
fil2 = 20
#Maskenherstellung
mask = np.zeros((rows,cols,2),np.uint8)
mask[crow-fil2:crow+fil2, ccol-fil2:ccol+fil2] = 1
#Tragen Sie eine Maske auf den Fourier-transformierten Elefanten auf
fshift = dft_shift*mask
#Rückkehr zum Bild durch inverse Fourier-Transformation
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()
Diesmal sind die Kanten dünner geworden. Was wie eine Welle in Randnähe aussieht, ist der Klingeleffekt, der beim Filtern mit einem rechteckigen Fenster auftritt.
Wir haben Fourier-Transformationen an Bildern, Hochpassfiltern und Tiefpassfiltern durchgeführt, um unser Verständnis zu vertiefen.
--Bilderkennung (maschinelles Lernen professionelle Serie) https://www.amazon.co.jp/dp/4061529129/
Recommended Posts