勇敢的少年啊 快去创造奇迹~|

Ryuta

园龄:2年9个月粉丝:1关注:1

离散傅里叶变换实现

离散傅里叶变换实现

import numpy as np
import matplotlib.pyplot as plt
import cv2
f = [[4,6],[2,9]]
F = np.complex64(f)
def dft(img,N):
W = np.zeros((N,N),dtype=np.complex64)
for x in range(N):
for y in range(N):
W[x][y] = ((np.cos(2*np.pi/N))-(np.sin(2*np.pi/N)*1j))**(x*y) #计算excp(-2πjxy/N) = (cos(2π/N)-jsin(2π/N))^(xy)
return W@img@W
F = dft(F,2)
i = F.imag
r = F.real
print(F)
F = np.abs(F) #求模即频谱
plt.subplot(121)
plt.title("spatial")
plt.imshow(f,"gray")
plt.subplot(122)
plt.title("frequency")
plt.imshow(F,cmap="gray")
plt.show()
[[21.+0.0000000e+00j -9.-1.8369703e-15j]
[-1.-1.3471115e-15j 5.+1.2246468e-15j]]

与opencv中的dft对比

在上一文中使用dft后并未进行取模操作,所以最终结果并不是频域,仅仅是取了结果的实部,现已纠正

f = [[4,6],[2,9]]
f = np.float64(f)
F = cv2.dft(f,flags=cv2.DFT_COMPLEX_OUTPUT)
fr = np.zeros((2,2),np.complex64)
for i in range(2):
for k in range(2):
for l in range(2):
fr[i][k] = F[i][k][0] + F[i][k][1]*1j
fr = np.abs(fr)
plt.subplot(121)
plt.title("spatial")
plt.imshow(f,"gray")
plt.subplot(122)
plt.title("frequency")
plt.imshow(fr,cmap="gray")
plt.show()

本文作者:Ryuta

本文链接:https://www.cnblogs.com/ryuta/p/16724611.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Ryuta  阅读(42)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起