2026年,FPGA毕业设计题目推荐:基于国产高云FPGA的实时视频去雾系统,暗通道先验算法怎么硬件化?

开放6 回答 3 浏览

我大四选毕设题目,想用国产高云FPGA做实时视频去雾,基于暗通道先验算法。但网上资料多是MATLAB仿真,硬件实现时导向滤波太耗BRAM,透射率计算也容易丢帧。求推荐具体硬件化思路:行缓冲怎么设计?透射率用查表法还是实时计算?有没有开源项目参考?毕设答辩时会被问哪些关键点?

分享:
  • 嵌入式新手2024

    暗通道先验的硬件化,核心瓶颈是导向滤波的BRAM占用和透射率的实时计算。先说行缓冲:你不需要把整帧存下来再算,常见做法是用FIFO做三到五行缓存,配合滑动窗口取局部最小值。高云的IP核里有Line Buffer的参考设计,别自己从头写FIFO控制逻辑。透射率查表法比实时计算更省逻辑资源,因为暗通道值和透射率的映射关系固定,提前算好存进ROM,输入暗通道值直接查表输出,延迟只有一拍。但查表法精度受限于量化位数,建议用8bit输入输出,实测效果和浮点计算差异不大。开源项目的话,GitHub上搜"FPGA dehaze"能找到几个基于Xilinx的工程,移植到高云需要改约束文件和IP核例化方式。毕设答辩重点:一是问你怎么处理边缘区域的暗通道误判,二是导向滤波的替代方案(比如用中值滤波近似),三是高云芯片资源占用率和功耗对比。你最好拿Matlab做一组对比图,展示硬件实现后的PSNR/SSIM下降在可接受范围内。另外,实时视频的帧率目标定在30fps还是60fps?这个会影响你的行缓冲深度设计。

  • 芯片新人

    行缓冲用双FIFO接力就行,别想着整帧存。透射率查表法,别实时算,BRAM留给导向滤波。答辩时老师大概率问:你暗通道算错了怎么办?准备好说用中值滤波兜底。

  • 码电路的阿明

    关于透射率计算,我建议你走查表法。理由很简单:暗通道值范围0-255,透射率t的范围0.1-1.0,你把每个暗通道值对应的t预先算好存进ROM,输入一来直接输出,延迟固定一个时钟周期。实时计算需要做除法或指数运算,在FPGA里开销大还容易产生流水线停顿。行缓冲设计上,高云的FPGA通常有嵌入式块RAM,你配成两个512×8的双口RAM做乒乓操作,一次处理一行数据,窗口大小设成15×15就够用。导向滤波太耗BRAM的话,有个偷懒方法:用快速双边滤波代替,效果接近但资源少一半。答辩时老师会盯着你的去雾效果对比图看,记得准备三组场景:浓雾、薄雾、正常光照,每组都要有原图、Matlab处理结果、FPGA处理结果的对比。最后问一句:你选的开发板是高云的哪一款?不同型号的BRAM数量差很多,直接影响算法裁剪方案的选择。

  • 新手村

    先说说答辩时最容易翻车的点吧:透射率下界设多少。MATLAB里你设0.1看着挺好,但FPGA里量化成8位整数后,暗通道值很大时算出来的透射率可能会低于0.1,输出就直接发黑。我建议你预先算好一张256深度的ROM表,把暗通道值从0到255对应透射率存好,下界直接在表里截断,比后加if判断省一个时钟周期。导向滤波这块,如果你选的高云芯片BRAM不够用,试下用快速中值滤波代替导向滤波做透射率细化,效果差一点,但资源开销能降三分之二。行缓冲别贪大,15×15窗口用两行FIFO加一个当前行寄存器就能做,不必整帧存。最后提醒一句:去雾效果一定要录视频对比,答辩老师不爱看截图,容易怀疑你是PS的。你手头的高云板子是晨熙还是小蜜蜂系列?不同系列的DSP数量差很多,影响你能否做实时伽马校正。

  • 数字电路新手

    我换个角度跟你说这件事。你选高云FPGA做暗通道去雾,本质上是在做一个资源受限下的近似计算,不是把论文里的公式原封不动搬进硬件。网上的MATLAB代码里,导向滤波每像素要算几十次乘加,高云的低端芯片DSP就那么几十个,跑VGA分辨率30帧根本扛不住。真正的工程思路是:把导向滤波拆成均值滤波和方差计算两部分,均值滤波用行累加器做,不用存整帧;方差计算用BRAM存局部统计量,窗口大小设成9×9就够,再大收益递减。透射率计算用查表法,这是标准做法,但要注意暗通道值需要先做一次开运算去噪,否则边缘区域透射率跳变太剧烈,去雾后天空会有光晕。行缓冲我推荐用高云IP核里的LineBuffer,配成两行深度512的FIFO加一个垂直方向累加器,配合滑动窗口取最小值。开源项目确实少,但你可以搜高云官方的视频采集参考设计,把去雾模块挂到VDMA后面,省去自己写DDR控制器的麻烦。答辩准备三组对比图就够了:浓雾场景看去雾强度,薄雾场景看色彩失真,高对比度边缘看光晕抑制。每个场景放原图和带光晕的失败图,再放你修好的图,老师会觉得你想得周全。另外,透射率地图最好也用彩色伪彩图展示,这是加分项。你现在的开发环境是gowin IDE还是第三方工具?如果是ISE风格不熟的话,建议先用ModelSim把查表法和行缓冲单独仿真通过,再上板。

  • 芯片爱好者小陈

    我理解你想把暗通道先验搬上高云FPGA这件事,但得先认清一个现实:MATLAB里跑通的东西,放到硬件上往往要砍掉一半的复杂度。你提到的导向滤波耗BRAM,本质是算法设计者没考虑过FPGA的资源约束。我的建议是,别把导向滤波当作必须完整实现的模块,而是把它拆成两个均值滤波的级联——先对暗通道图做一次均值滤波得到均值图,再用原图和均值图做差得到方差,最后用查表法得到透射率。这样BRAM只用于存储两行均值滤波的累加结果,而不是整帧的导向滤波系数。具体到高云器件,如果你用的是晨熙系列的GW2A系列,BRAM数量够支撑VGA分辨率下9×9窗口的均值滤波,但如果是小蜜蜂系列,窗口得缩到5×5。行缓冲这块,高云有官方的Line Buffer IP核,你直接例化两个深度为行宽的FIFO,一个存当前行,一个存上一行,配合两个寄存器就能实现3×3窗口的滑动取值。别自己写FIFO控制逻辑,高云的IP核已经处理了空满标志和读写时钟域同步,省下精力去处理透射率查表的ROM初始化。透射率计算我强烈推荐查表法,因为暗通道值的范围固定0-255,你把透射率公式t=1-wmin_dark中的w设为固定值0.95,然后预计算256个结果存进ROM,输入暗通道值直接输出,延迟一个时钟周期,不用做除法。开源项目方面,你可以在GitHub上搜"FPGA haze removal",有几个基于Xilinx的工程,但移植到高云需要把Xilinx的FIFO和BRAM原语换成高云对应的Gowin_PLL和Gowin_BRAM,约束文件也得重写。答辩时老师最容易问的点是:你怎么保证去雾后的天空区域不出现光晕?你的回答要抓住关键——在计算暗通道值时,先对输入图像做一次3×3的中值滤波,把噪点和边缘处的孤立像素抹平,这样暗通道图不会在天空和物体交界处出现剧烈跳变。另外,透射率的下界一定要设成0.1,否则天空区域会发黑。你手头的高云板子是哪个系列?这决定了你DSP48的个数,影响你是否能在透射率细化阶段加入伽马校正模块。

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

提问者

Verilog小白在路上查看主页

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

浏览「其他」

相关问题

同分类问答

提问建议

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

技术问答

问完之后的闭环

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

探索全站