第4章 Python 数字图像处理(DIP) - 频率域滤波1 - 傅里叶级数和变换简史

本章主要讲解频域域滤波的技术,主要技术用到是大家熟悉的傅里叶变换与傅里叶反变换。这里有比较多的篇幅讲解的傅里叶的推导进程,用到Numpy傅里叶变换。本章理论基础比较多,需要更多的耐心来阅读,有发现有错误,可以与我联系。谢谢!

目录

    • 背景
      • 傅里叶级数和变换简史

import sys
import numpy as np
import cv2
import matplotlib 
import matplotlib.pyplot as plt
import PIL
from PIL import Imageprint(f"Python version: {sys.version}")
print(f"Numpy version: {np.__version__}")
print(f"Opencv version: {cv2.__version__}")
print(f"Matplotlib version: {matplotlib.__version__}")
print(f"Pillow version: {PIL.__version__}")
Python version: 3.6.12 |Anaconda, Inc.| (default, Sep  9 2020, 00:29:25) [MSC v.1916 64 bit (AMD64)]
Numpy version: 1.16.6
Opencv version: 3.4.1
Matplotlib version: 3.3.2
Pillow version: 8.0.1
def normalize(mask):return (mask - mask.min()) / (mask.max() - mask.min() + 1e-8)

背景

傅里叶级数和变换简史

内容比较多,请自行看书,我就实现一维的傅里叶变换先。

卷积用大小为m×nm\times nm×n元素的核对大小为M×NM\times NM×N的图像进行滤波时,需要运算次数为MNmnMNmnMNmn。如果核是可分享的,那么运算次数为MN(m+N)MN(m + N)MN(m+N),而在频率域执行等交的滤波所需要的运算次数为2MNlog2MN2MN\text{log}_2MN2MNlog2MN,2表示计算一次正FFT和一次反FFT。

Cn(m)=M2m22M2log2M2=m24log2M(4.1)C_n(m) = \frac{M^2 m^2}{2M^2 \text{log}_2}M^2 = \frac{m^2}{4 \text{log}_2 M}\tag{4.1}Cn(m)=2M2log2M2m2M2=4log2Mm2(4.1)

如果是可分离核,则变为

Cs(m)=M2m22M2log2M2=m2log2M(4.2)C_s(m) = \frac{M^2 m^2}{2M^2 \text{log}_2 M^2} = \frac{m}{2 \text{log}_2 M} \tag{4.2}Cs(m)=2M2log2M2M2m2=2log2Mm(4.2)

C(m)>1C(m) > 1C(m)>1时,FFT的方法计算优势更大;而C(m)≤1C(m) \leq 1C(m)1时,空间滤波的优势更大

# FFT 计算的优势
M = 2048
m = np.arange(0, 1024, 1)
c_n = m**2 / (4 * np.log2(M))
c_s = m / (2 * np.log2(M))
fig = plt.figure(figsize=(10, 5))
ax_1 = fig.add_subplot(1, 2, 1)
ax_1.plot(c_n)
ax_1.set_xlim([0, 1024])
ax_1.set_xticks([3, 255, 511, 767, 1023])
ax_1.set_ylim([0, 25*1e3])
ax_1.set_yticks([0, 5*1e3, 10*1e3, 15*1e3, 20*1e3, 25*1e3])
ax_2 = fig.add_subplot(1, 2, 2)
ax_2.plot(c_s)
ax_2.set_xlim([0, 1024])
ax_2.set_xticks([3, 255, 511, 767, 1023])
ax_2.set_ylim([0, 5])
ax_2.set_yticks([0, 10, 20, 30, 40, 50])
plt.show()

在这里插入图片描述

def set_spines_invisible(ax):ax.spines['left'].set_color('none')ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')ax.spines['bottom'].set_color('none')
# 不同频率的叠加
x = np.linspace(0, 1, 500)t = 50
A = 1
y_1 = A * np.sin(t * 2 * np.pi * x)t = 20
A = 2.5
y_2 = A * np.sin(t * 2 * np.pi * x)t = 5
A = 3
y_3 = A * np.sin(t * 2 * np.pi * x)t = 2
A = 20
y_4 = A * np.sin(t * 2 * np.pi * x)y_5 = y_1 + y_2 + y_3 + y_4fig = plt.figure(figsize=(8, 8))ax_1 = fig.add_subplot(5, 1, 1)
plt.plot(x, y_1), plt.xticks([]), plt.yticks([])
set_spines_invisible(ax_1)ax_2 = fig.add_subplot(5, 1, 2)
plt.plot(x, y_2), plt.xticks([]), plt.yticks([])
set_spines_invisible(ax_2)ax_3 = fig.add_subplot(5, 1, 3)
plt.plot(x, y_3), plt.xticks([]), plt.yticks([])
set_spines_invisible(ax_3)ax_4 = fig.add_subplot(5, 1, 4)
plt.plot(x, y_4), plt.xticks([]), plt.yticks([])
set_spines_invisible(ax_4)ax_5 = fig.add_subplot(5, 1, 5)
plt.plot(x, y_5), plt.xticks([]), plt.yticks([])
set_spines_invisible(ax_5)plt.tight_layout()
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中str是什么函数_python str函数怎么用

展开全部 是将一个2113对象转成字符串显示5261,注意只是显示用,有些对象4102转成字符串没有直1653接的意思。 str():将变量转化为字符串类型 a 1 b [1, 2, 3] str_a str(a) print(a) print(type(a)) str_b str(b) print(b) print(type(b)) The str()…

[ofbiz]less-than (lt;) and greater-than (gt;) symbols

问题描述&#xff1a; In field [updateItemStr] less-than (<) and greater-than (>) symbols are not allowed 此处的field [updateItemStr]是services的一个IN参数&#xff0c;错误描述的意思是"<,>"不能出现在这个域内。 解决办法&#xff1a; 在ser…

分页探究--Filter+JSTL

最近卡了一个功能就是分页&#xff0c;查了很多资料&#xff0c;分页大概是两种类型&#xff1a;一种是把数据库的东西全部查出来然后放在session里&#xff0c;用list一页一页传到页面&#xff0c;这样的消耗比较大;另一种就是使用sql语句的limit来进行数据库分页查询。我使用…

iPhone开发资料之内存管理 ,循环引用导致的内存问题

iPhone开发资料之内存管理 ,循环引用导致的内存问题 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447 http://en.wikipedia.org/wiki/Reference_counting 【IT168 技术文档】开…

python能做大型游戏吗_python有做大型游戏的潜力吗?

著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 岂止是有潜力&#xff0c;简直是很合适&#xff01; 猪厂两大游戏客户端引擎&#xff0c;NeoX 和 Messiah&#xff0c;都使用 Python 作为脚本语言。 你最近所了解的比较火的挂着猪厂旗号的&a…

第4章 Python 数字图像处理(DIP) - 频率域滤波2 - 复数、傅里叶级数、连续单变量函数的傅里叶变换、卷积

目录基本概念复数傅里叶级数冲激函数及其取样&#xff08;筛选&#xff09;性质连续单变量函数的傅里叶变换卷积基本概念 复数 复数CCC的定义为 CRjI(4.3)C R jI \tag{4.3}CRjI(4.3) R,IR,IR,I为实数&#xff0c;RRR是实部&#xff0c;III是虚部&#xff0c;j−1j \sqrt{-…

不要迷失在技术的海洋中【转】

转自http://www.cnblogs.com/lovecherry/archive/2007/10/28/940555.html 不要迷失在技术的海洋中 技术就好像一片汪洋大海&#xff0c;越深入越望不到边际。就拿自己的体验来说吧&#xff0c;2000年的时候在学校搞ASP&#xff0c;觉得网页开发就是这么简单&#xff0c;把数据库…

使用代码设置Item级的权限(权限总结1)

itle in english:set Item Level Permission for SharePoint (MOSS/WSS) List/Document Library Programmatically 有些时候&#xff0c;我们需要为文档库里面某个文件设置特殊的权限&#xff0c;这个权限不继承自列表权限&#xff0c;当然最简单的最好是再创建一个列表&#…

echarts 4.0.4怎么下载_怎么让ECharts的提示框tooltip自动轮播?

1. 怎么让ECharts的提示框tooltip自动轮播?在用ECharts做大屏或者可视化展示项目的时候&#xff0c;让提示框tooltip自动轮播是比较常见的需求&#xff0c;给大家推荐一个插件叫echarts-tooltip-auto-show,名字是有点长&#xff0c;但是挺好用的。在hover显示tooltip之后&…

[React Native]高度自增长的TextInput组件

之前我们学习了从零学React Native之11 TextInput了解了TextInput相关的属性。 在开发中,我们有时候有这样的需求, 希望输入区域的高度随着输入内容的长度而增长, 如下&#xff1a; 这时候我们需要自定义一个组件&#xff1a; 在项目中创建AutoExpandingTextInput.js import …

网站开启Gzip压缩-apache

找到并打开apache/conf目录中的httpd.conf文件 httpd.conf中打开deflate_Module和headers_Module模块&#xff0c;具体做法为将 如下两句前面的#去掉&#xff1a;LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so 3.配置文…

第4章 Python 数字图像处理(DIP) - 频率域滤波3 - 取样和取样函数的傅里叶变换、混叠

目录取样和取样函数的傅里叶变换取样取样后的函数的傅里叶变换取样定理混叠由取样后的数据重建&#xff08;复原&#xff09;函数取样和取样函数的傅里叶变换 取样 fˉ(t)f(t)sΔT(t)∑n−∞∞f(t)δ(t−nΔT)(4.27)\bar f(t) f(t)s_{\Delta T}(t) \sum_{n-\infty}^{\infty}…

[转]Android开发,实现可多选的图片ListView,便于批量操作

本文转自&#xff1a;http://www.cnblogs.com/gergulo/archive/2011/06/14/2080629.html 之前项目需要实现一个可多选的图片列表&#xff0c;用户选中一到多张图片后&#xff0c;批量上传。但是网上有可多选普通列表的代码、也有单纯图片列表的代码&#xff0c;却没有两者合并的…

个人信息安全影响评估指南_发布 | 网络安全标准实践指南—移动互联网应用程序(App)收集使用个人信息自评估指南...

关于发布《网络安全标准实践指南—移动互联网应用程序(App)收集使用个人信息自评估指南》的通知信安秘字[2020] 40号各有关单位&#xff1a;为落实《网络安全法》相关要求&#xff0c;围绕中央网信办、工信部、公安部、市场监管总局联合制定的《App违法违规收集使用个人信息行为…

Go的50度灰:Golang新开发者要注意的陷阱和常见错误

Go的50度灰&#xff1a;Golang新开发者要注意的陷阱和常见错误 http://colobu.com/2015/09/07/gotchas-and-common-mistakes-in-go-golang/

android intent和intent action大全

不管是页面牵转&#xff0c;还是传递数据&#xff0c;或是调用外部程序&#xff0c;系统功能都要用到intent。 在做了一些intent的例子之后&#xff0c;整理了一下intent&#xff0c;希望对大家有用。 由于intent内容太多&#xff0c;不可能真的写全&#xff0c;难免会有遗落&a…

第4章 Python 数字图像处理(DIP) - 频率域滤波4 - 单变量的离散傅里叶变换DFT

目录标题单变量的离散傅里叶变换由取样后的函数的连续变换得到DFT取样和频率间隔的关系单变量的离散傅里叶变换 由取样后的函数的连续变换得到DFT 对原函数的变换取样后的业的发展的变换F~(μ)\tilde F(\mu)F~(μ)&#xff0c;但未给出取样后的函数f~(t)\tilde f(t)f~​(t)的…

在线生成 CSS3 的工具

1) CSS Creator – Layout Design 2) CSS Menu Maker 3) CSS3 Please 4) CSS3 Generator 5) CSS Border Radius 6) CSS3 Gradient Generator 7) CSS3 Button Generator 8 ) Mike Plate’s CSS3 Playground 9) Border Image Generator 10) CSS3 WRAP 11) Button Maker 12) Font…

python image 转成字节_就是这么牛!三行Python代码,让数据处理速度提高2到6倍

本文可以教你仅使用 3 行代码&#xff0c;大大加快数据预处理的速度。Python 是机器学习领域内的首选编程语言&#xff0c;它易于使用&#xff0c;也有很多出色的库来帮助你更快处理数据。但当我们面临大量数据时&#xff0c;一些问题就会显现……在默认情况下&#xff0c;Pyth…

sessionStorage 、localStorage 和 cookie 之间的区别(转)

essionStorage 、localStorage 和 cookie 之间的区别(转) 2012-05-08 14:29:19| 分类&#xff1a; HTML5CSS3WEBAPP|举报|字号 订阅 sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的&#xff0c;可以方便的在web请求之间保存数据。有了本地数据&#xff0c;…