中金超钒 网站建设,淮北百度seo,wordpress付费浏览,代理平台不再运营游戏傅里叶变换
dftcv.dft(img_float32,flagscv.DFT_COMPLEX_OUTPUT):
flags:标志位#xff0c;指定变换类型#xff0c;cv.DFT_COMPLEX_OUTPUT会返回复数结果。
傅立叶变换#xff0c;将输入的图像从空间域转换到频率域。
返回结果: 此函数返回一个复杂数值数组#xff0c…傅里叶变换
dftcv.dft(img_float32,flagscv.DFT_COMPLEX_OUTPUT):
flags:标志位指定变换类型cv.DFT_COMPLEX_OUTPUT会返回复数结果。
傅立叶变换将输入的图像从空间域转换到频率域。
返回结果: 此函数返回一个复杂数值数组即傅立叶变换的结果。
对于每个像素位置结果数组中包含两个值一个实部和一个虚部这两个值共同构成了一个复数。如果输入的图像是灰度图像那么结果就是一个二维复数数组。如果输入的是彩色图像那么结果就是三个二维复数数组对应于RGB三个通道。
dft_shiftnp.fft.fftshift(dft):
傅立叶变换的结果进行中心移位。在傅立叶变换中频率是按照从低到高的顺序排列的而在图像中我们通常更关注中心部分的频率因此需要将零频率分量直流分量移动到频谱的中央。此外这个函数也用于将频率域的坐标移动到以中心为原点的参考点。
magnitude_spectrum20*np.log(cv.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))
dft_shift[:,:,0] 和 dft_shift[:,:,1]这是两个来自前面傅立叶变换步骤的结果分别代表了傅立叶变换后的实部和虚部计算傅立叶变换结果的幅度谱。20*np.log() 对这个幅度进行对数转换并乘以20得到的结果就是振幅谱。
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img cv.imread(../Lena.png,0)
img_float32np.float32(img)
dftcv.dft(img_float32,flagscv.DFT_COMPLEX_OUTPUT)
dft_shiftnp.fft.fftshift(dft)magnitude_spectrum20*np.log(cv.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))plt.subplot(121)
plt.imshow(img,cmapgray)
plt.title(Input Image)
plt.xticks([]),plt.yticks([])
plt.subplot(122)
plt.imshow(magnitude_spectrum,cmapgray)
plt.title(Magnitude Spectrum)
plt.xticks([]),plt.yticks([])
plt.show() 低通滤波和高斯滤波
滤波
低通滤波器保留低频使图片模糊
高通滤波器保留高频是图片细节增强
低通滤波
import numpy as np
import cv2 as cv
import matplotlib.pyplot as pltimgcv.imread(../Lena.png,0)
img_floatnp.float32(img)dftcv.dft(img_float,flagscv.DFT_COMPLEX_OUTPUT)
dft_shiftnp.fft.fftshift(dft)rows,colsimg.shape
crow,ccolint(rows/2),int(cols/2) #中心位置#低通滤波
masknp.zeros((rows,cols,2),np.uint8)
mask[crow-30:crow30,ccol-30:ccol30]1#IDFT
fshiftdft_shift*mask
f_ishiftnp.fft.ifftshift(fshift)
img_backcv.idft(f_ishift)
img_backcv.magnitude(img_back[:,:,0],img_back[:,:,1])plt.subplot(121)
plt.imshow(img,cmapgray)
plt.title(Input Image)
plt.xticks([]),plt.yticks([])
plt.subplot(122)
plt.imshow(img_back,cmapgray)
plt.title(Result)
plt.xticks([]),plt.yticks([])
plt.show() 高通滤波
import numpy as np
import cv2 as cv
import matplotlib.pyplot as pltimgcv.imread(../Lena.png,0)
img_floatnp.float32(img)dftcv.dft(img_float,flagscv.DFT_COMPLEX_OUTPUT)
dft_shiftnp.fft.fftshift(dft)rows,colsimg.shape
crow,ccolint(rows/2),int(cols/2) #中心位置#高通滤波
masknp.ones((rows,cols,2),np.uint8)
mask[crow-30:crow30,ccol-30:ccol30]0#IDFT
fshiftdft_shift*mask
f_ishiftnp.fft.ifftshift(fshift)
img_backcv.idft(f_ishift)
img_backcv.magnitude(img_back[:,:,0],img_back[:,:,1])plt.subplot(121)
plt.imshow(img,cmapgray)
plt.title(Input Image)
plt.xticks([]),plt.yticks([])
plt.subplot(122)
plt.imshow(img_back,cmapgray)
plt.title(Result)
plt.xticks([]),plt.yticks([])
plt.show()