基于 FPGA 的自适应阈值边缘检测算法优化与实现
成映彤 王越宗 袁超 梁诗淇 杨曦晨
天津职业技术师范大学 300350
引言
边缘检测是常用的机器视觉技术之一,主要用于工业领域中针对产品缺陷及自动车辆中关于障碍物的识别。传统的 Canny 算子算法存在人工设置高低阈值情况下的漏检与错检问题,尤其在光照不均匀且物体表面存在较强反光特性的场最下更为明显,在光照强度波动范围达 30% 时会产生约 15% 的漏检率。除此之外,在工业生产线上也有可能产生废品。而对于 FPGA 硬件平台来说,由于浮点运算耗费大量硬件资源、一个时钟周期只能计算一次的低效处理速度以及LUT使用了 60% 以上,实际工程项目的只有根据不同类型的车辆进行硬编码、无法灵活切换的弊端。
本方案采用的是直方图统计加峰谷分析的办法进行自适应 Canny 阈值,在 FPGA 中采用定点化、并行流水线的方法来实现鲁棒的边缘检测。主要特点如下 :(1) 在硬件上能够实时完成阈值的计算,并不需要软件参与 ;(2)16 位定点化时权衡资源和精度 ;(3) 适用于各种复杂情况下的鲁棒设计。从实验的结果可以看出这种方法具有优势并且能符合工业及车用的严格要求。
1 自适应阈值算法优化
1.1 算法原理与流程
基于Canny 算法框架,引入自适应阈值调节机制,流程如下:
5×5
( Φ0=1.4 ),离散化后归一化( ΣG(x,y)=1 ),转为Q4.12 定点数避免浮点运算;2. 梯度计算:通过Sobel 算子求解X/Y 方向梯度,梯度幅值和方向分别为:

3. 自适应阈值生成:(1)直方图统计:遍历图像像素,统计 0-255 灰度值的像素分布,存储于 BRAM 直方图缓存;(2)峰谷分析:基于Otsu 算法原理,寻找灰度直方图的峰谷值,自动计算高阈值
4. 非极大值抑制与边缘连接:沿梯度方向向上的值按照 0∘ 、 45∘ 、 90∘ 、 135∘ 4 个方向分别取领域内对应的像素,并且保留其中最大的值;大于阈值T_high 的点置为;小于等于T_low 且大于 T_high 的点,若与 T_high 连通也置为 1
1.2 算法优化策略
1.2.1 定点化转换
针对 FPGA 硬件特性,将浮点运算转为 16 位定点数(Q8.8 格式):
1. 梯度计算: Gx 与Gy 采用16 位定点数,平方和用32 位累加器存储;
2. 幅值近似:
通过8 段分段线性拟合替代开方运算,精度损失 <2% ,节省 60%DSP 资源;
3. 阈值参数: Thigh 与 Tlow 存储为 8 位整数(0-255),简化比较逻辑。
1.2.2 并行加速设计
1. 像素级并行:同一时钟周期处理4 个像素的梯度计算(水平 2× 垂直2 阵列);
2. 模块级流水线:将算法拆分为 “滤波→梯度 $$ NMS →阈值筛选”4 级流水线,每级延迟 ⩽ 6ns,满足 150MHz 时钟约束。
2 FPGA 硬件实现
2.1 整体架构
基于 Zynq-7020 平台,“预处理 + 核心检测”二级架构。
1. 预处理模块 ( 静态逻辑 ):(1)HDMI 输入解码,集成 MIPICSI-2 接口,可以把 BT.656 格式视频流数据转化为 24 位 RGB 像素流 ;(2) 灰度化 : 基于 Y=0.299R+0.587G+0.114B 公式,利用并行乘法器实现了一周期计算三个像素点,为减少像素点数量的变化,在 VxIO 模块采用引脚硬连线实现像素点数目不变方式。(3) 利用 5x5 卷积核采用移位相加的方法来实现高斯滤波运算,同时使用两个端口BRAM 保存每行最多4 个像素点的数据量不超过 20% 。
2. 测模块 ( 可配置逻辑 ):(1) 梯度计算单元为 4 路并行 Sobel 算子,完成梯度幅值、方向的计算 ;(2) 直方图统计单元 : 实时统计不同灰度值出现的次数,在 1080P/60fps 情况下,要求计数率达到27Mcount/s;(3) 自适应阈值单元: 通过状态机实现峰值、谷值的检测,再根据峰值、谷值求解出阈值值,一个时钟周期可更新一组阈值 ;(4)NMS 边缘连接单元 :8 个通道并行比较器完成8 个方向的边缘选。
2.2 关键模块实现细节
2.2.1 直方图统计单元
运用了“计数器阵列 + BRAM 缓存”的架构形式 : 用 250 个 8 位计数器并行统计每个灰度级的频次,时钟频率为 150MHz, 可以满足 27Mcounts/s 的要求 ( 即 1080P@60fps 的像素率 )。在每帧结束以后把计算的结果写入到 BRAM 中,在此之前,将计数器输出结果经过三级滑动平均滤波后降低高频噪声影响,滤波后的结果用来更新计数器的内容。
2.2.2 阈值计算单元
基于有限状态机(FSM)设计,包含 4 个状态:
S0(空闲):等待帧同步信号;
S1(读取直方图):从BRAM 读取灰度分布数据(256 个字节);
S2(峰谷分析):通过 32 个并行比较器寻找直方图峰值(频次最高的灰度值)与谷值(峰值两侧最低值);
S3(生成阈值):计算 Thigh= 峰值 ×0.5 Tlow=Thigh×0.4 , 输出至 NMS 模块 .
2.3 时序约束与资源消耗通过 SDC 文件配置关键路径:
1 create_clock -period 6.67 [get_ports clk] # 150MHz 时钟 2 set_input_delay 0.5 -clock [get_clocks clk] [get_ports data_in] Zynq-7020 资源消耗如表:


3 实验结果与分析
3.1 性能测试
测试环境:Xilinx Zynq-7020 开发板,输入含焊接反光、雨雾干扰的 1080P@60fps 视频流(自制数据集,1000 张图像),对比固定阈值方案( Thigh=100 Tlow=50 )与本方案。
3.1.1 非鲁棒性

3.1.2 实时性与资源

3.2 场景验证
3.2.1 PCB 表面划痕检测
在反光强度 5000-10000lux 的反光场景下,系统对 0.1mm 宽划痕的识别率达 98% ,误检率 2% ,单条产线年减少返工成本 180 万元。
3.2.2 车载夜间场景
CARLA 仿真环境中,夜间、雨天场景车道线检测准确率达 92% ,较固定阈值方案提升显著,满足L3 级自动驾驶ISO 26262 功能安全标准。
4 结论与展望
该文提出了根据直方图值自适应地调整阈值的方法,针对不同的场景,方法能获得相应的阈值大小 ; 对于较难处理的背景比较复杂的场合有较好的鲁棒性 ; 并且利用定点化并行化相融合的方法实现 FPGA 的快速部署,实验证明可以较好地保证精度、时延以及资源消耗等三者之间的平衡,在工业检测、车载场景有应用前景。
(1) 采用基于随机森林算法实现的光照分类阈值代替机器学习预测阈值,可降低阈值计算时间;(2) 移植到国产FPGA 上,减少对外购芯片的依赖。
参考文献:
[1] 余子健 , 马德 , 严晓浪 , 等 . 基于 FPGA 的卷积神经网络加速器 [J]. 计算机工程 ,2017,43(01):109-114+119.
[2] 靳波 . 基于 FPGA 实时图像边缘检测系统的设计与实现 [D]. 中北大学 ,2020.DOI:10.27470/d.cnki.ghbgc.2020.000164.
[3] 柯青林 , 张文涛 , 余英铨 , 等 . 基于 FPGA 的 8 方向 Sobel 自适应阈值边缘检测系统设计与实现 [J]. 现代电子技术,2022,45(24):92-97.DOI:10.16652/j.issn.1004-373x.2022.24.017.
[4] 陈士双 , 杨波 , 钱博文 , 等 . 基于 FPGA 的视频实时边缘检测系统 [J]. 软件导刊 ,2024,23(07):181-187.
资助项目:2025 年市级大学生创新创业训练计划( 项目编码:X2025100660110)