基于CUDA的Scharr算子并行化研究

known 发布于 2025-08-25 阅读(469)

摘 要:传统边缘检测算子采用逐行求梯度的方法顺序进行,遇到图像尺寸大或计算速度高效时,较难胜任这类计算密集度高的需求。文章从并行化角度对Scharr算子进行设计,采用CUDA语言对二维数据并行计算上进行算法优化,提出了多线程块偏移计算的设计思路,同时采取流处理的方式缩短传输开销。实验结果表明,与传统Scharr算子相比,在7 000×7 000尺寸图像识别上呈现了高效的识别速度,加速比提高了300倍左右,有较高的应用价值。

关键词:边缘检测;Scharr算子;并行计算

中图分类号:TP391.4 文献标识码:A 文章编号:2096-4706(2024)16-0044-05

Research on Parallelization of Scharr Operators Based on CUDA

Abstract: Traditional edge detection operators use the method of seeking gradients row by row in order, which makes it difficult to meet the high computational density requirements of large image sizes or high computational speed. This paper designs the Scharr operator from the perspective of parallelization, optimizes the algorithm on two-dimensional data parallel computing using CUDA language, proposes a design idea for multithreaded block offset calculation, and adopts stream processing to reduce transmission overhead. Experiment results show that compared with the traditional Scharr operator, it exhibits efficient recognition speed in image recognition of sizes on 7 000×7 000, with an acceleration ratio increased by about 300 times, and has high application value.

Keywords: edge detection; Scharr operator; parallel computing

0 引 言

目前,人工智能的普及应用和发展成为技术领域的研究热点,基于Opencv库的使用和机器视觉技术的运用使得图像识别领域有广阔的研究空间。其中针对卷积层的卷积核来说,边缘检测算子就是其中对图像起到滤波信息提取作用,而图像特征提取是否充分影响后续识别精度,因此对边缘检测卷积算子的研究有利于提高对图像边缘信息特征的识别。

传统针对图像边缘检测算子有Canny[1-3]、Sobel[4-6]等一阶边缘算子,二阶边缘算子如拉普拉斯算子[7]、高斯拉普拉斯算子和高斯差分算子等。李浩谊等人基于改进的Scharr算法的海上舰船图像边缘检测[8],在传统Scharr的基础上对算子在方向进行改进,增加了0°、45°、90°和135°四个方向,提高了算子检测的完整程度。李浩谊等学者采用多方向Scharr的齿轮边缘检测与中心定位方法[9],增加到8个方向,用5×5算子模板进行检测,最终减小了噪声的影响。蒋洁琦等学者对表面弱边缘瑕疵检测算法及应用[10],结合力形态学开闭滤波,达到增强弱边缘的效果。林丽等学者提出了一种具有抗噪声能力的图像清晰度评价函数[11],增加到4个方向进行梯度检测,减小算法计算量同时提高了精度,获得理想的效果。

随着显卡的普遍应用,计算能力得到飞速提高大部分得益于显卡加速,在复杂计算中,针对算法中可并行的重复计算子过程考虑采用CUDA语言或Opencl等语言对CPU代码进行重新程序设计。以实现在高密集度计算上得到提升。如赵志建等学者提出了基于CUDA并行优化的矩阵相乘算法研究[12],有效提升了吞吐量,利用了共享内存的资源。采用共享内存可以降低延迟。本文采用CUDA框架优化Scharr算子从而提升性能。

1 Scharr算子介绍

该算子是在Sobel算子的基础上做了改进,实现了差异性的增强,因此二者的滤波原理是一样的。采用3×3卷积核对图像每个像素点进行运算,通过算子上权值来实现凸显像素之间的差异化。下面介绍x方向上的一阶Scharr模板。

y方向上一阶算子模板如下:

图像任意区域矩阵表示如下:

求梯度过程如下:

计算总梯度:

求阈值,总体上求出全像素图像上平均阈值作为判定像素是否为边界点:

其中∆x、∆y分别为水平和垂直两个方向灰度值的落差,e为图像全局范围内的最大落差。

2 Scharr算子计算流程

Scharr算子计算过程如:

1)对算子赋初值。

2)对原始的灰度图像外围添加一圈0,作为padding的填充,主要是考虑到作为3×3的卷纸算子来说,大部分处理集中在算子中心区域,对于图像边缘一圈的计算相对少,故而添加一圈padding填充,增大了卷积核的感受视野。

3)求取阈值T,从两个方向进行,如从x方向和y方向进行求取,求取过程以x方向为例:沿着水平方向逐行对相邻两个像素灰度值进比较,经过一轮比较即可比较出max差值和min差值,同时需要注意到虽然图像是二维呈现的,在循环便利中需要进行跨越一行偏移。

4)进行算子求梯度运算,由于数据是二维呈现的,在进行跨行偏移时,在局部范围内增设小循环窗口,如i,j窗口步长为3,即可获取到(x,y)当前位置的邻域范围内的3×3区域。

CPU伪代码如下:

3 使用CUDA设计

对CPU程序的并行设计流程如图1所示。

从流程,体现了CUDA并行程序设计的总体思路,考虑到充分利用数据的总线传送时间,采用常用的CUDA流技术,充分利用了传送数据时间,在传输数据的同时,开始了共享内存中计算任务。

主要寻求计算过程中,批量简单的操作进行改进,同时还要结合CPU-GPU数据传输开销综合设计,避免过多逻辑判断的原则。这都基于GPU硬件体系结构而决定,如图2所示

在CUDA体系结构中,一个Grid计算单元含有多个计算块block,每个计算块block。如示例中有6个block块,每个块含有4个thread线程。

访问如下:

下面从内存布局角度分析如图3所示。

由于共享内存的容量空间是有限的,需要对共享内存的数据做初始化,初始化之后可以让更多的线程同步__syncthreads()。

4 算法并行化设计

近年来显卡普遍运用到人工智能的各个领域中,与GPU有着并行计算单元,更适合处理计算逻辑少,大量并行计算任务,而CPU更适合于多任务进程计算,逻辑控制单元丰富,对于复杂的逻辑控制,更擅长。CUDA编程中CPU-GPU之间送数据也会占用大量的时间,如何处理好传送数据时间与核函数的计算时间是提升加速性能的关键,计算单元内部利用共享内存提高单元性能。

本文对CPU代码中两个部分进行流程改写,进行并行程序设计,伪代码如下:

5 并行开销

当图像较小时,虽然采用流式切片方式传送数据,但数据尺寸小,浪费在主板上时间会比单纯CPU代码耗时久。例如图像尺寸在500×500时,传输耗时较大,随着图像尺寸逐渐增大,计算与传输耗时相比,优势明显,获得速度提升。如表1所示。

从表1可以看出,小尺寸上计算耗时很小,大部分时间浪费在主板数据传输上,在大尺寸上,传输耗时也很大,主要在对原图进行水平切片,按切片进行传送子图,但计算耗时不大。示意图如图4所示。

6 实验分析

CP78ffb23fa79fe510a5e7dc295d40e7aef00989c877145c18fdc4c0f2eac7382fU配置如下:Intel Xeon CPU E5-2620,32 GB RAM。

GPU配置如下:全局内存8 GB,每block最多含1 024个线程,CUDA处理核3 840个。

为了测试不同尺寸的数据,采用OpenCV对原图进行尺寸放大,最大到7 000×7 000,测试加速比如表2所示。

从表2可见在小尺寸上加速不明显,由于传送耗时和资源加载开销,导致总体加速比并不理想,在大尺寸上表现较好,充分利用了流与计算单元荷载。

7 实验效果

如图5所示,Scharr过滤结果能够清晰分辨出纹理走向,相比Sobel体现出来了检测点附近的权重值较大,从而中心点邻域点对最终处理起到了增强的效果。Scharr过滤算子对于边缘模糊的情况很适合使用。

8 结 论

本文采用CUDA对传统的CPU程序进行设计优化,提出了基于CUDA的Scharr检测研究。研究从分析Scharr程序开始着手,通过切片法,将整个图切成不同的子图流式发给GPU,对于小尺寸来讲加速比并不理想,主要是时间耗费在资源初始化开销方面上。对于大尺寸图像来说,由于采取了分片流式并行计算,充分利用了流在同一时间传输和计算同时进行的优势,充分利用了GPU线程资源,同时也还原了Scharr算法。今后考虑在融合多方向模板去进一步优化Scharr算子本身,在算法精度提高方面进一步研究。

参考文献:

[1] 李平阳,孙志毅.一种提升Canny算子的自适应边缘检测方法 [J].太原科技大学学报,2013(3):171-174.

[2] 马新星,徐健,张健.一种基于自适应Canny算子的舰船红外图像边缘检测方法 [J].红外,2013(7):25-30.

[3] 汪宗洋,王煜,朱硕.基于改进Canny算法的边缘检测技术应用及发展趋势 [J].信息通信技术与政策,2023(8):90-96.

[4] RAKESH R,VINAY A. Edge Detection Using Guided Sobel Image Filtering [J].Wireless Personal Communications,2023,132(1):651-677.

[5] 朴思儒,李彬,张赫,等.基于多方向扩展Sobel加权算法的合作目标检焦方法研究 [J].机电工程术,2023(5):131-134.

[6] 薛文格,邝天福.基于Sobel算子和灰色关联分析的图像边缘检测 [J].楚雄师范学院学报,2023(3):135-140.

[7] LUIS J P D,REYES E G. Analysis of a fire Extinguishing Model with a p-Laplacian Operator and with Non-Linear Advection and Reaction [J/OL].Physica Scripta,2023,98(8)[2024-01-09].https://iopscience.iop.org/article/10.1088/1402-4896/ace08c.

[8] 李浩谊,马春庭.基于改进的Scharr算法的海上舰船图像边缘检测 [J].舰船电子工程,2019(3):103-106.

[9] 李浩谊,马春庭,唐秀媛.多方向Scharr的齿轮边缘检测与中心定位 [J].工具技术,2019(2):130-133.

[10] 蒋洁琦,杨庚,刘沛东,等.表面弱边缘瑕疵检测算法及应用 [J].计算机技术与发展,2019(5):142-147.

[11] 林丽,李诗云,陈健.一种具有抗噪声能力的图像清晰度评价函数 [J].重庆邮电大学学报:自然科学版,2022(2):223-233.

[12] 赵志建.基于CUDA并行优化的矩阵相乘算法研究 [J].智能计算机与应用,2022(11):192-196.

标签:  算子 

免责声明

本文来自网络,不代表本站立场。如有不愿意被转载的情况,请联系我们。

iidomino cuppor