频域变换

2021-02-02 14:28:19 浏览数 (1)

频域图像处理基本步骤

傅里叶级数

离散余弦变换

例子

代码语言:javascript复制
import cv2
import numpy as np
import matplotlib.pyplot as plt

img=cv2.imread("lena.jpg",0)
#傅里叶变换
dft=cv2.dft(np.float32(img),flags=cv2.DFT_COMPLEX_OUTPUT)
result1=20*np.log(cv2.magnitude(dft[:,:,0],dft[:,:,1]))
dftShift=np.fft.fftshift(dft)
result=20*np.log(cv2.magnitude(dftShift[:,:,0],dftShift[:,:,1]))
#逆变换
ishift=np.fft.fftshift(dftShift)
iimg=cv2.idft(ishift)
iimg=cv2.magnitude(iimg[:,:,0],iimg[:,:,1])

plt.subplot(141)
plt.imshow(img,cmap='gray')
plt.title('original')
plt.axis('off')

plt.subplot(142)
plt.imshow(result1,cmap='gray')
plt.title('dft')
plt.axis('off')

plt.subplot(143)
plt.imshow(result,cmap='gray')
plt.title('dft-shift')
plt.axis('off')

plt.subplot(144)
plt.imshow(iimg,cmap='gray')
plt.title('ifft')
plt.axis('off')

plt.show()

2.

代码语言:javascript复制
import cv2
import numpy as np
import matplotlib.pyplot as plt

img=cv2.imread("lena.jpg",0)
f=np.fft.fft2(img)
fshift=np.fft.fftshift(f)

s1=np.log(np.abs(fshift))
plt.subplot(221),plt.imshow(img,'gray'),plt.title('1')
plt.xticks([]),plt.yticks([])

f1shift=np.fft.ifftshift(np.abs(fshift))
img_back=np.fft.ifft2(f1shift)

img_back=np.abs(img_back)
img_back=(img_back-np.amin(img_back))/(np.amax(img_back)-np.amin(img_back))
plt.subplot(222),plt.imshow(img_back,'gray'),plt.title('2')
plt.xticks([]),plt.yticks([])
f2shift=np.fft.ifftshift(np.angle(fshift))
img_back=np.fft.ifft2(f2shift)

img_back=np.abs(img_back)

img_back=(img_back-np.amin(img_back))/(np.amax(img_back)-np.amin(img_back))
plt.subplot(223),plt.imshow(img_back,'gray'),plt.title('3')
plt.xticks([]),plt.yticks([])
s1=np.log(np.abs(fshift))
plt.subplot(224),plt.imshow(img,'gray'),plt.title('4')
plt.xticks([]),plt.yticks([])



plt.show()


后续

如果想了解更多物联网、智能家居项目知识,可以关注我的项目实战专栏。 喜欢就点一点在看

0 人点赞