APP下载

基于FPGA的视频自适应Sobel算法设计与实现

2024-11-11王善斌徐馨袁文浩

科技创新与应用 2024年32期

摘" 要:该文首先对标准Sobel算法进行分析,然后针对算法在其他方向边缘检测效果不好和阈值需要人为设定等不足对算法进行改进和优化。该设计采用FPGA作为硬件平台,利用其并行处理能力,对Sobel算法进行硬件加速,使其能够自适应地处理不同分辨率和帧率的视频流。

关键词:Sobel算法;双线性插值;FPGA;自适阈值;硬件加速

中图分类号:TP301" " " 文献标志码:A" " " " " 文章编号:2095-2945(2024)32-0015-04

Abstract: This paper first analyzes the standard Sobel algorithm, and then improves and optimizes the algorithm to address the shortcomings of the algorithm such as poor edge detection performance in other directions and the need to manually set thresholds. This design uses FPGA as the hardware platform, and uses its parallel processing capabilities to hardware accelerate Sobel algorithm, making it able to adaptively process video streams with different resolutions and frame rates.

Keywords: Sobel algorithm; bilinear interpolation; FPGA; adaptive threshold; hardware acceleration

边缘检测是找出图像中物体的边界,这些边界通常表现为像素强度的显著变化[1-2]。通过边缘检测,可以提取出图像中重要的结构和形状信息,这些特征是图像分割和图像匹配的重要依据,这对于进一步的图像分析和理解至关重要[3]。但在一些实时性要求较高的领域(如运动目标检测、人脸识别和无人驾驶等)中,由于计算量大实时性高,一般的CPU和DSP难以满足视频的实时边缘检测要求。FPGA具有高效的并行处理能力,可以同时处理多个任务,实现视频图像数据的实时采集、处理和显示。

1" 常规Sobel边缘检测算法

Sobel算子是离散的微分算子,用来计算图像灰度的近似梯度。其计算公式如下

算子在计算邻域像素对中心像素的影响时,采用了距离反比的方式进行加权。这意味着相邻像素的影响取决于它们与中心像素的距离。这种加权方式有助于突出边缘信息。Sobel算子在计算像素间的距离时采用的是城市距离而不是欧氏距离。城市距离是指在标准坐标系上,两点之间的绝对轴距之和。在Sobel算子中,对角方向相邻像素之间的距离值为2。根据城市距离和梯度加权得出算子的3×3卷积核为

常规Sobel边缘检测算法存在着以下不足:一是水平和垂直方向的边缘检测效果还可以,但在其他方向则效果不佳;二是算子的阈值设定需要大量的实验和人为的经验,适应性不好。

2" 改进后的Sobel边缘检测算法

针对常规Sobel边缘检测算法的不足,从2个方面对算子进行改进。一是当内核为3时,卷积可能会产生明显的误差,为解决这一问题,把Scharr函数用在45°和135°方向上,水平和垂直方向仍然用Sobel算子。其计算公式如下

对上述改进算法进行MATLAB仿真如图2所示,从仿真图像中可以看出改进后的算法能够获得更多的纹理信息,边缘会变得更清晰,明显优于常规Sobel边缘检测算法。

3" 实时自适应视频边缘检测处理系统硬件设计

系统硬件框图如图3所示。系统把输入的四路视频信号进行分离,然后对输出的视频格式BT656进行解析,分离出视频数据同时产生行信号与场信号,在行信号与场信号的控制存储到DDR2中。从DDR2中读出视频数据进行双线性插值放大到显示器显示需要尺寸,把读出的数据格式从YCbCr 4∶2∶2转换到YCbCr 4∶4∶4。对转换后的视频数据进行Sobel边缘检测,然后通过HDMI输出显示。系统的功能框图如图4所示。

3.1" 四路视频解码模块

为了节约IO,TW2867将4个27 MHz的BT656信号复合在一个108 MHz的数据通道上传输。四路视频解码模块先把108 MHz数据分离到4个27 MHz上,分离后并不清楚通道对应情况。为了将分离出来的4路BT656对应4个物理通道,要提取分离出来的第一个27 MHz数据ID,这个ID是TW2867叠加上去的,和物理输入通道对应。知道了第一个数据对应的物理输入通道就可以推断出其他3个数据对应的物理输入通道,然后把分离出来的4路数据顺序调整正确即可。

3.2" BT656解析模块

对分离出来的视频流BT656格式进行解析,产生视频处理所需的场同步、奇偶场标志、行同步、DE等信号,并指示是不是PAL制式的视频。在这些控制信号的作用下把经过BT656解析模块处理后输出的视频YUV422格式存入DDR2中。

3.3" 双线性插值放大模块

的线性插值——首先在横向进行线性插值,然后在纵向进行线性插值,以此来实现图像的放大而不损失太多细节。这个过程可以通过FPGA的逻辑资源来实现,以并行处理的方式提高效率。此外,在FPGA中实现双线性插值放大时,通过在2个相邻的时钟周期之间进行插值,来实现一维信号的插值运算简化计算过程,提高处理速度。

3.4" 格式转化模块

为了获得更清晰的视频和图像边界,需要把视频格式从YCbCr 4∶2∶2转换到YCbCr4∶4∶4。为了简化算法和减少FPGA资源的消耗,采用简单像素复制的方式。将CbCr分开,并复制如:CbYCrYCbYCrY--gt;CbCrYCbCrYCbCrYCbCrY。

3.5" Sobel边缘检测模块

Sobel边缘检测的核心是Sobel算子在图像矩阵上进行滑动卷积[5]。图5为以目标像素为中心的3×3窗口,使用2个菊花链FIFO对像素缓存,通过行缓存可以实现行对齐,通过对各行缓存的读取控制,使各行的第一个像素对齐,可以实现列对齐。在3×3窗口的基础上,分别对4个方向的算子进行卷积得到4个方向的梯度,然后取4个方向的梯度的L2范数。

在计算自适应阈值时需要计算3×3窗口内像素的均值,计算公式为

计算公式中有除法运算,在FPGA会占用较多的逻辑资源。因此可以将除法运算转化为乘法运算和移位操作,从而减少资源消耗,还可以获得更快的运算速度。修改后的自适应阈值计算公式为

根据梯度和阈值的计算过程,采用并行流水线的方式设计,大大提高了视频的处理速度。

4" 系统仿真与测试

为了验证Sobel边缘检测模块的功能,需要编写适当的测试激励,这包括生成测试图像数据以及预期的边缘检测结果。测试的图像数据采用MATLAB中的图像数据,预期的边缘检测结果数据也采用MATLAB中生成的结果数据,以便于与MATLAB的仿真相比较。Sobel边缘检测的ModelSim仿真如图6所示。

从ModelSim仿真图中可以看出,通过输出结果与预期的边缘检测结果比较完全一致。Sobel边缘检测的RTL如图7所示。

在进行实时自适应视频边缘检测处理系统测试时,把视频头对准FPGA开发教材“猫猫”书,可以清晰地检测出“猫猫”的边缘及FPGA等字样的边缘。测试结果表明系统具有实时性好、处理速度快、边缘检测清晰等优点,实时自适应视频边缘检测处理系统如图8所示。

参考文献:

[1] LIU T,XU M,LIS X.MRS-Net+for enhancing face quality of compressed videos[J].IEEE Transactions on Circuits and Systems for Video Technology,2022,32(5):2881-2894.

[2] XU Y Z,WU T,CHARLTON J R.Small blob detector using bi-threshold constrained adaptive scales[J].IEEE Transactions on Biomedical Engineering,2021,68(9):2654-2665.

[3] 王善斌,李同山,张连俊,等.图像通信业务的现状与发展方向[J].电视技术,2006,30(4):80-82.

[4] 朱明达,辛鹏,常嘉颖.基于FPGA的九点插值自适应图像缩放算法设计[J].液晶与显示,2023,38(8):1076-1082.

[5] 高尚尚,刘海波,郭乃宏,等.基于自适应阈值边缘检测算法研究及FPGA实现[J].电子器件,2023,46(5):1314-1319.