温馨提示×

Python如何实现图像的频域分析和处理

小亿
82
2024-04-29 19:37:50
栏目: 编程语言

要实现图像的频域分析和处理,可以使用Python的OpenCV库和numpy库。以下是一个简单的示例代码,展示如何进行傅里叶变换,并进行频域滤波。

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 读取图像
img = cv2.imread('input.jpg',0)

# 进行傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
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()

# 频域滤波
rows, cols = img.shape
crow, ccol = rows//2 , cols//2
fshift[crow-30:crow+30, ccol-30:ccol+30] = 0
f_ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(f_ishift)
img_back = np.abs(img_back)

# 显示滤波后的图像
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('Image after HPF'), plt.xticks([]), plt.yticks([])
plt.show()

在这个示例中,首先读取了一张灰度图像,并对其进行傅里叶变换。然后将频谱图显示出来,接着进行高通滤波,并将滤波后的图像显示出来。您可以根据需要调整滤波器的大小和类型,以实现不同的频域处理效果。

0