图像的傅里叶变换

    图像的频域增强其实就是:先对图像进行变换,将图像转换到变换域,然后在变换域进行操作以实现图像增强。常用的变换域就是频域(频率域,傅里叶变换的结果)。图像的频域增强有直观的物理意义。例如,图像模糊是图像中高频分量不足的结果,在频域里增加高频分量或减少低频分量就能消除一些模糊。又如,图像有时会受到重复出现的有规律周期噪声的影响,周期噪声具有特定的频率,所以可以采取频域滤波的方法滤除相应噪声频率,从而消除周期噪声。

傅里叶变换(2D)及其性质

f(x,y)→F(u,v)f(x, y) \to F(u, v)f(x,y)→F(u,v)

F(u,v)=∑x=0M−1∑y=0N−1f(x,y)e−j2π(uxM+vyN)F(u, v) = \sum_{x=0}^{M-1} \sum_{y=0}^{N-1} f(x,y)e^{-j2\pi(\frac{ux}{M} + \frac{vy}{N})}F(u,v)=x=0∑M−1​y=0∑N−1​f(x,y)e−j2π(Mux​+Nvy​)

  • f(x,y)f(x, y)f(x,y) : 像素矩阵中x,yx, yx,y处的像素值
  • M,NM, NM,N : 像素矩阵的大小,行列
  • F(x,y)F(x, y)F(x,y) : 变换后u,vu, vu,v处的频域值,为复数。

F(u,v)→f(x,y)F(u, v) \to f(x, y)F(u,v)→f(x,y)

f(x,y)=1MN∑u=0M−1∑v=0N−1F(u,v)ej2π(uxM+vyN)f(x, y) = \frac{1}{MN} \sum_{u=0}^{M-1} \sum_{v=0}^{N-1} F(u, v)e^{j2\pi(\frac{ux}{M} + \frac{vy}{N})}f(x,y)=MN1​u=0∑M−1​v=0∑N−1​F(u,v)ej2π(Mux​+Nvy​)

F(u,v)=R(u,v)+I(u,v)F(u, v) = R(u, v) + I(u, v)F(u,v)=R(u,v)+I(u,v)
频谱:
∣F(u,v)∣=(R(u,v)2+I(u,v)2)|F(u, v)| = \sqrt{({R(u, v)}^2 + {I(u, v)}^2)}∣F(u,v)∣=(R(u,v)2+I(u,v)2)​
相位角:
ϕ=arctanI(u,v)R(u,v)\phi = arctan \frac{I(u, v)}{R(u, v)}ϕ=arctanR(u,v)I(u,v)​
功率谱:
P(u,v)=∣F(u,v)∣2=R(u,v)2+I(u,v)2P(u, v) = |F(u, v)|^2 = {R(u, v)}^2 + {I(u, v)}^2P(u,v)=∣F(u,v)∣2=R(u,v)2+I(u,v)2

    傅里叶变换的性质:可分离性和对称性。在进行2D傅里叶变换时,可以利用其性质来简化计算,一个2D傅里叶变换核可以分解为两个1D傅里叶变换。一个N×NN\times NN×N的2D傅里叶变换需要 N4N^4N4 次复数乘法运算和 N2(N2−1)N^2(N^2-1)N2(N2−1) 次复数加法运算,而进行一个长度为N的1D傅里叶变换只需进行N2N^2N2次复数乘法运算和N(N−1)N(N-1)N(N−1)次复数加法运算。

指数运算部分:
e−j2π(uxM+vyN)=e−j2πuxM+e−j2πvyNe^{-j2\pi(\frac{ux}{M} + \frac{vy}{N})} = e^{-j2\pi\frac{ux}{M}} + e^{-j2\pi\frac{vy}{N}}e−j2π(Mux​+Nvy​)=e−j2πMux​+e−j2πNvy​

ej2π(uxM+vyN)=ej2πuxM+ej2πvyNe^{j2\pi(\frac{ux}{M} + \frac{vy}{N})} = e^{j2\pi\frac{ux}{M}} + e^{j2\pi\frac{vy}{N}}ej2π(Mux​+Nvy​)=ej2πMux​+ej2πNvy​

列变换:
G(x,y)=∑y=0N−1f(x,y)e−j2πvyNG(x, y) = \sum_{y = 0}^{N-1} f(x, y) e^{\frac{-j2\pi vy}{N}}G(x,y)=y=0∑N−1​f(x,y)eN−j2πvy​
行变换:
F(u,v)=∑x=0M−1G(x,y)e−j2πuxMF(u, v) = \sum_{x = 0}^{M-1} G(x, y) e^{\frac{-j2\pi ux}{M}}F(u,v)=x=0∑M−1​G(x,y)eM−j2πux​

实现傅里叶变换

  • 简单实现慢速傅里叶变换
  • 加速版本
  • numpy.fft.fft2()
import cv2 as cv
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
img = cv.imread('./images/guigu1_mini.png')
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
img_gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)

测试用例:

傅里叶变换与逆变换

def slowly_dft(img_gray):ret = np.zeros_like(img_gray).astype('complex')# ret[0]应包含零频率项,# ret[1:n//2]应该包含正频率项,# ret[n//2 + 1:]应该包含负频率项,从最负频率开始按升序排列。m, n = img_gray.shapefor u in range(m):for v in range(n):for x in range(m):for y in range(n):ret[u, v] += img_gray[x, y]*np.exp(-2j*np.pi*(u*x/m + v*y/n))return retdef slowly_idft(img_freq):img_gray = np.zeros_like(img_freq)m, n = img_freq.shapefor x in range(m):for y in range(n):for u in range(m):for v in range(n):img_gray[x, y] += img_freq[u, v]*np.exp(2j*np.pi*(u*x/m + v*y/n))/m*nimg_gray = np.clip(img_gray, 0, 255).astype(int)return img_graydef restore_img(idft_array):real_part = idft_array.realimg_gray = np.clip(real_part, 0, 255).astype("uint8")return img_graydef accelerate_dft(img_gray):ret = np.zeros_like(img_gray).astype('complex')m, n = img_gray.shapex_arr = np.concatenate([np.arange(m).reshape(m, 1)], axis=1)y_arr = np.concatenate([np.arange(n).reshape(1, n)], axis=0)for u in range(m):for v in range(n):ret[u, v] = np.sum(np.multiply(img_gray,np.exp(-2j*np.pi*(u*x_arr/m + v*y_arr/n))))return ret
%%time
img_freq_slow = slowly_dft(img_gray)
CPU times: total: 1min 3s
Wall time: 1min 3s
%%time
img_freq_acce = accelerate_dft(img_gray)
CPU times: total: 1.08 s
Wall time: 1.08 s
%%time
img_freq_fast = np.fft.fft2(img_gray)
CPU times: total: 0 ns
Wall time: 0 ns

快速傅里叶逆变换

img_1 = np.fft.ifft2(img_freq_slow)
img_2 = np.fft.ifft2(img_freq_fast)

还原和频谱图(log变换,0频率移动)

图像频域增强(OpenCV)

G(u,v)=H(u,v)F(u,v)G(u, v) = H(u, v)F(u, v)G(u,v)=H(u,v)F(u,v)

  • F(u,v)F(u, v)F(u,v) : 傅里叶变换后的图像频域矩阵
  • H(u,v)H(u, v)H(u,v) : 转移函数,作用于f(u,v)f(u, v)f(u,v)
  • G(u,v)G(u, v)G(u,v) : 增强后的频域矩阵

图像频域增强步骤:

  1. 傅里叶变换得到频域矩阵。
  2. 将其与一个转移函数(根据需要设计)相乘。
  3. 将结果进行傅里叶反变换以得到增强后的图像。

下通过一个简单转移操作,实现高通滤波,观察原始图像的变化:

img = cv.imread('./images/hj.png')
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
img_gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
dft = cv.dft(img_gray.astype('float32'),flags = cv.DFT_COMPLEX_OUTPUT)           # 傅里叶变换(Opencv是用深度为2数组表示复数)
dft_shift = np.fft.fftshift(dft)                                                 # 移动零频分量
magnitude_spectrum = 20*np.log(cv.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))  # 幅值对数变换

测试用例 (逃学威龙1)

从图像的幅值可以看出,中间最亮也代表着中间频率最低(幅值越大频率越小)。

1. 屏蔽中间10×1010 \times 1010×10的低频
crow = dft_shift.shape[0]//2                         # 中心点坐标
ccol = dft_shift.shape[1]//2
dft_shift[crow-5:crow+5, ccol-5:ccol+5] = 0          # 去除中心低频
dft_ishift = np.fft.ifftshift(dft_shift)             # 还原频谱图
img_ = cv.idft(dft_ishift)                           # 逆傅里叶变换
img_back1 = cv.magnitude (img_[:,:,0],img_[:,:,1])   # 还原图像

屏蔽部分低频后(高通滤波),图像得到了类似边缘检测的结果。


图像频域增强:傅里叶变换相关推荐

  1. 数字图像处理——图像频域增强

    图像几何变换 图像频域增强 图像变换的目的 傅里叶变换 空间频率的理解 如何看频谱图 从频域变回空间域 图像频域增强 图像变换是图像频域增强技术的基础,也是变换域分析理论的基础,图像频域增强基于图像信 ...

  2. 数字图像处理实验四图像频域增强

    一.实验目的 (1)了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学的图像增强的理论知识和相关算法. (2)熟练掌握低通.高通.带通.同态滤波器的使用方法,明确不同性质的滤波器对图像的影响 ...

  3. java 图像傅里叶变换_图像频域滤波与傅里叶变换

    1.频率滤波 图像的空间域滤波:用各种模板直接与图像进行卷积运算,实现对图像的处理,这种方法直接对图像空间操作,操作简单.图像处理不仅可以在空间域进行还可以在频率域进行,把空间域的图像开窗卷积形式,变 ...

  4. 5.14 图像频域处理

    5.14 图像频域处理 在图像处理和分析中,经常会将图像从图像空间转换到其他空间中,并利用这些空间的特点进行对转换后图像进行分析处理,然后再将处理后的图像转换到图像空间中,这称之为图像变换.在一些图像 ...

  5. 图像增强三大类别:点增强、空域增强、频域增强

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 图像增强是图像模式识别中非常重要的图像预处理过程.图像增强的目的是 ...

  6. 数字图像处理笔记-02(图像空域增强技术及联合运用)

    数字图像处理笔记-02(图像空域增强技术及联合运用) (一) 图像增强 1.1 基本概念 由于图像在传输或者处理过程中会引入噪声或使图像变模糊,从而降低了图像质量,甚至淹没了特 征,给分析带来了困难. ...

  7. 第四章 图像频域滤波

    本章主要内容为二维傅立叶变换及其反变换,频域平滑滤波器.频域锐化滤波器,以及同态滤波器的相关介绍. 本章要求重点掌握图像频域滤波的基本流程及表示:二维离散傅里叶变换的表示及特点:频域平滑滤波器的基本原 ...

  8. 【一文了解】经典图像的增强方法都有些什么?什么又是振铃现象?为什么图像会产生噪声?噪声又有什么分类?

    CV_07 图像增强 & 图像噪声 一. 什么是图像增强? 图像增强其实就是有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰或强调某些感兴趣的特征.扩大图像中不同物体特征之间的差别 ...

  9. 3_一幅图像,经过傅里叶变换后,将高频部分删除,再进行反变换,设想一下将会得到什么结果?...

    一幅图像,经过傅里叶变换后,将高频部分删除,再进行反变换,设想一下将会得到什么结果? 在频谱图上,白色的斑点.噪声和边界等会表现为高频部分,所以通过滤去高频,可以降噪(图像的频谱函数统计特征:图像的大 ...

  10. C语言数字图像处理---2.5图像频域滤波

    上一小节我们介绍了图像频域变换,本小节将以此为基础,介绍图像频域滤波的相关内容,包含常见高通/低通/带通/带阻/方向滤波等频域滤波方法,同时以C语言编码实现,帮助初学者理解和掌握如何进行图像的频域滤波 ...

最新文章

  1. 使用计算机的缺点英文作文,网络与计算机的好处与坏处英文作文
  2. 【剑指offer-Java版】41和为s的两个数字VS和为s的连续正数序列
  3. AspectJ的注解开发AOP:异常抛出通知的学习
  4. 【Spring实战】注入非Spring Bean对象
  5. Linux 模拟网络丢包和延迟命令
  6. Tomcat配置问题解决方法
  7. nodejs ajax进度条,Ajax异步文件上传与NodeJS express服务端处理的示例分析
  8. 操作篇 了解学习NAT实验(关于静态NAT、动态NAT、EasyIP、端口映射的配置方法))
  9. c#程序中使用like“查询access数据库查询为空的问题
  10. 手机计算机英语,计算机英语翻译
  11. 《中学生可以这样学Python》84节配套微课免费观看地址
  12. mysqlbinlog unknown variable:default-character-set=gbk
  13. html table奇偶行颜色设置 (CSS选择器)
  14. HTML怎么写入形状,css3写各种形状(收集篇...)
  15. 南邮2020/2021电工电子技术期末试卷
  16. Win11文件类型怎么改?Win11修改文件后缀的方法
  17. 胃病患者饮食结构注意事项
  18. 买传奇域名空间要注意什么?
  19. 使用U盘制作系统盘(龙芯镜像)
  20. 关于JavaScript中的date和java中的date差14小时问题

热门文章

  1. 如何C语言编程二维数组五位学生总分,C语言编程题(有关二维数组的循环的)...
  2. mybaits.xml文件约束,头部
  3. android 新版本gradle,Android:更新到新版本的gradle后出现“Manife...
  4. Uber花了21亿元入驻上海自贸区 不叫优步叫雾博
  5. mongodb笔记 getting started
  6. Todoist Chrome:待办事项列表及任务管理
  7. 7-8-无向图的关节点-图-第7章-《数据结构》课本源码-严蔚敏吴伟民版
  8. find命令使用及实例
  9. ffmpeg: error while loading shared libraries: libavdevice.so.53
  10. linux 每日学一点《将LINUX变成路由器》