我们团队今年用安路FPGA做实时视频去雾,暗通道先验算法搞到透射率细化这步卡住了。网上教程都说用软抠图效果好,但软抠图要解大型稀疏矩阵,FPGA根本跑不动。导向滤波虽然硬件友好,但窗口大小选不好容易过平滑或者有光晕。想问下各位大佬,在安路FPGA这种资源有限的平台上,透射率细化到底用哪种方法更实际?导向滤波窗口选多大能在效果和资源之间取得平衡?有没有具体的BRAM和DSP占用数据可以参考?
2026年FPGA大赛用安路FPGA做实时AI去雾,暗通道先验算法中透射率细化用软抠图还是导向滤波更省资源?求具体对比
4 个回答

导向滤波吧,软抠图在FPGA上解稀疏矩阵就是给自己挖坑,BRAM吃光时序还过不了。安路这级别直接上窗口半径4~7的导向滤波,光晕压得住,资源也稳。你们现在用的暗通道窗口是多大?

个人感觉你这个情况导向滤波是唯一实际的选择,软抠图那套在FPGA上硬解稀疏矩阵基本是伪命题,尤其是安路这种资源偏紧的平台,光存矩阵就得吃掉大量BRAM,DSP还得做浮点运算,时序大概率崩。导向滤波的问题在于窗口半径选大了确实会过平滑,但你做的是实时视频去雾,人眼对帧间连续性敏感,过平滑反而比闪来闪去的光晕更讨喜。建议窗口半径先试4到7,具体得看你们输入分辨率。如果是1080p,半径4大概能压住DSP用量在30个以内,BRAM在20块左右,安路的PH1A系列应该扛得住;如果分辨率更高,半径降到3也行,牺牲一点边缘保持效果换资源余量。另外有个小技巧:导向滤波的均值滤波那步如果拆成两次一维积分,能省不少DSP,但要注意边界处理。你们现在暗通道窗口选的是多少?这会影响透射率图的低频特性,跟导向滤波窗口得搭配着调。

说个跟大多数教程不同的观点:别死磕透射率细化,先看看你们暗通道去雾后透射率图本身的噪声水平。如果暗通道窗口选得够大,透射率图其实已经挺平滑了,导向滤波窗口半径3到5就能收掉残余的块状感。软抠图在FPGA上确实不现实,别被论文里的PSNR数据骗了,实时系统看的是人眼主观效果和资源占用。建议先拿安路的EDA工具跑一下导向滤波的RTL级资源评估,半径从3开始往上试,BRAM和DSP占用数据在综合报告里直接看,比网上问的准。你们目前的目标帧率和分辨率是多少?这直接影响窗口上限。

其实你们纠结的点可能偏了——透射率细化这一步,在安路FPGA上真正吃资源的不是算法本身,而是数据搬运。软抠图要解稀疏矩阵,BRAM和DSP确实扛不住,但导向滤波的问题也不止窗口大小。我建议你们先别急着定半径,而是把整个去雾流水线的数据流画清楚:暗通道图、透射率图、导向图这三者在帧缓冲里怎么存、怎么复用。安路的PH1A系列内部BRAM容量有限,如果每帧都要存一幅完整的透射率图再做滤波,BRAM很快见底。常见做法是改用行缓冲流水线,只缓存几行数据,这样导向滤波窗口半径反而能放宽到5甚至7,因为BRAM压力不在窗口大小上,在行缓存深度上。你们现在暗通道窗口选的是15还是更大的?这决定了透射率图的低频特性,如果暗通道窗口够大(比如31×31),透射率图本身已经比较平滑,导向滤波半径3就够,光晕和过平滑的平衡点好找。另外注意安路EDA工具里导向滤波的RTL实现,均值滤波那步用积分图还是滑动窗口,积分图对DSP友好但多占BRAM,滑动窗口反之。建议你们先跑个简单testbench,对比两种实现方式的资源报告,比网上问数据准。你们目前目标帧率是60fps还是30fps?这直接影响行缓存深度的选择。
发表回答
登录后可在本页底部提交回答