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

主要内容

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

源代码

import cv2
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import 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=np.complex)#准备与原始图像位置相对应的处理索引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()

实现结果

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

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

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

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

小白一枚!!!

数字图像处理--傅里叶(逆)变换相关推荐

  1. [数字图像处理]图像复原--逆滤波

    1.逆滤波的问题点       图像的老化,可以视为以下这样的一个过程.一个是退化函数的影响(致使图片模糊,褪色等),一个可加性噪声的影响. 用算式表示为      前几篇博文,主要是介绍可加性噪声的 ...

  2. 数字图像处理的数学变换(三)逻辑运算

    逻辑运算 1求反运算 2与运算 3或运算 4异或运算 5实验结果 逻辑运算又称布尔运算,逻辑常量只有两个,即0和1,用来表示两个对立的逻辑状态"假"和"真".逻 ...

  3. 数字图像处理:各种变换滤波和噪声的类型和用途总结

    摘自http://imgtec.eetrend.com/blog/4564 一.基本的灰度变换函数 1.1图像反转  适用场景:增强嵌入在一幅图像的暗区域中的白色或灰色细节,特别是当黑色的面积在尺寸上 ...

  4. 数字图像处理之雷登变换与图像重建(MATLAB)

    1.问题要求 画出下列图像的雷登变换正弦图,标出坐标和重要特性,假设使用平行射线束几何理论.然后重建图像,比较不同参数的选择对重建图像的影响. 2.实现步骤 (1)雷登变换 srcImage=imre ...

  5. 数字图像处理——图像代数变换

    图像代数变换 以下是两个图像的像素矩阵: f = [f11,f12,f13; f21,f22,f23; f31,f32,f33] g = [g11,g12,g13; g21,g22,g23; g31, ...

  6. 数字图像处理6 蝶形变换

    我看了这个感觉相当清晰 https://wenku.baidu.com/view/5cacb2b8bd64783e09122b9a.html 核心是可以由得到,利用这个性质. 中间处理W的部分看链接. ...

  7. 数字图像处理100问—33 傅立叶变换——低通滤波

    提示:内容整理自:https://github.com/gzr2017/ImageProcessing100Wen CV小白从0开始学数字图像处理 33 傅立叶变换--低通滤波 将imori.jpg灰 ...

  8. OPENCV计算机视觉图像处理频域傅里叶 DFT 变换低通滤波逆变换IDFT

    OpenCV计算机视觉图像频域傅里叶 DFT 变换低通滤波逆变换IDFT 实验室做图像的,经常用到这部分,为了检测屏幕,看过好多博客,试用过许多代码,这个算是我找到的比较好用的,也容易改. 傅里叶变换 ...

  9. 冈萨雷斯《数字图像处理》学习笔记(4)--图像复原与重建(含傅里叶切片定理推导)

    一.图像复原模型 若H是线性的,空间不变的过程,则退化图像在空间域通过下式给出: g(x,y)=h(x,y)∗f(x,y)+δ(x,y)g(x,y)=h(x,y)*f(x,y)+\delta(x,y) ...

最新文章

  1. 轻量级语义分割网络:ENet
  2. cocos2dx[3.4](26)——视差节点ParallaxNode
  3. 转:安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法
  4. ios 静态库冲突的解决办法
  5. Android Realm相关操作
  6. Kubernetes排错:用容器的元数据提供新思路
  7. 【Azure Show】|第九期 “我的计算机入门之路” 嘉宾秦婷婷汪宇杰文轩
  8. 实战:布隆过滤器安装与使用及原理分析
  9. jquery实现上下左右键盘监听_jQuery监听键盘事件及相关操作使用
  10. springcloud gateway ribbon使用_Github点赞接近 70k 的Spring Cloud学习教程+实战项目推荐!牛批!...
  11. linux服务器创建FTP
  12. mysql join 组合索引,图文详解MySQL中两表关联的连接表如何创建索引
  13. 地脚螺钉直径系列_机械系统通用件——螺栓、螺钉和螺柱国家标准
  14. 【连载】【FPGA黑金开发板】NIOS II那些事儿--SDRAM实验(十二)
  15. 如何从PDF文件中提取几页为一个PDF文件?
  16. CSC公派访问学者申请条件是什么?
  17. 平流式隔油池计算_隔油池设计方案计算.doc
  18. 【转】Mac下 如何配置虚拟机软件Parallel Desktop--超详细
  19. 什么是人工智能?人工智能如何系统的学习
  20. 智能车八邻域图像算法

热门文章

  1. HDU-ACM程序设计——BFS(宽度优先搜索)
  2. 安卓电子市场_五款安卓工具神器
  3. 全国计算机等级考试二级公共,全国计算机等级考试二级公共基础知识.
  4. 《Learn python3 the hard way》ex14 Prompting and Passing
  5. FANUC机器人动作指令的定位类型FINE和CNT详解
  6. android模拟器mac版本下载,MaxMac电脑版怎么下载 安卓模拟器电脑版下载地址
  7. 2021年华为总监知乎1867赞的Java面试题全集解析助我修行,不吃透感觉都对不起他(上)
  8. cdr存成html格式的文件格式,CDR必备!CDR保存与各种格式之间转换!-cdr文件用什么打开...
  9. 计算机运行库,VC2010运行库
  10. Go语言处理Windows系统的图标ICO文件(下)