verilog实现汉明权重_FPGA实现圆柱面投影变换

传统图像拼接的流程已经很成熟了,参考论文

Brown M , Lowe D G . Automatic Panoramic Image Stitching using Invariant Features[J]. International Journal of Computer Vision, 2007, 74(1):59-73。

07年之后图像拼接的发展参看https://www.zhihu.com/question/34535199/answer/135169187

虽然图像拼接方向不断在发展,但是大部分都是建立在单应性矩阵的基础上。Opencv里面实现了完整的传统图像拼接流程。如果要自己实现图像拼接,有两种途径:

1.相机位置不固定,这时候图片之间的外参是不断变化,需要从sift或者orb特征点检测做起。

2.相机位置固定,这时候图片之间的内外参都是不变的。因此在视频图像拼接中,没有必要对没传进来的图像都进行特征点检测和匹配,这样反而浪费了许多时间。可以使用固定内外参的原因也可以参照这篇论文。

Suk J H , Lyuh C G , Yoon S , et al. Fixed Homography-Based Real-Time SW/HW Image Stitching Engine for Motor Vehicles[J]. ETRI journal, 2015, 37(6):1143-1153.

如果相机位置固定,那么事情就变简单多了,只需要进行投影变换和图像融合两部就行了。关于全景图像的生成,opencv是这样实现的:

1.确定基准图像

2.基准图像进行圆柱面正投影确定基准图像在最终全景图上的左上角坐标(其实左下角,因为正投影是倒立成像的,所以全景图左下角坐标即是基准图左上角坐标)和右下角坐标。

3.圆柱面反向投影,生成两张坐标Xmap和Ymap,根据Xmap和Ymap进行双线性插值,得到最终的投影图像。

4.其他图像按照各自的内外参也进行正投影和反投影,得到投影图像、左上角坐标和右下角坐标。

5.根据每幅图像在全景图像不同的坐标,采用合适的方法进行图像融合。

整个过程可以参照下图:

08e6c8e2c1ec197714980239400e628c.png

理解原理再来进行FPGA实现。

1.投影变化得到的坐标点、内外参数作为输入;

2.输出是双线性插值所需要的地址表和权重表。

原理参照:https://blog.csdn.net/zhaocj/article/details/78829736

Opencv和Verilog代码:https://github.com/mhhai/ImageStitchBasedOnFPGA

0bb083de7f0015539195e9c69f3e67bc.png

8c9acc14341ac339fcf423c485f94441.png

仿真结果表明是一样的。

dbf65ade8ed5fd4d187b43aa3d2bf715.png

由于Z的值在0.98~0.99之间,这个除法就没有做。

其他:

1.计算sin和cos函数:最好使用IP核,更灵活一些。

2.需要用到定点数乘法。

3.代码会不断完善。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值