利用fft算法重写公式并理解频率和像素变化率的关系(完美解决问题)

news2024/12/25 0:18:18

算法我就不贴了。算法就是算法导论的内容。

我直接写推导过程。

假设变化率为f(n+1)-f(n)

首先计算二进制数,这里我假设为3位二进制。

例如:f(5)-f(4),

5和4的二进制为101,100。所以逆序数为101,001

101对应的频率为5, 001对应的频率为1。书上的代码是fft变换,这里是反变换,所以1是顺时针转动。

这里高频的只有5,所以先计算5的转动过程。

我先介绍一下Fk转动过程,首先,最高位为1的Fk的都这样转动,第一次转动为\pi,第二次转动为\pi/2,第k次转动为\pi/2^{k},总共会转动\log_{2} N次。至于转动的方向是根据正变换还是反变换,因为这里是反变换,所以1是顺时针转动,0是不转动。如果最高位不为1,就不转动,次高位为1,开始转动\pi/2,继续按照上面的规律转动,每次转动为当前层级2^(N-n)的\pi/2^{N-n}(从第零层开始),n为当前层级。

转动过程在生成的fn中起什么作用呢?我只能说是做加减组合之后就是生成fn的分量了,如何组合呢?关键就是符号的确定了。

符号的确定方式是这样的:

以ai在yj中的符号确定为例,

首先是a4在y5中的符号

100与101=100,经历了负正正,所以为负。

a6在y4中的符号

110与001=000,所以为正。

a3在y4中的符号

011与001=001,为负。

ai的下标的二进制数和yj的下标的二进制数的逆序数相与,出现偶数个1为正,奇数个1为负。

这样我就获得了傅里叶反变换的计算公式了。

总结如下:

1..首先是计算输入的ai在复平面的转动角度\theta_{i},即是ai*e^{\theta_{i} }。假设N恰好是2次方幂,设长度为m=\log_{2} N。假设下标i的二进制数为x1x2....xm。

\theta_{i} =\sum_{j=1}^{m}(2\pi/2^{j})*xj,当xj=1,是累加进去的,xj=0就没有加。

2.,接着是确定ai*e^{\theta_{i} }符号。

假设fj的下标j的二进制数为y1y2...ym。所以逆序数为ym...y2y1

x1x2....xm和ym...y2y1做与运算。统计1的个数,为奇数个,则为负号,为偶数个为正号,设为\delta (fj,ai)

3.,所以fj=\sum_{i=0}^{N-1}\delta (fj,ai)*ai*e^{\theta_{i} }

但是这个和频率,变化率有什么关系?

因为频率是ai的下标i。所以f(n+1)-f(n)表明,n+1和n的二进制中末位一个是1,一个是0,所以逆序数中总有一个是大的,一个是小的。其次需要知道的是ai*e^{\theta_{i} }ai*e^{\theta_{i} }在输入ai的时候都是确定的了,跟j无关,而跟j有关的是符号\delta (fj,ai)

所以f(n+1)-f(n)=\sum_{i=0}^{N-1}[\delta (f(n+1),ai)-\delta (f(n),ai)]*ai*e^{\theta_{i} }。因为是统计1的个数,假设前面三个1,后面一个1,那就是2个了,那就是做了异或操作。

如果下标n为y1y2...011..1,则n+1为y1y2...100..0,异或为00...11..1

如果下标n为y1y2...100..0,则n+1为y1y2...100..1,异或为00...00..1

设异或结果的逆序数为gn,gn与ai的下标相与之后统计1的个数,设为h(n,i)

所以f(n+1)-f(n)=\sum_{i=0}^{N-1}h(n,i)*ai*e^{\theta_{i} }。观察发现逆序数都是高位的。因为是与ai的下标i相与,统计1的个数,这意味着i的二进制数中的较低位置不能决定ai的符号,具体的情况跟n的值有关。而符号关系到最终的数值大小,大部分符号为一致的话,最终的向量值更大一些,虽然也跟幅度有关,但是这里输入ai都已经固定了,不需要考虑了。

所以我该怎么说呢?像素变化率确实跟频率有关,但是频率的较高处跟n的值有关,如果理想的话,i与10...00相与统计1的个数,那么所有的高频处一致为负号。最差的情况是11...1和i相与,符号完全由i决定,但是这种情况下,n值为011..111,这表示是在图像的点列中的中间处。只有一个像素点如此,其次最差的是0011..111,继续下去,其他的情况都要好很多。

我终于完成了频率和像素变化的说明了。居然是跟二进制位有关。

算错了。要修改一下。因为只是符号不同而已,可能的值为2,0,-2。

所以f(n+1)-f(n)=\sum_{i=0}^{N-1}[\delta (f(n+1),ai)-\delta (f(n),ai)]*ai*e^{\theta_{i} }

如果下标n为y1y2...011..1,则n+1为y1y2...100..0,

如果下标n为y1y2...100..0,则n+1为y1y2...100..1。

n=y1y2...ym011..1的逆序为1...110ym..y2y1,n+1逆序为0...001ym...y2y1,

n=y1y2...ym100..0的逆序为0...001ym..y2y1,n+1逆序为1...001ym...y2y1,

先看第一种情况:

0...001ym..y2y1与i=x1x2...xM相与然后异或为:\bigoplus_{j=1}^{m}(x(M-j+1)*yj)\bigoplus x(M-m),  \bigoplus是异或操作,若结果为1则是负号,结果为0,则是正号。

1...110ym..y2y1与i=x1x2...xM相与然后异或为:\bigoplus_{j=1}^{m}(x(M-j+1)*yj)\bigoplus_{j=1}^{M-m-1} x(j)

对比发现在低位的地方异或方式是一样的,设h(1)=-1, h(0)=1。h对于异或操作有h(a\bigoplusb)=h(a)*h(b)。所以

h(\bigoplus_{j=1}^{m}(x(M-j+1)*yj)\bigoplus x(M-m))=h(\bigoplus_{j=1}^{m}(x(M-j+1)*yj))*h(x(M-m))

h(\bigoplus_{j=1}^{m}(x(M-j+1)*yj)\bigoplus_{j=1}^{M-m-1} x(j))=h(\bigoplus_{j=1}^{m}(x(M-j+1)*yj))*h(\bigoplus_{j=1}^{M-m-1} x(j))

这看起来单个位置n的符号也是跟频率i的低位有关,频率的高位反而不影响。但是ai的符号做了减法之后发现,低位的符号作用是一样的,决定ai符号的是高位x1x2..x(M-m)。

再看第二种情况:

情况也是一样的,我就不写了。这能说明什么呢?这说明的是低频对符号有一致的影响,高频对符号有不一致的影响。对于变化率来说,如果符号是一致变化的,那就没变化,所以高频能改变变化率。观察上面的n的二进制和逆序,发现一致变化的区域在n的低位,根据低位的个数决定,位数越低,如果改变n的低位函数值f(n0),越低表示n0越接近n,那么只越对高频的i的函数值F(i)的符号无影响,但是影响各个频率的幅度值。

最好的情况是n=011..1, n+1=100..0。n逆=1..110,n+1逆=0..001。完全由i的每个分量决定了符号。这表示图像中间的一个像素点在修改任意频率i的函数值ai的时候,变化率是由各种频率决定的。实际上变化率我之前分析过了,频率和幅度都起作用,但是我之前分不清高频和低频起的作用的区别,这里就能说明在不同的位置n,由不同的频率i起作用,甚至较低频率是不起作用的。

最差的情况是n=100..0, n+1=100..1。n逆=0..001,n+1逆=1..001。完全由i的高频分量决定了符号。这表示图像中间的一个像素点只在修改高频率i的函数值ai的时候,变化率几乎是由高频决定的。

最后我就

n=y1y2...ym011..1的逆序为1...110ym..y2y1,n+1逆序为0...001ym...y2y1,

n=y1y2...ym100..0的逆序为0...001ym..y2y1,n+1逆序为1...001ym...y2y1,

给出一个简单的解释:

这里,因为在空间n位置的局部范围内,ym..y2y1不会改变,所以逆序与i相与,得到的符号也不会改变。假设高频的值全为0,那么意味着f(n)在n的局部的值没有变化。因为高频为0,而低频的值ai和旋转角度都是固定的,唯一变化的是符号,但是在n的局部范围内符号没有变化,则f(n)在n的局部的值没有变化,根据我的这个公式:

fj=\sum_{i=0}^{N-1}\delta (fj,ai)*ai*e^{\theta_{i} }

如何理解像素剧烈变化呢?反正基本上是空间的局部范围内n变化的时候,由于逆序之后符号变化是在高频跳到中频范围反复的,所以如果这个范围内ai不为0,那么图像像素的变化率大。
 

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

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

相关文章

力扣HOT100 - 236. 二叉树的最近公共祖先

解题思路: dfs 节点p,q异侧时,节点root为它们的公共祖先。 class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root null || p root || q root) return root;TreeNode left lowestCommonAncest…

max各种相机导出到ue4匹配镜头的工具集

总览 rollout export_UE4Cam_v2 "导出UE4Cam_v2:半自动" width:200 height:120(HyperLink explain "在打开的max文件中使用" pos:[25,12] width:200 height:15 color:(color 255 155 0) GroupBox grp1 "要导出的相机名" pos:[5,28] width:179 …

NeRF in the Wild: Neural Radiance Fields for Unconstrained Photo Collections

NeRF in the Wild: Neural Radiance Fields for Unconstrained Photo Collections(野外的 NERF: 用于无约束照片采集的神经辐射场) Abstract 我们提出了一种基于学习的方法来合成新的视图的复杂场景使用只有非结构化的收集野生照片。我们建立在神经辐射场(neRF)的…

深度学习算法简介(一)

目录 ⛳️推荐 前言 1、深度神经网络(DNN) 2、卷积神经网络(CNN) 3、残差网络(ResNet) 4、LSTM(长短时记忆网络) 5、Word2Vec 6、Transformer 7、生成对抗网络(…

MySQL常见的约束

什么是约束? 限制,限制我们表中的数据,保证添加到数据表中的数据准确和可靠性!凡是不符合约束的数据,插入时就会失败,插入不进去的! 比如:学生信息表中,学号就会约束不…

【IC设计】奇数分频与偶数分频 电路设计(含讲解、RTL代码、Testbench代码)

文章目录 原理分析实现和仿真偶数分频的电路RTL代码偶数分频的电路Testbench代码偶数分频的电路仿真波形占空比为50%的三分频电路RTL代码占空比为50%的三分频电路Testbench代码占空比为50%的三分频电路仿真波形 参考资料 原理分析 分频电路是将给定clk时钟信号频率降低为div_c…

北斗卫星助力农业生产精准播种

北斗卫星助力农业生产精准播种 随着现代化农业的不断进步,高科技技术的融合已成为推动农业生产向前发展的重要动力。其中,北斗卫星导航系统(BDS)的应用,特别是在农业播种领域的利用,标志着农作物种植方式的…

私域运营的基础是什么?

私域运营是指在自有平台上进行的一系列运营活动,旨在建立和维护与用户的深度互动关系,提升用户忠诚度和品牌影响力。相比于传统的广告投放和推广方式,私域运营更加注重与用户的沟通和互动,通过提供有价值的内容和个性化的服务&…

业务复习知识点Oracle查询

业务数据查询-1 单表查询 数据准备 自来水收费系统建表语句.sql 简单条件查询 精确查询 需求 :查询水表编号为 30408 的业主记录 查询语句 : select * from t_owners where watermeter 30408; 查询结果 : 模糊查询 需求 :查询业…

mysql添加普通索引(简单使用)

前言:以订单表(oms_order)为例,添加用户id(user_id)为普通索引 mysql添加普通索引(简单使用) 1.查看表已经存在的索引情况a.语法b.使用c.结果(这里还没有添加所以&#…

MT3029 战神小码哥

注意点:不能先按时间排序,在每个时间点选最大的。如果第一秒有p11,第二秒有p210和p311,则如果按时间来,则先选第一秒的1,再选第二秒的 11;但是有更优的策略:第一秒选p3,第二秒选p2。…

【1431】java学习网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 学习网站系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

ARP 攻击神器:ARP Spoof 保姆级教程

一、介绍 arpspoof是一种网络工具,用于进行ARP欺骗攻击。它允许攻击者伪造网络设备的MAC地址,以欺骗其他设备,并截获其通信。arpspoof工具通常用于网络渗透测试和安全评估,以测试网络的安全性和漏洞。 以下是arpspoof工具的一些…

【考研高数】学习笔记分享

派大星说数学(导学部分) 关于做题 测试 答疑阶段 直播 群内 高中基础知识导学 一、数与式 述了课程学习和因式分解、分式拆解等知识点。学生应了解课程内容,带着疑问听课,不要抄笔记,导学课和基础课都有测验&…

【Linux】LInux下的进程状态

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

海内外电商平台架构探究:技术与商业的融合

随着全球化进程的加速和互联网的普及,电子商务在海内外市场都蓬勃发展。海外电商平台在连接全球买家和卖家、拓展国际市场方面发挥着重要作用,而国内电商平台则在满足国内消费需求、促进国内经济增长方面扮演着关键角色。本文将探讨海内外电商平台的架构…

常见大厂面试题(SQL)01

知乎问答最大连续回答问题天数大于等于3天的用户及其对应等级 1.描述 现有某乎问答创作者信息表author_tb如下(其中author_id表示创作者编号、author_level表示创作者级别,共1-6六个级别、sex表示创作者性别): author_id author_level sex 101 …

基于STM32的DAC简易信号发生器设计(HAL库)

前言:本文为手把手教学制造 DAC 简易信号发生器的教程,本教程的 MCU 使用 STM32F103ZET6 。以 HAL 库的 DAC 函数作为代码基础进行编程,使得信号发生器可以产生各种类型的信号波,包括:方波、三角波、正弦波和噪声波&am…

Oracle解析exp、imp及常见的问题

前言 在工作中经常需要不同数据库的导入和导出。exp和imp可以实现数据的迁移。 exo会转储产生对应的二进制文件,里面包括数据的定义信息、数据内容等,即为dump文件。 下面是使用exp和imp的一些场景 exp和imp主要有4中模式: 1)数据库模式 数据库模式也就是我们说的全备…

Pytorch 计算深度模型的大小

计算模型大小的方法 卷积 时间复杂度 与 空间复杂度 的计算方式: C 通道的个数,K卷积核大小,M特征图大小,C_l-1是输入通道的个数,C_l是输出通道的个数 1 模型大小 MB 计算模型的大小的原理就是计算保存模型所需要…