傅里叶-梅林变换实现图像配准
2015-12-14 16:50
405 查看
傅里叶-梅林变换 解决的问题是一张图片经过 旋转 缩放 平移,而且两张图片只需要有一部分相同部分,而且可以抵抗一定的噪声。
首先待配准的图片与原图片存在缩放量a,旋转量θ,平移量(x0,y0)
f2 (x,y)=f1 (a(xcosθ+ysinθ)+x0,(a(−xsinθ+ycosθ))+y0){{f}_{2}}~\left( x,y \right)={{f}_{1}}\text{ }\!\!~\!\!\text{ }\left( a\left( xcos\theta +ysin\theta \right)+{{x}_{0}},\left( a\left( -xsin\theta +ycos\theta \right) \right)+{{y}_{0}} \right)
首先根据傅里叶变换的位移性质
存在一种叫位相相关技术的东西,可以来找平移量就是根据f(t)与f(t-t0)之间相差一个e−jωt0{{e}^{-j\omega {{t}_{0}}}}f(t)与f(t-t0)的相位谱就相差一个-t0,然后对e−jωt0{{e}^{-j\omega {{t}_{0}}}}进行傅里叶逆变换,我们就能在to处得到一个冲激函数(不知道的去查傅里叶变换表。。),从t0的位置就能判断出平移了多少,推广到二维就能求出平移量(x0,y0)。
2.对数极坐标变换
这个坐标变换和熟悉的极坐标变换类似,就是f(x,y)变成g(r,Θ),然后再对r取对数
根据这个变换,假如两个图片只存在旋转和缩放
F2(x,y)=F1 (a(xcosθ+ysinθ),a(−xsinθ+ycosθ)){{F}_{2}}\left( x,y \right)={{F}_{1}}\text{ }\!\!~\!\!\text{ }\left( a\left( xcos\theta +ysin\theta \right),a\left( -xsin\theta +ycos\theta \right) \right)
F1(x,y){{F}_{1}}\left( x,y \right) ->G1(λ,θ)\left. {{G}_{1}}(\lambda ,\theta \right)
G2(λ,θ)=G1(λ+lna,θ+θ0)\left. {{G}_{2}}\left( \lambda ,\theta \right)={{G}_{1}}(\lambda +\mathbf{ln}a,\theta +{{\theta }_{0}} \right)
这样旋转和缩放在对数极坐标下又变成平移关系了,然后用相位相关技术就能获得旋转和缩放量了
**
1.找出旋转缩放关系
先用傅里叶变换剔除平移因子
F2(u,v)=exp(-j(ux0+vy0)σ ^ 2F1[σ−1(ucosθ0+vsinθ0),σ−1(−ucosθ0+vsinθ0)]{{F}_{2}}(\text{u},\text{v})=\tfrac{\text{exp(-j(u}{{x}_{0}}+\text{v}{{\text{y}}_{\text{0}}}\text{)}}{\sigma \text{ }\!\!\hat{\ }\!\!\text{ 2}}{{F}_{1}}\left[ {{\sigma }^{-1}}(u\cos {{\theta }_{0}}+v\sin {{\theta }_{0}}),{{\sigma }^{-1}}(-u\cos {{\theta }_{0}}+v\sin {{\theta }_{0}}) \right]
|F2(u,v)|=|F1[σ−1(ucosθ0+vsinθ0),σ−1(−ucosθ0+vsinθ0)]|\left| {} \right.{{F}_{2}}(u,v)\left. {} \right|=\left| {} \right.{{F}_{1}}\left[ {{\sigma }^{-1}}(u\cos {{\theta }_{0}}+v\sin {{\theta }_{0}}),{{\sigma }^{-1}}(-u\cos {{\theta }_{0}}+v\sin {{\theta }_{0}}) \right]\left. {} \right|
我们发现两张图片进行傅里叶变换后,幅度谱里没有x0和y0了,只有缩放和平移因子了,这时候要做一个高通滤波,然后再做对数极坐标变换,相位相关技术就能找到缩放旋转因子。
(冲激函数当然找不到实际操作就是找这个最大值的位置,也不要问我为什么缩放倍率是1
然后对图片旋转和缩放相应的倍数就行了
2.找出平移量
这个当然就很简单了,把旋转直接相位相关技术技术解决,找到平移量拼上去看看。
恩 效果很好
**
**
最后发个自己做这个东西时候参考的matlab代码,参考我的数学讲解应该很好做出来了
http://download.csdn.net/detail/agrapier/9355801
(不是我写的
**
首先待配准的图片与原图片存在缩放量a,旋转量θ,平移量(x0,y0)
f2 (x,y)=f1 (a(xcosθ+ysinθ)+x0,(a(−xsinθ+ycosθ))+y0){{f}_{2}}~\left( x,y \right)={{f}_{1}}\text{ }\!\!~\!\!\text{ }\left( a\left( xcos\theta +ysin\theta \right)+{{x}_{0}},\left( a\left( -xsin\theta +ycos\theta \right) \right)+{{y}_{0}} \right)
一.基础准备
1.相位相关技术首先根据傅里叶变换的位移性质
存在一种叫位相相关技术的东西,可以来找平移量就是根据f(t)与f(t-t0)之间相差一个e−jωt0{{e}^{-j\omega {{t}_{0}}}}f(t)与f(t-t0)的相位谱就相差一个-t0,然后对e−jωt0{{e}^{-j\omega {{t}_{0}}}}进行傅里叶逆变换,我们就能在to处得到一个冲激函数(不知道的去查傅里叶变换表。。),从t0的位置就能判断出平移了多少,推广到二维就能求出平移量(x0,y0)。
2.对数极坐标变换
这个坐标变换和熟悉的极坐标变换类似,就是f(x,y)变成g(r,Θ),然后再对r取对数
根据这个变换,假如两个图片只存在旋转和缩放
F2(x,y)=F1 (a(xcosθ+ysinθ),a(−xsinθ+ycosθ)){{F}_{2}}\left( x,y \right)={{F}_{1}}\text{ }\!\!~\!\!\text{ }\left( a\left( xcos\theta +ysin\theta \right),a\left( -xsin\theta +ycos\theta \right) \right)
F1(x,y){{F}_{1}}\left( x,y \right) ->G1(λ,θ)\left. {{G}_{1}}(\lambda ,\theta \right)
G2(λ,θ)=G1(λ+lna,θ+θ0)\left. {{G}_{2}}\left( \lambda ,\theta \right)={{G}_{1}}(\lambda +\mathbf{ln}a,\theta +{{\theta }_{0}} \right)
这样旋转和缩放在对数极坐标下又变成平移关系了,然后用相位相关技术就能获得旋转和缩放量了
**
二.找出旋转缩放关系
因为对数极坐标变换只能解决只有旋转和缩放,而不包括平移的关系,所以我们在找出旋转缩放关系时先要剔除平移的因素,这时候使用的还是傅里叶变换的性质1.找出旋转缩放关系
先用傅里叶变换剔除平移因子
F2(u,v)=exp(-j(ux0+vy0)σ ^ 2F1[σ−1(ucosθ0+vsinθ0),σ−1(−ucosθ0+vsinθ0)]{{F}_{2}}(\text{u},\text{v})=\tfrac{\text{exp(-j(u}{{x}_{0}}+\text{v}{{\text{y}}_{\text{0}}}\text{)}}{\sigma \text{ }\!\!\hat{\ }\!\!\text{ 2}}{{F}_{1}}\left[ {{\sigma }^{-1}}(u\cos {{\theta }_{0}}+v\sin {{\theta }_{0}}),{{\sigma }^{-1}}(-u\cos {{\theta }_{0}}+v\sin {{\theta }_{0}}) \right]
|F2(u,v)|=|F1[σ−1(ucosθ0+vsinθ0),σ−1(−ucosθ0+vsinθ0)]|\left| {} \right.{{F}_{2}}(u,v)\left. {} \right|=\left| {} \right.{{F}_{1}}\left[ {{\sigma }^{-1}}(u\cos {{\theta }_{0}}+v\sin {{\theta }_{0}}),{{\sigma }^{-1}}(-u\cos {{\theta }_{0}}+v\sin {{\theta }_{0}}) \right]\left. {} \right|
我们发现两张图片进行傅里叶变换后,幅度谱里没有x0和y0了,只有缩放和平移因子了,这时候要做一个高通滤波,然后再做对数极坐标变换,相位相关技术就能找到缩放旋转因子。
(冲激函数当然找不到实际操作就是找这个最大值的位置,也不要问我为什么缩放倍率是1
然后对图片旋转和缩放相应的倍数就行了
2.找出平移量
这个当然就很简单了,把旋转直接相位相关技术技术解决,找到平移量拼上去看看。
恩 效果很好
**
**
三.其他
最近学了opencv,本来想拿opencv做一个,当时是一个作业急急忙忙的拿matlab参考别人代码做了一个,结果最近一直考试 忙的不行。以后有机会的话写个opencv代码发出来最后发个自己做这个东西时候参考的matlab代码,参考我的数学讲解应该很好做出来了
http://download.csdn.net/detail/agrapier/9355801
(不是我写的
**
相关文章推荐
- eval()函数用法详解
- 老李分享:qtp自动化测试框架赏析-关键字自动化测试框架 2
- 第十六周项目(1):验证算法3——冒泡排序
- 第十六周 项目一 (2)插入排序之希尔排序
- swiper.js完美的解决触摸滑动效果
- 第四周项目3 单链表应用2
- 第七周 项目二 建立链队算法库
- 第15周项目3 B-树的基本操作
- 正则表达式语法
- Leetcode193: Range Sum Query - Immutable
- ORACLE多表关联UPDATE 语句
- iOS-在Xcode中使用Git进行源码版本控制(二:提交更改)
- c# string类型转变成Stream类型
- 分销商管理--代理模式
- JSF+EJB+JPA总体思路
- Page.java
- 正则表达式语法
- js获取各种宽度和高度
- 计算日期
- 实现快速升级Android SDK