基于FPGA的图像电子透雾(ISP Dehaze)
文章目录文章概要算法原理大气散射模型暗通道先验FPGA 定点化程序架构模块层次数据流图流水线说明代码实现顶层模块端口IP例化端口算法优势天空或云层伪彩或问题景物轮廓有位移或较粗重影问题全屏闪烁或随机噪点横纹问题注意事项文章概要电子透雾Electronic Image Dehazing是基于大气散射模型的图像增强技术旨在恢复雾霾天气下退化图像的清晰度和对比度。本文介绍一种基于 Dark Channel Prior暗通道先验算法的 FPGA 硬件实现方案采用三级流水线架构支持 1080p60Hz 实时处理固定延迟 11 个时钟周期。算法核心参数 W0透射率系数和 T0透射率下限可通过参数化配置灵活调节去雾使能信号支持帧消隐期动态切换避免画面撕裂。基于FPGA的图像电子透雾-开启前后效果视频演示请点击查看算法原理大气散射模型雾霾图像的形成可由大气散射模型描述I ( x ) J ( x ) ⋅ t ( x ) A ⋅ ( 1 − t ( x ) ) I(x) J(x) \cdot t(x) A \cdot (1 - t(x))I(x)J(x)⋅t(x)A⋅(1−t(x))其中I ( x ) I(x)I(x)是输入的有雾图像J ( x ) J(x)J(x)是待恢复的无雾图像t ( x ) t(x)t(x)是透射率0~1A AA是大气光强度。去雾的核心即从I ( x ) I(x)I(x)估计t ( x ) t(x)t(x)和A AA再反解J ( x ) J(x)J(x)J ( x ) I ( x ) − A ⋅ ( 1 − t ( x ) ) t ( x ) J(x) \frac{I(x) - A \cdot (1 - t(x))}{t(x)}J(x)t(x)I(x)−A⋅(1−t(x))​暗通道先验He 等人在 CVPR 2009 提出暗通道先验Dark Channel Prior在大多数无雾图像的非天空局部区域中总存在某些像素的至少一个颜色通道强度值极低即J d a r k ( x ) min ⁡ y ∈ Ω ( x ) ( min ⁡ c ∈ { R , G , B } J c ( y ) ) → 0 J^{dark}(x) \min_{y \in \Omega(x)} \left( \min_{c \in \{R,G,B\}} J^c(y) \right) \to 0Jdark(x)y∈Ω(x)min​(c∈{R,G,B}min​Jc(y))→0由此可将透射率估计简化为t ( x ) 1 − w ⋅ min ⁡ c ( I c ( x ) A ) t(x) 1 - w \cdot \min_{c} \left( \frac{I^c(x)}{A} \right)t(x)1−w⋅cmin​(AIc(x)​)其中w ww0~1为保真系数保留少量雾气以维持图像自然感。FPGA 定点化FPGA 实现中避免浮点除法透射率系数计算、除法、透射率下限钳位采用定点化处理具有纯布线无IP、零逻辑开销等优势。程序架构模块层次FPGA 去雾模块isp_dehaze由四部分构成isp_dehaze (顶层旁路, 9 2 11 cycles) ├── isp_dehaze_rgb_dark 暗通道提取 (2 cycles) ├── isp_dehaze_transmittance_dark 透射率计算 (3 cycles) ├── isp_dehaze_defogging 大气散射恢复 (6 cycles) └── isp_dehaze_rom_w0 ROM 查表 (1 cycle, 内嵌于 defogging)数据流图i_data ───┬──→ [RGB Dark] ──→ dark ──→ [Transmittance] ──→ T,dark_max ──→ [Defogging] ──→ dehaze │ 2 cycles 3 cycles 4 cycles │ │ │ └──→ [Bypass Chain] ──── _d1 → _d2 → ... → _d9 ────────────────────────────────→ [MUX] → o_data 9 cycles 2 cycles (sw_dehaze_latched)流水线说明Stage 1 — 暗通道提取2 cycles逐像素取 R/G/B 三通道最小值作为暗通道灰度值。第 1 拍计算min{R,G}第 2 拍计算min{Stage1, B}输出 3 通道相同的暗通道值{dark, dark, dark}。Stage 2 — 透射率计算3 cycles帧内逐像素计算透射率t r a n s m i t t a n c e 255 − d a r k × ( 255 − W 0 ) / 256 transmittance 255 - dark \times (255 - W_0) / 256transmittance255−dark×(255−W0​)/256结果钳位到T 0 T_0T0​下限。帧间采集暗通道最大值dark_max在帧尾fval 下降沿锁存并清零供下一帧 Stage 3 使用。Stage 3 — 大气散射恢复4 cyclesRGB 图像和透射率各经过 4 级打拍对齐后逐通道执行定点化去雾计算。大气光A d a r k _ m a x A dark\_maxAdark_max上一帧采集。当I × 255 A × ( 255 − T ) I \times 255 A \times (255 - T)I×255A×(255−T)大气光主导时 bypass 输出原像素避免负值。Stage 4 — 消隐期切换与输出2 cyclesi_sw_dehaze在帧消隐期i_fval0锁存确保切换发生在帧间。去雾路径9 cycles与旁路路径9 cycles延迟严格相等末级 MUX 选择后经 2 级输出寄存器统一打出。总延迟恒为 11 cycles两路径严格控制同周期、同相位。代码实现顶层模块端口module isp_dehaze ( input clk , // 像素时钟 input rst_n , // 异步复位(低有效) input i_sw_dehaze , // 去雾使能(消隐期锁存) input i_fval , // 帧有效 input i_lval , // 行有效 input i_dval , // 数据有效 input [23:0] i_data , // RGB888 输入 output o_fval , // 帧有效(11-cycle延迟) output o_lval , // 行有效(11-cycle延迟) output o_dval , // 数据有效(11-cycle延迟) output [23:0] o_data // RGB888 输出 );IP例化端口算法优势规避了其他家电子透雾算法发生的一些问题。天空或云层伪彩或问题景物轮廓有位移或较粗重影问题全屏闪烁或随机噪点横纹问题注意事项输入时序约束输入必须为逐像素连续视频流RGB888 格式fval/lval/dval 遵循标准消隐时序。i_fval0帧消隐期必须周期性出现这是 sw_dehaze 切换和 dark_max 帧间锁存的唯一窗口。若 fval 永久为 1去雾效果将异常。帧尾时 fval 下降沿之后至少 1 个时钟周期 dval 不有效确保 max_dark 锁存逻辑正确触发。首帧注意事项复位后第一帧dark_max 0大气光 A0去雾公式退化为 JI第一帧等效旁路输出。从第二帧起 dark_max 使用前一帧采集值正常。参数调优W0默认 128即 w0.50控制去雾强度W0 越大去雾越强但过高会导致天空区域颜色失真。典型范围 80~160。T0默认 96即 t_min0.375透射率下限防止浓雾/天空区域除法不稳定。T0 越小恢复越强但噪声放大T0 越大保护越强但去雾不足。DEVIDER固定 40962^12不可随意修改。若改为非 2 的幂次除以 DEVIDER 将需要完整除法器~200 LUT资源开销成倍增加。资源估算暗通道提取比较器 少量寄存器 50 LUT。透射率计算1 个 DSP488×8 乘法 约 100 个寄存器。大气散射恢复3 个 DSP4816×12 乘法每通道一个 约 200 个寄存器。ROM1 个 BRAM18256×12bit。旁路延迟链 MUX约 250 个寄存器。总计 400 LUT 4 DSP48 1 BRAM18资源开销极低。场景适用性暗通道先验假设非天空区域暗通道趋近于零。对于大面积天空、雪景、白墙等本身较亮的场景暗通道先验失效去雾效果减弱或出现颜色偏移。此类场景可考虑结合引导滤波或天空区域分割等增强策略。

相关新闻

手动改OpenCore配置有多容易翻车?一场与OCAT的实测对比

手动改OpenCore配置有多容易翻车?一场与OCAT的实测对比

手动改OpenCore配置有多容易翻车?一场与OCAT的实测对比 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore(OCAT) 项目地址: https://gitcode.com/gh_mirrors/oc/OCAuxiliaryTools 凌晨一点&#x…

2026/10/28 8:40:05 阅读更多 →
微信小程序中实现【自定义弹框 + H5 中间页唤起地图 APP】反面教材

微信小程序中实现【自定义弹框 + H5 中间页唤起地图 APP】反面教材

前言须知: 第一种【自定义弹框 H5 中间页唤起地图 APP】目前这篇演示的效果: 实现逻辑:点击位置 → wx.showActionSheet 弹出「高德、百度、腾讯」三个自定义选项 → 选择后跳转 web-view 页面 → 加载部署在业务域名下的 H5 中间页 → H5…

2026/10/26 15:22:22 阅读更多 →
ComfyUI 局部图像修复加速实战:Inpaint Crop 与 Inpaint Stitch 节点源码原理全解

ComfyUI 局部图像修复加速实战:Inpaint Crop 与 Inpaint Stitch 节点源码原理全解

ComfyUI 局部图像修复加速实战:Inpaint Crop 与 Inpaint Stitch 节点源码原理全解 【免费下载链接】ComfyUI-Inpaint-CropAndStitch ComfyUI nodes to crop before sampling and stitch back after sampling that speed up inpainting 项目地址: https://gitcode.…

2026/10/28 0:18:43 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/28 7:28:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/28 7:29:02 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →