SIFT--FPGA实现之幅值和幅角计算模块
来源:互联网 发布:校园网络拓扑结构图 编辑:程序博客网 时间:2024/05/16 11:54
该模块的实现,让我走了许多弯路,开始在看文献和文章里面说的都是用cordic算法去做,然后我发现xilinx的IP核里面有这个cordic算法的IP,而且还有求反正切和开方根运算sqrt,让我开心不已,就冒失的跟领导说了,这块很快就搞定了,SIFT用FPGA实现很快就要做完了,结果等我去用IP核的时候,仿真发现不对,开方根只能处理整数和小数开方根运算,而且整数开方根运算误差很大,小数开方根运算还必须输入在0-2之间,瞬间很崩溃,就找怎么实现开方运算,找到文献说有非冗余开方这个方法可以,也看到有篇文献是这么做的,我的乖乖,差点走错道了,想啊 这么做不太好,就用IP核搞反正切运算,发现也不行啊,仿真也不对啊,看手册,发现输入只能是-1到1之间,又无语了。不知道怎么做了,又去找开方运算,发现cordic算法能做开方运算,慢慢查,发现cordic算法都能搞定,这会就开始搞cordic算法,刚开始一头雾水,看那些公式还有图形旋转啊,各种晕,后来发现本文分享的博客,关于cordic算法的,写的很通俗易懂,相当好,才有了了解,但是里面说了cordic算法能求反正切也能求开方根运算,而且是乘个系数补偿回来就好了。
我把系数乘回去结果不对,又查资料,找到双模式CORDIC算法的fpga实现这篇文章,才解开所有谜题,cordic算法旋转模式求cos和sin,向量模式求幅值和幅角也就是反正切。里面的系数还有放大,1度用多少表示,等等,都明确了,写了verilog代码,看了C语言的,cordic算法是如此的简单粗放。C只需要一个for循环而已,FPGA实现也可以使用for循环,但是不建议那么用,for循环也能综合,但是会造成时间延迟,分开写电路会消耗资源,但是时间快些,所以要自己权衡了。
现在从高斯滤波模块出来的数据到梯度计算模块再到幅值和幅角计算模块。就都做完了,幅值和幅角计算模块可以参考下面的框图:
这是华中科技大学一篇博士论文里面的,感谢这位师兄的帮助。谢谢!到此sift的FPGA实现已经完成了一大半的工作了。剩下的可以在dsp上实现这样简单点,也可以在FPGA上实现,我要做的是继续在FPGA上实现。加油吧!骚年!!
- SIFT--FPGA实现之幅值和幅角计算模块
- SIFT之FPGA实现--主方向计算模块
- SIFT--FPGA实现之降采样
- SIFT 极值点检测FPGA实现
- FPGA图像处理之SIFT特征提取
- FPGA图像处理之SIFT算法2
- FPGA开发之数据传输模块
- RobHess实现SIFT源码分析:sift.h和sift.c
- FPGA实现SIFT,全部使用FPGA实现直接生产描述子,全流水处理
- FPGA的SPI从机模块实现
- 实现FPGA配置C1101无线收发模块
- FPGA开发之时钟管理模块
- PGA系统设计原则和技巧之:FPGA系统设计的3种常用IP模块
- FPGA 那些事儿之异构计算
- FPGA 那些事儿之异构计算
- SIFT和SURF,及OpenCV实现
- SIFT Match 图像拼接 计算两幅图像的重叠区域
- SIFT算法计算原理
- 机器视觉之 ICP算法和RANSAC算法
- JW Player 空格控制播放暂停
- linux nexus3.0.1 jdk1.8 安装配置
- Android_androidstudio_Gradle Build Running特别慢问题
- shell函数
- SIFT--FPGA实现之幅值和幅角计算模块
- PHPStorm Replace in Path批量替换
- 一球从100米高度自由落下.每次落地后反跳回原高度的一半
- vi案例练习
- C语言
- JS~jwPlayer为js预留的回调方法大总结
- Linux 防火墙
- 解决JAVA通过JDBC连接Oracle数据库出现的问题
- checkbox在jquery版本1.9 以上用attr不可重复操作的问题【附解决方案】