700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 数字图像处理--傅里叶(逆)变换

数字图像处理--傅里叶(逆)变换

时间:2024-05-20 09:09:04

相关推荐

数字图像处理--傅里叶(逆)变换

数字图像处理–傅里叶(逆)变换

主要内容

(1)对一副图像进行缩放,显示原始图像和缩放后的图像,分别对其进行傅里叶变换,显示变换后结果;

(2)对一副图像进行旋转,显示原始图像和旋转后的图像,分别对其进行傅里叶变换,显示变换后结果;

源代码

import cv2import matplotlib.pyplot as pltimport numpy as npfrom PIL import Imageimport torchvision.transforms.functional as TFrose = cv2.imread('2.png', 0) # 转为灰度图rose_shrink = cv2.resize(rose,(int(rose.shape[0]/2),int(rose.shape[1]/2)))rose_rotate = Image.fromarray(np.uint8(rose))rose_rotate = TF.rotate(rose_rotate, 45)rose_rotate = np.asarray(rose_rotate)def FFT(img):dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)dftShift = np.fft.fftshift(dft)# 将图像中的低频部分移动到图像的中心result = 20 * np.log(cv2.magnitude(dftShift[:, :, 0], dftShift[:, :, 1])) # 将实部和虚部转换为实部,乘以20是为了使得结果更大ishift = np.fft.ifftshift(dftShift)# 低频部分从图像中心移开iImg = cv2.idft(ishift) # 傅里叶反变换iImg = cv2.magnitude(iImg[:, :, 0], iImg[:, :, 1])# 转化为空间域return result,iImg#自定义傅里叶变换函数def dft(img):H,W,channel=img.shape#定义频域图、复数矩阵F = np.zeros((H, W,channel), dtype=plex)#准备与原始图像位置相对应的处理索引x = np.tile(np.arange(W), (H, 1))y = np.arange(H).repeat(W).reshape(H, -1)#遍历for c in range(channel):for u in range(H):for v in range(W):F[u, v, c] = np.sum(img[..., c] * np.exp(-2j * np.pi * (x * u / W + y * v / H))) / np.sqrt(H * W)fshift = np.fft.fftshift(F)#将复数转为浮点数进行傅里叶频谱图显示fimg = np.log(np.abs(fshift))return fimg,F#自定义傅里叶反变换def idft(G):H, W, channel = G.shape#定义空白时域图像out = np.zeros((H, W, channel), dtype=np.float32)# 准备与原始图像位置相对应的处理索引x = np.tile(np.arange(W), (H, 1))y = np.arange(H).repeat(W).reshape(H, -1)#遍历for c in range(channel):for u in range(H):for v in range(W):out[u, v, c] = np.abs(np.sum(G[..., c] * np.exp(2j * np.pi * (x * u / W + y * v / H)))) / np.sqrt(W * H)#剪裁out = np.clip(out, 0, 255)out = out.astype(np.uint8)return outimg=cv2.imread("4.png")img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#傅里叶变换rose_color_fft,rose_color_F=dft(img)#傅里叶逆变换rose_color_ifft=idft(rose_color_F)#原图rose_fft,rose_ifft = FFT(rose)#缩小图rose_shrink_fft,rose_shrink_ifft = FFT(rose_shrink)#旋转图rose_rotate_fft,rose_rotate_ifft = FFT(rose_rotate)plt.rcParams["font.sans-serif"]=["SimHei"]plt.rcParams["axes.unicode_minus"]=Falseplt.subplot(131), plt.imshow(rose, cmap='gray'),plt.title('原图'),plt.axis('off')plt.subplot(132), plt.imshow(rose_fft, cmap='gray'),plt.title('傅里叶变换'),plt.axis('off')plt.subplot(133), plt.imshow(rose_ifft, cmap='gray'),plt.title('傅里叶逆变换'),plt.axis('off') #关闭坐标轴plt.figure(2)plt.subplot(131), plt.imshow(rose_shrink, cmap='gray'),plt.title('原图'),plt.axis('off')plt.subplot(132), plt.imshow(rose_shrink_fft, cmap='gray'),plt.title('傅里叶变换'),plt.axis('off')plt.subplot(133), plt.imshow(rose_shrink_ifft, cmap='gray'),plt.title('傅里叶逆变换'),plt.axis('off') #关闭坐标轴plt.figure(3)plt.subplot(131), plt.imshow(rose_rotate, cmap='gray'),plt.title('原图'),plt.axis('off')plt.subplot(132), plt.imshow(rose_rotate_fft, cmap='gray'),plt.title('傅里叶变换'),plt.axis('off')plt.subplot(133), plt.imshow(rose_rotate_ifft, cmap='gray'),plt.title('傅里叶逆变换'),plt.axis('off')plt.figure(4)plt.subplot(131), plt.imshow(img), plt.title('原图'),plt.axis('off')plt.subplot(132), plt.imshow(rose_color_fft), plt.title('傅里叶变换'),plt.axis('off')plt.subplot(133), plt.imshow(rose_color_ifft), plt.title('傅里叶逆变换'),plt.axis('off')plt.show()

实现结果

本实验中,选择的原始图像尺寸为175,对该图像进行傅里叶变换和傅里叶逆变换。其经过傅里叶变换并进行中心化得到的谱,以及逆变换后得到的图像,如下图所示。

将图像长、宽均缩减二分之一后,得到的图像,以及经过傅里叶变换并进行中心化得到的谱,和逆变换后得到的图像,如下图所示。

将原图像进行旋转45°后,得到的图像,以及经过傅里叶变换并进行中心化得到的谱,和逆变换后得到的图像,如下图所示。

本实验中,自定义了傅里叶变换函数和傅里叶逆变换函数,实现了对彩色图像的傅里叶变换和逆变换。在此操作中考虑到变换操作所耗费的时间,故对原来(175)的彩色图像进行了缩减至(100*100)大小,并完成了本次操作。经过傅里叶变换得到频谱图以及傅里叶逆变换后得到的图像。如下图所示。

小白一枚!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。