2026年FPGA大赛用国产高云FPGA做实时图像去雾,暗通道先验算法硬件加速怎么实现?

开放6 回答 33 浏览

我今年大三,准备参加2026年FPGA大赛,选题是实时图像去雾。想用国产高云FPGA做,但暗通道先验算法里求最小值窗口和透射率估计的计算量很大,PL端资源有限。请问怎么设计流水线架构来加速?需要用到行缓存和双端口RAM吗?还有高云FPGA的DSP单元够不够支撑浮点转定点优化?求有经验的学长分享具体实现思路和资源占用情况。

分享:
  • 逻辑电路爱好者

    行缓存是必须的,高云的BRAM不算多但做个两行缓存还是够的。暗通道求最小窗口其实不用全窗口并行算,你可以用移位寄存器加比较树,把3×3窗口的9个像素逐级比出最小值,这样流水线很深但每个时钟都能出一个结果。透射率估计那步的除法用查找表查倒数再乘,定点化后DSP只用两三个就够了。导向滤波用均值滤波近似,别用原版迭代,那样资源直接炸。高云DSP48E1的复用技巧就是先算乘法再截位,别纠结浮点了。你打算用哪款具体型号的高云?不同型号BRAM差挺多的。

  • 数字系统入门

    先说个容易踩的坑:很多同学一上来就想把整帧图像存下来再算暗通道,那BRAM肯定爆。正确做法是只缓存两到三行,配合下沉窗口滑着走。你选的暗通道先验其实比深度学习模型好做加速,因为运算规律性强。我建议你把工程拆成三级流水:第一级做最小值滤波,第二级算透射率并做导向滤波的均值部分,第三级做大气光估计和去雾恢复。大气光估计别用全局排序,太费资源,改成在暗通道图上找前0.1%像素点然后取原图对应位置的均值,用阈值比较器加累加器就能实现,完全不用排序。定点化方面,高云FPGA没有硬浮点,所以所有运算必须转成Q格式。透射率公式里的减法、除法都可以用查找表和移位近似,误差控制在1%以内人眼看不出区别。导向滤波我建议你用盒式滤波加一次减均值操作,替代原来的梯度下降迭代,这样流水线几乎不增加额外延迟。资源占用上,如果选高云的GW2A-55,大概能用掉40%的LUT和60%的BRAM,DSP用七八个,足够跑1080p@30fps。你用的摄像头接口是MIPI还是DVP?接口类型会影响输入端的时序设计。

  • FPGA萌新上路

    补充一个你可能没考虑到的风险:大赛评审很看重可复现性和文档完整性,所以不要只闷头调代码。你可以在GitHub上找开源的C模型先验证算法精度,再对着RTL结果做逐像素比对。高云IDE的在线逻辑分析仪叫GOWIN Analysis,习惯用Vivado的人刚上手会觉得难用,建议提前花一周熟悉它的触发和采样设置。另外暗通道去雾有个经典问题:天空区域会过饱和,你可以在透射率估计那步加个下限阈值,设成0.1到0.2之间,用寄存器配个参数就行,这样调试时不用重新综合。如果你们组有两个人,一个人写C模型和MATLAB对比脚本,另一个人写RTL和约束,效率会高很多。高云官方论坛有个技术支持的板块,遇到BRAM时序不收敛的问题可以直接去问,他们回复挺快的。

  • 数字IC萌新

    行缓存按两行算,别贪多,高云BRAM就那么点。窗口滑动用移位寄存器加比较树,一个周期出一个结果,流水线深度换吞吐很划算。DSP48E1复用乘加结构,定点化后透射率查表近似,误差人眼看不出来。你打算用高云的哪款型号?不同系列BRAM和DSP数量差挺多的。

  • 电子爱好者小李

    个人感觉你完全不用怕DSP不够。暗通道先验最吃资源的是最小值滤波和导向滤波,但这两块都能用纯逻辑加少量DSP搞定。最小值滤波用比较树,9个像素逐级比,一个DSP都不用。导向滤波简化成盒式均值滤波,只保留减均值那步,乘法和除法用查找表加移位近似,DSP只用两三个做最后的乘累加。定点化时注意透射率公式里的减法,给大气光值留够位宽,比如用Q8.8格式,误差控制在1%以内。流水线分三级就行:第一级读行缓存算暗通道,第二级算透射率并缓存,第三级做去雾恢复加输出。高云的IP核生成器里有个FIFO可以直接当行缓存用,省得自己写双端口RAM的时序。唯一要小心的是大气光估计,别用全局排序,改成找暗通道图前0.1%亮度的像素点再取原图均值,用阈值比较器加累加器就能实现。

  • 单片机玩家小刘

    说个你可能没注意到的细节:暗通道求最小值窗口时,很多人习惯用3×3窗口全并行比较,但高云FPGA的LUT资源其实比BRAM紧张,全并行会吃掉太多逻辑单元。一个省资源的做法是用一维滑动窗口加行间缓存——先对每行做一维最小值滤波,存两行结果后再对列做一次一维最小值,等效于二维窗口。这样每个时钟只需要比较三个数,组合逻辑深度也浅,时序更好收敛。透射率估计那步的除法,如果直接用LUT查倒数再乘,注意查表地址位宽要够,否则天空区域会过饱和。你可以把透射率结果限幅在0.1到0.9之间,用寄存器配个阈值,调试时不用重新综合。导向滤波简化成均值滤波后,记得做一次边缘保护:在均值结果和原图之间做个加权平均,权值用梯度信息控制,这样去雾后细节不会糊。高云IDE的在线逻辑分析仪GOWIN Analysis触发条件支持边沿和计数,建议你设个帧同步信号做触发,抓第一帧数据验证流水线时序。你目前是用高云的哪个开发板?不同板子带的SDRAM带宽不一样,可能会影响行缓存的刷新策略。

登录后可在本页底部提交回答

提问者

递归小菜鸟查看主页

描述场景与已尝试方案,更容易获得有效解答

浏览「其他」

相关问题

同分类问答

提问建议

  • 标题写清核心疑问,避免「求助」「请问」等空泛用语
  • 正文补充环境、版本、报错信息或截图
  • 先搜索本站是否已有相近问题,减少重复提问
  • 若与课程相关,请标明课时或章节便于讲师定位

技术问答

问完之后的闭环

  • 关联课程精学高频问题往往对应章节,建议回到课程补基础。
  • 产出与互助解决过程可写成笔记,帮助后续同学。

探索全站