dft = cv2.dft(np.float32(image), flags=cv2.DFT_COMPLEX_OUTPUT)
时间: 2024-02-29 22:57:15 浏览: 106
1);
hold on;
plot(rx2);
title(['Comparison of Pulse Shaping Filters, Rolloff Factor = ', num2str(rolloff)]);
xlabel('Samples');
ylabel('Amplitude');
legend('Root Raised Cosine', 'Square Root Raised Cosine');
subplot(2,这是用OpenCV库中的dft函数对输入的图像进行离散傅里叶变换的代码,其中np1,2);
pwelch(rx1, [], [], [], F_s, 'onesided');
hold on;
pwelch(rx2,.float32将图像数据类型转换为32位浮点型,flags=cv2.DFT_COMPLEX_OUTPUT表示输出结果为复数形式。傅里叶变换是将信号或图像从时域(空域)变换到频域的一 [], [], [], F_s, 'onesided');
title(['Comparison of Power Spectral Density, Rolloff Factor = ', num2str(种数学变换,可以用于图像处理、信号处理等领域。
相关问题
python编写一段程序,读入图像 Fig0464(a)(car_75DPI Moire).tif,进行如下频域滤波。 (1)观察并显示该图像的幅度谱 (2)保存幅度谱,使用软件记录幅度谱中 “类沖激”的坐标位置为x=54.1 y=43.9,x=54.1 y=84.4,x=56.7 y=164.2,x=56.7 y=205.6,x=110.9 y=40.1,x=110.9 y=81.0,x=113.0 y=161.2,x=113.0 y=202.6,使用 notchfunc函数 构造陷波滤波器 (3)陷波滤波器和幅度谱相乘,用plt.imshow显示结果,进行傅立叶反变换用plt.imshow显示结果
以下是Python程序的代码实现:
```python
import numpy as np
import cv2
from matplotlib import pyplot as plt
def notchfunc(d0, coords, shape):
P, Q = shape
mask = np.ones((P,Q))
for coord in coords:
u, v = coord
du = np.array([np.arange(P)]).T
dv = np.array([np.arange(Q)])
dist = np.sqrt((du - u)**2 + (dv - v)**2)
mask = mask * (1 / (1 + ((d0 * d0) / ((dist * dist) - (d0 * d0)))))
return mask
img = cv2.imread('Fig0464(a)(car_75DPI Moire).tif', cv2.IMREAD_GRAYSCALE)
## 1. Observing and displaying the amplitude spectrum of the image
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
mag_spectrum = 20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))
plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(mag_spectrum, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()
## 2. Saving the amplitude spectrum and noting the coordinates of impulse-like points
np.save('mag_spectrum.npy', mag_spectrum)
impulse_coords = [(54.1, 43.9), (54.1, 84.4), (56.7, 164.2), (56.7, 205.6), \
(110.9, 40.1), (110.9, 81.0), (113.0, 161.2), (113.0, 202.6)]
## 3. Constructing a notch filter using the notchfunc and multiply it with the magnitude spectrum
notch_d0 = 10
mask = notchfunc(notch_d0, impulse_coords, mag_spectrum.shape)
filtered_spectrum = mag_spectrum * mask
plt.subplot(121),plt.imshow(mask, cmap = 'gray')
plt.title('Notch filter'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(filtered_spectrum, cmap = 'gray')
plt.title('Filtered Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()
## 4. Inverse Fourier transforming and showing the filtered image
filt_dft_shift = dft_shift * mask
filt_dft_shift = np.fft.ifftshift(filt_dft_shift)
filt_idft = cv2.idft(filt_dft_shift)
filtered_img = cv2.magnitude(filt_idft[:,:,0],filt_idft[:,:,1])
plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(filtered_img, cmap = 'gray')
plt.title('Filtered Image'), plt.xticks([]), plt.yticks([])
plt.show()
```
关于使用 `notchfunc` 函数构造陷波滤波器的详细解释可以参考以下链接:
https://www.csdn.net/gather_2e/MtjaAgz0NTc1NTItYmxvZwO0O0OO0O0O.html
关于 `np.save` 和 `np.load` 函数的具体用法可以参考以下链接:
https://numpy.org/doc/stable/reference/generated/numpy.save.html
https://numpy.org/doc/stable/reference/generated/numpy.load.html
fftwf_plan_dft_2d
`fftwf_plan_dft_2d` 是FFTW库中的一个函数,用于创建二维离散傅里叶变换(DFT)的执行计划。FFTW是一个专门进行快速傅里叶变换(FFT)计算的库,它提供了高度优化的算法来计算一维、二维或多维的FFT。`fftwf` 是FFTW库中针对单精度浮点数(float)数据类型的一个版本,而双精度浮点数(double)版本则是 `fftw_plan_dft_2d`。
`fftwf_plan_dft_2d` 函数会根据输入参数创建一个FFT变换的计划(plan),这个计划包含了执行FFT所需的全部信息。创建计划之后,可以通过这个计划来执行实际的FFT变换,这样可以提高变换的效率,因为计划会根据底层硬件和算法特性进行优化。
该函数的基本用法如下:
```c
fftwf_plan fftwf_plan_dft_2d(int n0, int n1,
fftwf_complex *in, fftwf_complex *out,
int sign, unsigned flags);
```
参数解释:
- `n0` 和 `n1`:输入和输出数组的尺寸,分别对应于二维数组的两个维度。
- `in`:指向输入数组的指针,这是一个复数数组。
- `out`:指向输出数组的指针,用于存放变换结果,也是一个复数数组。
- `sign`:表示变换的方向,`FFTW_FORWARD` 代表正变换(DFT),`FFTW_BACKWARD` 代表逆变换(IDFT)。
- `flags`:指定创建计划时使用的标志位,影响优化和内存使用等方面。
在实际使用中,你需要首先包含FFTW的头文件,并且确保链接了FFTW库。创建计划后,应当在不再需要时使用 `fftwf_destroy_plan` 函数销毁该计划,以释放相关资源。
阅读全文