逻辑电路初学者
同学,你的问题很典型,我提供另一个思路。基于特征点的方法在FPGA上并非不可行,而且可能更适合Zynq这种异构平台。你可以考虑一种混合架构:让PS(ARM核)负责运行轻量级的特征点提取算法(比如用NEON指令集优化的FAST角点检测),这一步虽然用软件,但ARM做这个效率不低。然后把特征点坐标和描述子通过AXI总线送到PL(FPGA逻辑部分)。PL的核心任务是做特征点匹配,这个可以用硬件并行实现,比如用汉明距离计算描述子相似度,并行多个比较器。匹配完成后,PL再计算全局运动模型(比如仿射变换的RANSAC或最小二乘拟合)。这样分工,PS做它擅长的非规整控制流任务,PL做它擅长的规整数据并行和定制计算,能最大化利用Zynq优势。对于流水线,一定要把运动估计和补偿解耦成独立阶段。运动估计模块输出变换参数后,补偿模块(负责像素重采样)可以流水线处理。为了低延迟,可以用行缓冲(line buffer)技术,不必等整帧光流算完,算出一部分运动矢量就启动补偿,实现准逐行的处理。定点化方面,运动模型参数用高精度定点(如Q8.8),像素计算用较低精度(如Q2.5)即可。最后提醒,先做720p的demo,再扩展到1080p,一步步来。
