收藏 分销(赏)

基于OpenGL ES的图像滤波算法实现及优化研究.pdf

上传人:自信****多点 文档编号:2015410 上传时间:2024-05-13 格式:PDF 页数:10 大小:1.86MB
下载 相关 举报
基于OpenGL ES的图像滤波算法实现及优化研究.pdf_第1页
第1页 / 共10页
基于OpenGL ES的图像滤波算法实现及优化研究.pdf_第2页
第2页 / 共10页
亲,该文档总共10页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第 49卷 第 11期2023年 11月Computer Engineering 计算机工程基于 OpenGL ES的图像滤波算法实现及优化研究常文斌1,2,牟明任2,贾海鹏2,张云泉2,张思佳1(1.大连海洋大学 信息工程学院,辽宁 大连 116023;2.中国科学院计算技术研究所 处理器芯片全国重点实验室,北京 100190)摘要:图像滤波算法广泛应用在机器学习、图像处理、图像识别等领域,在降低椒盐噪声、图像二值化、边缘识别和特征提取等方面发挥着重要作用。现有图像滤波算法虽然在 OpenCV 开源库中均有实现,但是在 Android平台的性能表现与其他平台相比仍存在较大差距。随着嵌入式平台

2、的高速发展,实际应用对嵌入式平台上滤波算法的性能要求越来越高。为此,从形态学滤波、盒式滤波、阈值滤波、压缩滤波、算术滤波等具有广泛应用场景的滤波算法入手,提出并实现针对 Android 平台设计、基于 OpenGL ES 的一系列高性能图像滤波算法。使用 OpenGL ES 计算着色器对算法进行并行加速,使用纹理对象进行访存优化,并在图像边界处理、图像数据类型和数据通信等方面进行深入优化,取得了较优的性能。将优化的图像滤波算法与开源 OpenCV 库中对应算法进行对比,实验结果表明,基于 Android平台使用 OpenGL ES接口的图像滤波算法整体性能明显优于 OpenCV 库中的相关算法

3、,且图像规模越大计算优势越明显,性能最大提升为 OpenCV库中对应算法的 110.018倍。关键词:OpenGL ES接口;图像滤波;嵌入式平台;计算着色器;图像纹理开放科学(资源服务)标志码(OSID):中文引用格式:常文斌,牟明任,贾海鹏,等.基于 OpenGL ES 的图像滤波算法实现及优化研究 J.计算机工程,2023,49(11):257-266.英文引用格式:CHANG W B,MU M R,JIA H P,et al.Research on the implementation and optimization of image filtering algorithm base

4、d on OpenGL ES J.Computer Engineering,2023,49(11):257-266.Research on the Implementation and Optimization of Image Filtering Algorithm Based on OpenGL ESCHANG Wenbin1,2,MU Mingren2,JIA Haipeng2,ZHANG Yunquan2,ZHANG Sijia1(1.College of Information Engineering,Dalian Ocean University,Dalian 116023,Lia

5、oning,China;2.State Key Laborary of Processors,Institute of Computing Technology,Chinese Academy of Sciences,Beijing 100190,China)【Abstract】Image filtering algorithms have wide applications in such fields as machine learning,image processing,and image recognition.They play an important role in reduc

6、ing salt and pepper noise,image binarization,edge recognition,and feature extraction.Although common image filtering algorithms are implemented in the OpenCV open source library,a significant gap in performance exists compared with other platforms on the Android platform.With the rapid development o

7、f embedded platforms,the performance requirements for filtering algorithms on embedded platforms have become increasingly high in practical applications.Therefore,starting with filtering algorithms with wide application scenarios,such as morphological filtering,box filtering,threshold filtering,comp

8、ression filtering,and arithmetic filtering,a series of high-performance image filtering algorithms designed for the Android platform based on OpenGL ES are developed and implemented.OpenGL ES calculation shaders are used to accelerate the algorithm in parallel,using texture objects for memory optimi

9、zation,and in-depth optimization in image boundary processing,image data types,and data communication is conducted.This approach resulted in better performance.The optimized image filtering algorithm is compared with the corresponding algorithm in the open-source OpenCV library.The experimental resu

10、lts show that the overall performance of the image filtering algorithm based on the Android platform using the OpenGL ES interface is significantly better than the performances of the relevant algorithms in the OpenCV library.The larger the image size,the more obvious the computational advantage.The

11、 maximum performance improvement is 110.018 times that of the corresponding algorithm in the OpenCV library.基金项目:国家自然科学基金(61972376,62072431,62032023)。作者简介:常文斌(1999),男,硕士研究生,主研方向为并行计算、高性能计算;牟明任,硕士研究生;贾海鹏(通信作者),高级工程师、博士;张云泉,研究员、博士生导师;张思佳,博士。收稿日期:2023-04-04 修回日期:2023-07-27 Email:图形图像处理文章编号:1000-3428(20

12、23)11-0257-10 文献标志码:A 中图分类号:TP3912023年 11月 15日Computer Engineering 计算机工程【Key words】OpenGL ES interface;image filtering;embedded platform;calculation shader;image textureDOI:10.19678/j.issn.1000-3428.00673370概述 图像滤波是图像处理领域中具有广泛应用场景的算法,主要应用于超声医学、航空航天、数字媒体、人工智能等领域。图像滤波可以起到降低椒盐噪声、图像二值化、边缘识别和提取图像特征的作用。常见

13、的图像滤波方法有形态学滤波、盒式滤波、阈值滤波、压缩滤波、算术滤波等。从实现原理来分析,各种滤波算法根据原始图像的像素状态,经过一系列不同的运算得到目标像素值。图像滤波算法的研究已经相当广泛,但是在实际应用中仍存在许多不足之处。例如,在 Android平台方面,虽然开源的 OpenCV 库已经提供了较全面的 图 像 滤 波 算 法,但 是 与 其 他 平 台 相 比,其 在Android平台的性能表现仍存在较大的差距。目前,还没有广泛应用的专门针对 Android 平台进行优化的高性能图像滤波算法库。随着移动终端和 Android 操作系统的发展和普及,面向多平台可移植嵌入式设备的高性能图像滤

14、波算法库亟待完善。虽然目前在 Apple 平台已有MPS、Core Image、Vision 等算法库,但是其仅支持Apple 硬 件 和 iOS 系 统,并 不 普 遍 适 用 于 Android系统。为进一步提高移动 Android 端及相关嵌入式平台上图像滤波算法的实际性能表现,本文提出一种专门针对 Android 端及其嵌入式平台进行优化的高性 能 图 像 滤 波 算 法。在 Android 平 台 上,基 于OpenGL ES 编程接口,利用 OpenGL 纹理对象和缓冲传递图像数据,通过计算着色器实现算法的并行优化,设计一种针对移动 Android端基于 OpenGL ES接口的优

15、化体系,实现并优化一系列滤波算法,以提升算法运算性能。1相关工作 1.1针对 OpenGL的相关工作OpenGL1是用于渲染 2D、3D 矢量图形的跨语言、跨 平 台 的 应 用 程 序 编 程 接 口,而 本 文 用 到 的OpenGL ES 3.22是 OpenGL的 1个子集,主要针对移动电话、手持设备、家电设备、汽车等嵌入式设备而设计的。研究指出,在移动设备上采用 OpenGL ES实现的视频滤波算法3,相比现有的 OpenCV 滤波算法库,在内存和功耗方面具有更大的优势,在算法性能方面也有显著提升。相关研究显示,面向 Android系 统 的 硬 件 设 备 对 OpenGL ES

16、有 更 加 友 好 的 支持4。然而,目前还缺少针对 Android 平台设计、使用 OpenGL ES 实现和优化性能较好的图像滤波算法。因此,上述研究为本文选择使用 OpenGL ES 编程接口来实现和优化图像滤波算法提供了有价值的参考。在 OpenGL的众多着色器中,计算着色器是一种用于通用计算的特殊着色器,其本身可以看作一种特殊的、单一阶段的管线,以更加充分地利用 GPU的计算能力5。目前,研究人员提出采用 OpenGL计算着色器实现矩阵乘法6。但是在使用计算着色器进行图像滤波计算方面的研究还较不足,为本文基于 OpenGL ES计算着色器的算法优化工作提供了一定的参考。相关研究指出,

17、在 OpenGL 中,纹理和缓冲的存储和访问方式非常适合在 CPU 和 GPU 之间高效地传输图像数据7-9。就纹理而言,在着色器内使用纹理坐标对纹理像素进行访问,实现像素级的计算和操作10。然而,在现有研究中,纹理主要被用于在片元着色器中对图像进行采样和处理11,例如利用纹理映射技术将纹理图像应用于几何图形中,以获得更逼真的渲染效果12。在计算着色器中使用纹理操作数据的研究相对较少。因此,在 OpenGL ES中,将纹理与计算着色器相结合,以实现更高效的并行计算和数据操作的研究具有一定意义。1.2针对滤波算法优化的相关工作目前,已经有相当一部分针对图像滤波算法进行优化的研究,例如,基于 NV

18、IDIA 公司的 GPU 采用CUDA 编程模型13对盒式滤波、高斯滤波进行并行优化14,基于 ARMv8 处理器,采用 SIMD 和汇编指令对图像滤波算法进行优化15。此外,研究人员通过引入 Graph-Waving 架构16,提升 SIMD 元件利用率,以有效提升算法性能。针对 SIMD 等指令级并行性和流水线的优化工作17-19都不同程度地提高其研究算法的性能。上述研究表明,通过并行优化方式可以显著提升图像滤波算法性能,有效提高图像滤波的处理速度和效率。然而,目前的优化工作大多都基于多核 CPU20或者基于 GPU,使用图形渲染方式进行优化。基于 Android平台,使用 OpenGL

19、ES计算着色器并行优化的研究相对不足。此外,还有相当一部分研究是对基于图形学的图像滤波效果进行优化21-23,并未对算法的运算效率和性能优化做更多的阐述。例如,相关研究在移动 Android 设备中将油画滤波算法通过 OpenGL ES图形渲染管线实现并进行优化24,取得较优的图像效果。但是,该类工作主要侧重于图形学效果的优化,对算法运算效率的提升并不显著25。也有研究从图形学的实现原理出发,对形态学滤波算法的并行实现进行研究26,取得了较高的计算精度和较优的图像效果。然而,在许多应用场景中,本文更加关258第 49卷 第 11期常文斌,牟明任,贾海鹏,等:基于 OpenGL ES的图像滤波算

20、法实现及优化研究注在满足一定精度要求的同时优化算法性能,以提高其在实际应用中的速度和效率。在插值和投影等优化算法中,查表法具有较好的优化效果27。这项研究为本文在阈值滤波算法中使用查表法提供了一定的参考。2算法原理 2.1线性滤波算法线性滤波是指由源图像某一像素点周围滤波窗口数量的像素值经过一系列的算术运算,得到最终输出图像像素值的滤波算法。线性滤波算法计算式如下:ddst(xy)=0 x kernel.width0 y thresh0其他(8)反 二 值 化(THRESH_BINARY_INV)计 算 式如下:ddst(xy)=0ssrc(xy)threshmaxval 其他(9)阈值截断(

21、THRESH_TRUNC)计算式如下:ddst(xy)=threshold ssrc(xy)threshssrc(xy)其他(10)阈值置零(THRESH_TOZERO)计算式如下:ddst(xy)=ssrc(xy)ssrc(xy)thresh0其他(11)反阈值置零(THRESH_TOZERO_INV)计算式如下:ddst(xy)=0ssrc(xy)threshssrc(xy)其他(12)自适应阈值滤波的 naive 实现示意图如图 3 所示。本文首先采用高斯滤波或盒式滤波将源图像(这里的源图像为灰度图)转换为均值图像;然后通过 src-mean 对源图像与均值图像做减法,再结合权重,自适应

22、地将源图像转换为二值化图像。此外,在算法的实现中,本文还引入查表法,提前计算灰度图(像素值为 0255)所有可能像素值的二值化结果,并将结果存储在 Tab 表中,通过查表法将均值图像的值与表的索引进行对比。对于二值化计算,本文只需要将对比成功表中的二值化结果直接存入输出图像中。该方法在处理大规模的图像像素数据下可以减少一部分计算量。算术滤波 naive算法实现了单通道图像(只包含一种颜色通道的图像)和三通道图像(R、G、B 图像)像素值的加权算术运算。通过 2幅相同尺寸图像上对应的像素点,将对应通道像素值的和、差、商、积算术运算作为目标像素点值。加权积和加权商算法计算式如下:ddst(I)=s

23、saturate(sscale ssrc1(I)ssrc2(I)(13)ddst(I)=ssaturate(sscalessrc1(I)ssrc2(I)(14)其中:sscale为权值;ssaturate将像素值限制在 0255之间。压缩滤波在 naive 实现中支持单通道和三通道这 2 种图像格式,支持将源图像像素值按照行和列压缩的 2种压缩方法。算法原理为求得当前行或列的像素最值、均值或者像素和,用所求值代替源图像的当前行或当前列,使图像一维化。图 4 所示为三通道图像数据按照求均值按行压缩以及三通道图像数据求和按列压缩示意图。本文通过压缩滤波将1个三通道图像变成 1个一维的三通道向量。图

24、 3自适应阈值滤波的 naive实现示意图Fig.3Schematic diagram of naive implementation of adaptive threshold filtering260第 49卷 第 11期常文斌,牟明任,贾海鹏,等:基于 OpenGL ES的图像滤波算法实现及优化研究在本文所实现的图像滤波 naive算法中,当算法处理到图像边界像素时,时常会出现超出图像边界的情况。如果不对边界进行处理,那么在访问这些位置时可能会产生越界操作。针对该问题,本文提出如图 5所示的边界处理方法。该方法包括默认边界、由用户指定的常数边界、用源图像同侧值填充的复制边界、用源图像边界

25、镜像像素值填充的镜像边界。3.2访存优化图像滤波算法本身具有较优的数据独立性、局部性和数据重用性的并行特征,适合在大规模的细粒度图形处理器 GPU 中进行处理。图像滤波算法按照计算和访存的特性可以大致分为数据无关算法和数据相关算法。数据无关算法是指在算法中,源图像各个连续的像素点通过各自单独运算获得目标像素值,各像素点之间没有关联,互不影响,如本文实现的算术滤波和固定阈值的阈值滤波算法。该类算法计算独立并且访存连续,具备良好的并行性。因此,本文对该类算法的优化重点在于提高单个像素点的计算效率、提高数据的访存以及对数据的并行计算效率。对于这类问题的访存优化,通过同时执行多个处理单元,采用批量读写

26、数据的方式可以极大程度地 提 升 访 存 效 率。在 CPU 向 GPU 传 递 数 据 时,OpenGL 支持纹理和缓冲 2 种大规模数据的存储形式。相比缓冲这种通用的存储形式而言,图像滤波算法对图像纹理这种结构化的存储形式更加友好。纹理存储形式也更加适用于计算海量数据的着色器。本文通过纹理来实现大规模图像数据在本地和着色器间的传递和操作,提高计算着色器对图像像素数据的处理效率。在着色器内部对图像纹理进行读取和写入操作的具体方法有 imageLoad()、imageStore(),其中imageLoad()方法的返回值类型是 vec4,在单通道图像数据中,本文尝试使用vec4数据类型将单通道

27、的数据向量化,以达到高效访存的目的。经过实验发现,imageLoad()方法在单通道图像数据中的返回值虽然仍是vec4类型,但是实际上该方法只支持单独像素单元的存取,在单通道数据中,并不支持使用其他通道。因此,计算着色器内的访存优化以更加合理的线程布局和纹理存取像素值为主的方式实现。数据相关算法是指目标图像中每个目标像素值计算需要依赖源图像中其他像素值参与的算法。例如,在计算目标像素值时,需要利用源图像锚点像素值周围一定范围内的邻域像素值作为卷积核的一部分,共同参与计算,从而得到目标像素值。本文所实现的形态学滤波、自适应阈值滤波和盒式滤波均为数据相关算法。该类算法的优化重点在于利用数据局部性原

28、理,减少对内存的频繁访问,提高访存,以提高算法的效率和性能。例如,更加充分利用 GPU的共享内存或纹理缓存从而减少数据传输和访问的延迟。本文所使用的实验平台采用的共享内存没有性能提升,其原因可能是该设备的 GPU 中没有共享内存硬件,也没有高速存储设备做支持。这一点在ARM Mali GPU 的开发者文档中得到证实28,Mali GPU 不为计算着色器实现提供专门的片上共享内存,而是使用系统的 RAM 实现相关功能。因此,对于该类算法的优化策略,本文使用纹理访问图像数据、充分利用数据局部性、合理分配线程、提高 Cache的命中率,进一步提升访存性能的优化策略性能。3.3计算着色器并行优化3.3

29、.1并行算法本文采用计算着色器对图像滤波算法进行并行优化,计算着色器属于无固定输入输出的着色器(可以自定义输入输出变量),是 OpenGL 中一种特殊的管线。这种特性使得它具有更强的灵活性,可用于执行各种通用计算任务,而不仅仅局限于图形渲染。本文所提算法采用纹理来存储数据,使得计算着色器在GPU上执行计算任务时可以并行地直接访问和处理图 4三通道图像压缩滤波算法示意图Fig.4Schematic diagram of three-channel image compression filtering algorithm图 5边界处理方法示意图Fig.5Schematic diagram of

30、boundary treatment method2612023年 11月 15日Computer Engineering 计算机工程大规模图像数据,无须频繁地访问全局内存,这种方式能有效发挥计算着色器的优势。在本文的工作中并行算法计算的核心是在计算着色器的众多工作组中执行,通过调用 gldispatchCompute()方法启动并发计算任务,将图像按照像素点分配线程,在 GPU上进行处理。在 GPU 中,全局工作组被划分为多个局部工作组,局部工作组的大小可以自定义,在每个工作组中的若干个工作项通过计算着色器进行运算和操作。二维工作组的划分示意图如图6所示。在计算着色器中,每个像素点在全局中的

31、位置坐标可由当前工作组的坐标、局部工作组大小和工作项坐标表示,即gl_GlobalInvocationID=gl_WorkGroupID*gl_WorkGroup Size+gl_LocalInvocationID。本文在计算着色器内全局的规划线程进行运算和操作。合理划分工作组大小可以在一定程度上有效提升算法性能。在划分工作组后,OpenGL的每个工作组都根据计算着色器的核心算法并行地执行相同的运算。所有的计算和操作均在计算着色器内完成。三通道图像并行算法的示意图如图 7 所示,pipeline 为仅有计算着色器的特殊管线,每个工作项均进入以计算着色器为核心的特殊管线中。在形态学滤波的并行算法

32、中,本文无须将图像整体按照行列拆分运算,而是同时开启图像像素点数量的工作项,以单个像素点为单位进行计算。在计算着色器中,本文提取当前锚点附近的滤波窗口大小的像素点,依次比较求出最值,再传入到目标图像中。针对单通道、三通道和四通道图像数据,本文分 别 采 用 OpenGL 自 带 的 GL_R、GL_RGB 和GL_RGBA向量化的方式来实现。由于OpenGL ES 3.2在计算着色器内仅支持布尔类型、32 bit整数和浮点操作,因此在 8U 图像中,相比单通道数据,三通道数据和四通道数据能更加充分利用存储空间,具有较优的优化效果。在盒式滤波的并行算法中,本文开辟图像像素点大小的工作项,将每个像

33、素点所在位置作为锚点,向周围扩展滤波窗口大小的像素点,在计算着色器内,将这些像素点求和,并乘以权值(计算均值时为1/(kernel.x*kernel.y)的大小,在计算完成后,将结果传到输出纹理坐标上,每个工作项均执行这一相同计算。在自定义阈值的阈值滤波并行算法中,本文将阈值和最大值(maxval)作为统一变量,通过统一变量绑定点传入计算着色器内,在计算着色器内判断当前像素值与阈值的大小关系,按照不同的阈值类型,将正确的目标值写入到输出图像所在的纹理坐标中。在自适应的阈值滤波中,本文将经过盒式滤波和高斯滤波计算后的中间矩阵 mean和源图像 src一起传入计算着色器中,用式(15)和式(16)

34、替代 naive实现中使用的查表法,减小 Tab 表所占用的内存空间和多次访存开销,将查表法的功能拆分重组,在计算着色器内使用如下公式精简计算,进一步提升算法性能:ddst=(ssrc-mmean+255)delta?maxval:0(15)ddst=(ssrc-mmean+255)delta?maxval:0(16)在算术滤波的并行算法中,本文针对 2 幅图像的像素值进行并行算术运算。为实现该目标,本文同时将 2幅图像的像素值绑定到纹理单元并传入计算着色器中,在着色器内部对 2 幅图像的每个坐标位置数据进行加、减、乘、除算术运算,各纹理坐标对应像素点并行地通过计算着色器,将计算结果传入至输出

35、图像纹理单元中。算术滤波算法是典型的数据无关算法,单独目标像素值的计算只需要 2 个源图像对应的坐标值和权值即可,不需要其他源像素值和中间计算结果的参与。这种算法对于并行访存和并行计算非常友好。本文优化算法在实验设备中相对于 OpenCV 开源库中对应算法的性能提高 7 倍左右。在压缩滤波的并行算法中,本文基于算法原理将源图像根据最值、均值以及求和压缩成一行或者图 7三通道图像并行算法示意图Fig.7Schematic diagram of three-channel image parallel algorithm图 6二维工作组划分示意图Fig.6Schematic diagram of

36、two-dimensional workgroup division262第 49卷 第 11期常文斌,牟明任,贾海鹏,等:基于 OpenGL ES的图像滤波算法实现及优化研究一列。在划分工作组时根据目标矩阵的情况(即一行或者一列)将工作组划分为对访存和计算更加友好的状态。例如,将矩阵压缩为一列时,本文将每行作为 1 个工作组,并将工作组大小设置为 height为 1 的块。本文采用这种方式在每个工作组中计算当前行的数据,从而减少重复的计算次数和访存操作。3.3.2边界处理优化在并行算法的边界处理中,由于每个线程都通过相同的计算着色器,因此并行算法将边界处理移至计算着色器中。在这种情况下,本文

37、只须在着色器中判断当前计算所需坐标像素是否在源图像内部。如果超出了源图像的边界,本文赋予其对应边界镜像坐标值或特定值等边缘填充值即可。该方案在一定程度上提升了并行算法的整体性能,减少处理图像边界所带来的大部分空间和时间开销。3.3.3数据类型优化在数据类型方面,本文所使用的 OpenGL ES 3.2目前支持 32 bit整数、浮点数和布尔类型数据,对于其他数据类型并不支持。本文提供除整数和 32 bit浮点数以下的其他数据解决方案:将 8UC1数据转换为 GL_R32UI 类 型,将 8UC3 和 8UC4 数 据 转 换 为GL_RGBA32UI 类型,目前本文已经安全地支持所有 常 用

38、的 832 bit 的 有 符 号 数 和 无 符 号 数 在OpenGL ES进行传输和运算。3.4数据通信优化在 CPU+GPU 的异构平台下,将数据在 CPU 和GPU 之间进行高效的通信是非常重要的,这也是本文优化的重点方向。为此,本文分别针对小规模数据和大规模数据提出不同的解决方案。在 小 规 模 数 据 方 面,OpenGL 提 供 统 一 变 量(Uniform)关键字,允许将这些数据作为全局变量通过 glUniform*()方法绑定到缓冲区。由于本文所使用的计算着色器具有在着色器和本地之间保持同步和共享数据传输的特性,因此将缓冲区作为存储和传输小规模数据的媒介。对于大规模数据,

39、采用 Uniform 需要依次绑定,这显然是非常低效的。为此,OpenGL 提供一致区块,将需要输入和输出计算着色器的大量全局数据映射在统一缓冲对象(Uniform Buffer Object,UBO)上,并通过绑定点使其相互对应。UBO 绑定数据示意图如图 8所示。本文在图像数据由 CPU 向 GPU 上传的过程和从 GPU 向 CPU 下载的过程中采用一致区块,在 GPU部分采用更利于计算着色器进行并行访存和计算的纹理存储形式。在 OpenGL ES中纹理也可以绑定在Uniform 绑定点上,本文经过纹理坐标在计算着色器内部访问图像像素点,完成与图像滤波相关的操作和计算。4实验结果与分析

40、4.1实验环境搭建本文实现的高性能图像滤波算法库在天玑 1200处理器上进行运行测试。该处理器包含 1个主频为3.0 GHz 的 A78 大核心、3 个主频为 2.6 GHz 的 A78中核心,以及 4 个主频为 2.04 GHz 的 A55 小核心。此外,处理器还搭载了基于 ARM Mali-G77 架构的Mali-G77 MC9 GPU。实 验 中 采 用 了 4.5.5 版 本 的OpenCV 库和 3.2 版本的 OpenGL ES 接口。具体的实验环境配置如表 1所示。4.2性能对比分析本文使用的所有源图像数据都是通过程序生成的随机数,使用随机数生成的图像数据能够消除真实图像数据的特

41、殊性和偏差,从而更准确地评估不同算法和优化技术的性能,同时确保了实验结果的可重复性,使得其他研究人员可以在相同条件下进行复现和比较,使用随机数生成的图像数据也使得实验更具普适性。因此,本文实验结果不仅适用于特定类型或特定领域的图像数据,而且具有一般性和广泛适应性,对于算法和优化技术的推广和应用具有重要意义。此外,本文调用了部分 OpenCV库中图像滤波算法与本文所提的优化算法进行性能对比。除非特别说明,图 8Uniform 绑定数据示意图Fig.8Schematic diagram of Uniform binding data表 1实验环境信息Table 1Experimental envi

42、ronment information实验环境硬件环境软件环境项目CPUArchFreqGPUGPU Arch编译器OpenCVOpenGL ES配置天玑 1200Cortex-A78,Cortex-A553.0 GHz1,2.6 GHz3,2.04 GHz4Mali-G77 MC9 GPUARM Mali-G77GCC7.54.5.53.22632023年 11月 15日Computer Engineering 计算机工程否则本文在调用这些算法时均使用了默认参数,以确保对比实验的公平性和一致性。本 文 实 现 的 形 态 学 滤 波 与 OpenCV 库 中morphologyEx()函数在

43、 8UC3(三通道的 8 bit无符号整数)的图像数据下进行对比。形态学滤波性能对比如图 9所示(33、55、77表示卷积窗口的大小)。本文将算法中 iterations参数设置为 1,得到最直观的性能差异。在不同规模图像中,本文实现的基于OpenGL ES的优化算法性能提升最大约为30.543倍,性 能 提 升 最 小 约 为 1.994 倍,平 均 性 能 提 升 约 为16.269倍。从图 9 可以看出,在 OpenCV 算法中,随着卷积窗口变大,相同计算规模下的算法耗时有不同程度增加,导致算法的整体性能下降。本文所实现的优化算法 OpenGL 在相同情况下并未显示出明显的性能差异,其原

44、因为在卷积窗口由 33 变为 77 时,计算单个目标像素值需要参与运算的数据由 9个(33)增加到 49 个(77),即每个目标像素值的计算需要增加 40 个数据。在 OpenCV 的算法中,整幅图像所有像素值的计算耗时会累积,从而导致算法的整体性能下降。相比OpenCV,本文实现的基于OpenGL ES优化算法将由增大滤波窗口所带来的负载均衡地分配到 GPU 的每个核心上(从算法的角度将负载平均分配到每个工作项上)进行并行执行,而不是在单个计算核心上累积计算耗时。因此,滤波窗口的变化对该算法性能的影响大幅减小。本文实现的盒式滤波优化算法与 OpenCV 的boxFilter()函数进行对比。

45、图 10所示为 8UC1(单通道的 8 bit无符号整数)盒式滤波性能对比。8UC1图像数据中性能最高提升34.425倍,最低提升 1.602倍,平均提升 15.299倍。图 11所示为 8UC3盒式滤波性能 对 比。8UC3 图 像 数 据 下 性 能 最 高 提 升110.018 倍,最低提升 3.903 倍,平均提升 42.150 倍。从图10和图11可以看出,本文实现的基于OpenGL ES优化算法在处理三通道数据时表现更明显的优化效果。这是因为在进行三通道数据运算时,本文进一步利用 OpenGL 中纹理的特性,对三通道图像中每个像素点上的 3 个 8U 数据进行向量化操作,使得数据访

46、问更加连续且高效。该方法将优化前使用 3条指令才能完成的工作减少到 1 条指令,显著提升算法的执行性能和效率。本文实现的自适应阈值滤波算法与 OpenCV 的adaptiveThreshold()函数性能对比如图 12所示,将对比 的 2 个 算 法 adaptiveMethod 参 数 均 设 置 为ADAPTIVE_THRESH_GAUSSIAN_C,threshold-Type参数均设置为 THRESH_BINARY。本文实现的基于OpenGL ES优化算法性能最高提升39.251倍,最低提升 2.125倍,平均提升 20.688倍。图 108UC1盒式滤波性能对比Fig.10Compa

47、rison of 8UC1 box filtering performance图 9形态学滤波性能对比Fig.9Comparison of morphological filtering performance图 118UC3盒式滤波性能对比Fig.11Comparison of 8UC3 box filtering performance图 12自适应阈值滤波性能对比Fig.12Comparison of adaptive threshold filtering performance264第 49卷 第 11期常文斌,牟明任,贾海鹏,等:基于 OpenGL ES的图像滤波算法实现及优化研究

48、在 本 文 实 现 的 算 术 滤 波 算 法 中,除 法(DIV,divide)算法与 OpenCV 的 divide()函数性能对比如图 13 所示。该算法性能最高提升 13.365 倍,最低提升 1.509倍,平均提升 7.437倍。在压缩滤波中,最值(MAX)、均值(AVG)以及求和(SUM)算法与 OpenCV 中的 reduce()函数的性能对比如图 14 所示。相比 OpenCV 中对应算法,本文 优 化 算 法 性 能 最 高 提 升 57.863 倍,最 低 提 升1.509倍,平均提升 29.686倍。从图 9图 14 可以看出,随着图像规模的增大,本文优化算法相对于 Op

49、enCV 中对应算法的性能提升也逐渐增大。这种性能提升的原因主要有:本文采用计算着色器将整幅图像的计算任务均匀分配到GPU 的多个核心上,能够更充分地利用 GPU 的计算资源,有效提高算法的并行性;本文通过纹理存储图像数据的方式减少对图像数据的频繁读写操作,从而减少访存延迟和数据传输开销,进一步提升访存性能。当图像数据由 4 096512 个增加到 4 0962 048 个 时,图 像 数 据 增 加 到 原 来 的 4 倍。在OpenCV算法中,处理这些数据所需的时间在单个核心上累积,导致大规模图像的计算时间呈倍数增加。本文优化算法能够将计算任务并行地分配到 GPU的多个计算核心上,该计算核

50、心同时处理这些计算任务,更充分地利用 GPU 的计算资源,使得性能提升逐渐增大。随着图像规模的增大,本文优化算法在并行性和访存优化方面的优势也变得更加显著。此外,OpenCV对应的算法出现了一些明显的性能下降点。这是因为在该实验中,本文按照从小到大的趋势分别设置了图像的长和宽。当图像的宽度从 2 160 个像素点减小到 512 个像素点时,因图像规模变小,相应算法的运行时间也会缩短。整体上,本文实现的基于移动 Android 端使用OpenGL ES 的图像滤波算法性能明显优于 OpenCV库中的相关算法。实验结果表明,本文实现的图像滤波算法进行的一系列优化手段是有效的。5结束语 本文实现针对

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 论文指导/设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服