论文部分内容阅读
[摘 要]近年来随着计算机并行计算技术快速发展,数字图像处理技术也随之快速应用起来,人们开始对数字图像处理的效果要求越来越高。现在用的比较多的并行技术有三种,除了CPU并行技术和GPU并行技术外,用到最多的是异构平台CPU+GPU,它结合了前两种的优势。本文提出的C++AMP并行运算可以很好的提高计算机的处理效率。
[关键词]C++AMP;图像视频处理;技术研究
中图分类号:F276.44 文献标识码:A 文章编号:1009-914X(2018)45-0087-01
1 C++AMP基础概念
C++AMP作为一种新的GPU并行计算技术是对C++的一种扩展,模板类型是在进行并行时所需的。通过使用C++AMP创建不会过时以及可移植的应用程序,可以让那些适合并行计算的程序的运行速度显著提高。为了降低并行软件在开发上面的难度,为了避免在开发过程中的一些安全问题,C++AMP的开发者为我们提供了类型安全的泛型,它保证我们在使用的时候不会出现错误的数据类型。
C++AMP经历了CPU并行的发展过程,现在已经是CPU+GPU的异构并行阶段。C++AMP 和Visual Studio作为主流开发人员所需要的工具、库和框架,使得异构计算变得更加容易。基于这些,在图像处理方面会有极大的提高,这样以后人们就不会再面对长达几十甚至上百个小时的监控视频发呆,而是直接分析计算机给出的数据,当前画面中有多少人、都是谁、谁的动作可疑等。总之,接下来智能监控发展会很迅速。
2 Canny算子优化及其并行化
2.1 Canny算法优化
2.1.1 改进梯度幅值的计算方法
对于传统Canny算法来说,为了求图像梯度幅值,可以通过2*2邻域内的有限差分来计算。但是这种方法对噪音的要求很高,只要有一點检测出来的边缘效果就很差。改进的Canny 算法可以很好的解决这个问题。首先采用3*3邻域来代替2*2邻域,然后在x方向、y方向、45°方向和135°方向计算一阶偏导的差分,利用差分结果计算图像的梯度幅值。这种方式可以准确的定位边缘信息,得到非常好的处理效果,避免噪声带来的影响。
x方向的偏导数:
y方向的偏导数:
45°方向的偏导数:
135°方向的偏导数:
水平方向的差分为:
垂直方向的差分为:
像素的梯度幅值表示如下:
梯度方向为:
传统的边缘检测检测到的边缘信息比较模糊,我们可能会看到一个假的边缘。Canny算法采用3*3大小的邻域,沿梯度方向使用8方向的邻域对梯度幅值阵列M[x,y]中的所有像素插值,边缘点就是幅度的极大值点。
2.2 C++AMP处理流程
现今比较流行的有CUDA、OpenCL以及C++AMP。在众多并行算法中,C++AMP有很好的移植性,可以将写好的并行算法移植到不同的硬件平台下,而且代码不会过时,因此它被更多的程序开发人员使用。
为了实现图像的并行运算,我们在C++AMP平台下进行操作,实验过程用的是并行流水线,它是通过异步代理库和PPL来实现的。它可以同时处理4幅图像,以并发序列的方式将各个流水线阶段作为独立的并发代理运行。加载或获取图像调整图像大小图像简化及Canny边ss缘检测显示图像图1。
2.3并行Canny算子优化
传统的Canny算子由于其单纯采用高斯滤波器进行滤波,导致在去燥和边缘细节的不稳定,很容易造成高频边缘丢失。以前在CPU上运行时,速度受限,采用四方检测使图像漏掉较多细节,导致边缘不清晰,而且CPU上串行执行的算法速度较慢。
针对以上的传统算子的缺陷,基于C++AMP的改进Canny算子可以解决以上的不足。在GPU上综合使用高斯滤波和图像直方图,避免高频边缘丢失,采用3*3邻域代替2*2邻域可以很好的抑制噪声,准确定位边缘信息。使用C++AMP编程模型,将Canny算法中可并行化处理的部分放在GPU上进行并行化处理,可以合理的分配GUP的存储空间,减少重复计算点元。
2.4 C++AMP的并行化具体实现
利用C++AMP在GPU上使用Canny算子边缘检测并行化优化处理图像,算法在CPU和GPU之间有数据传递的I/O操作,主要对图像的边缘部分进行处理,仅在CPU上执行分割图像和判断大小的这些必要的串行时长操作,大部分可并行化的循环、迭代操作在GPU的工作组中执行GPU端处理图像比CPU端多在加速器上复制图像数据和转换图像数据这两个步骤。
1.在 Microsoft Visual Studio 2013运行C++AMP程序,从输入源文件夹中选择图片,点击处理图像。应用程序以ARGB32格式来加载图像文件和视频帧格式。
2.点击运行按钮,程序会创建对应的文件读取的实例和一个新的图像代理来处理图像或视频帧序列,然后调用start()方法进行处理;
3.先创建存储输入、输出图像和原始图像的存储区域,然后将数据复制到GPU中。
4.配置流水线,把图像送入流水线中,使用消息块连接缩放器、图像处理器和显示代理,也会同时连接取消消息源一遍随时取消执行;
5.启动流水线代理,在迭代过程中反复简化颜色,然后执行Canny边缘检测算法;
6.将GPU上的数据移回destFrame位图中的像素数据;
7.流水线等待所有代理完成工作,发出结束信号,通知关闭流水线;
8.输出C++AMP处理过后的图片,以及各阶段处理的时间。
4结束语
本文主要对基于C++AMP的图像并行计算进了理论与技术上的研究,对不同分辨率的图像分别进行串行和并行处理,可以非常清楚的看到并行运算的优势。通过实验,从实验结果中我们可以看出C++AMP的在并行处理上的高速且高效,由于C++AMP的可扩展性使得C++AMP作为一种新的异构并行技术得以快速发展起来。C++AMP是作为新推出的一种有着非常好的集成优势的并行化技术,基于C++AMP的图像并行化技术对于图像处理的速度以及效率都有很大的优势。C++AMP图像处理方面有着广泛的应用,我们也可以在其他需要并行的地方使用它。随着C++AMP技术的不断成熟与改进,C++AMP在并行计算领域会占据更重的地位。
参考文献
[1]肖汉.基于CPU+GPU的影像匹配高效能异构并行计算研究[D].武汉大学,2011.
[2]丁鹏,陈利学,龚捷,张岩.GPU通用计算研究[J].计算机与现代化.2010(01):12-1
[关键词]C++AMP;图像视频处理;技术研究
中图分类号:F276.44 文献标识码:A 文章编号:1009-914X(2018)45-0087-01
1 C++AMP基础概念
C++AMP作为一种新的GPU并行计算技术是对C++的一种扩展,模板类型是在进行并行时所需的。通过使用C++AMP创建不会过时以及可移植的应用程序,可以让那些适合并行计算的程序的运行速度显著提高。为了降低并行软件在开发上面的难度,为了避免在开发过程中的一些安全问题,C++AMP的开发者为我们提供了类型安全的泛型,它保证我们在使用的时候不会出现错误的数据类型。
C++AMP经历了CPU并行的发展过程,现在已经是CPU+GPU的异构并行阶段。C++AMP 和Visual Studio作为主流开发人员所需要的工具、库和框架,使得异构计算变得更加容易。基于这些,在图像处理方面会有极大的提高,这样以后人们就不会再面对长达几十甚至上百个小时的监控视频发呆,而是直接分析计算机给出的数据,当前画面中有多少人、都是谁、谁的动作可疑等。总之,接下来智能监控发展会很迅速。
2 Canny算子优化及其并行化
2.1 Canny算法优化
2.1.1 改进梯度幅值的计算方法
对于传统Canny算法来说,为了求图像梯度幅值,可以通过2*2邻域内的有限差分来计算。但是这种方法对噪音的要求很高,只要有一點检测出来的边缘效果就很差。改进的Canny 算法可以很好的解决这个问题。首先采用3*3邻域来代替2*2邻域,然后在x方向、y方向、45°方向和135°方向计算一阶偏导的差分,利用差分结果计算图像的梯度幅值。这种方式可以准确的定位边缘信息,得到非常好的处理效果,避免噪声带来的影响。
x方向的偏导数:
y方向的偏导数:
45°方向的偏导数:
135°方向的偏导数:
水平方向的差分为:
垂直方向的差分为:
像素的梯度幅值表示如下:
梯度方向为:
传统的边缘检测检测到的边缘信息比较模糊,我们可能会看到一个假的边缘。Canny算法采用3*3大小的邻域,沿梯度方向使用8方向的邻域对梯度幅值阵列M[x,y]中的所有像素插值,边缘点就是幅度的极大值点。
2.2 C++AMP处理流程
现今比较流行的有CUDA、OpenCL以及C++AMP。在众多并行算法中,C++AMP有很好的移植性,可以将写好的并行算法移植到不同的硬件平台下,而且代码不会过时,因此它被更多的程序开发人员使用。
为了实现图像的并行运算,我们在C++AMP平台下进行操作,实验过程用的是并行流水线,它是通过异步代理库和PPL来实现的。它可以同时处理4幅图像,以并发序列的方式将各个流水线阶段作为独立的并发代理运行。加载或获取图像调整图像大小图像简化及Canny边ss缘检测显示图像图1。
2.3并行Canny算子优化
传统的Canny算子由于其单纯采用高斯滤波器进行滤波,导致在去燥和边缘细节的不稳定,很容易造成高频边缘丢失。以前在CPU上运行时,速度受限,采用四方检测使图像漏掉较多细节,导致边缘不清晰,而且CPU上串行执行的算法速度较慢。
针对以上的传统算子的缺陷,基于C++AMP的改进Canny算子可以解决以上的不足。在GPU上综合使用高斯滤波和图像直方图,避免高频边缘丢失,采用3*3邻域代替2*2邻域可以很好的抑制噪声,准确定位边缘信息。使用C++AMP编程模型,将Canny算法中可并行化处理的部分放在GPU上进行并行化处理,可以合理的分配GUP的存储空间,减少重复计算点元。
2.4 C++AMP的并行化具体实现
利用C++AMP在GPU上使用Canny算子边缘检测并行化优化处理图像,算法在CPU和GPU之间有数据传递的I/O操作,主要对图像的边缘部分进行处理,仅在CPU上执行分割图像和判断大小的这些必要的串行时长操作,大部分可并行化的循环、迭代操作在GPU的工作组中执行GPU端处理图像比CPU端多在加速器上复制图像数据和转换图像数据这两个步骤。
1.在 Microsoft Visual Studio 2013运行C++AMP程序,从输入源文件夹中选择图片,点击处理图像。应用程序以ARGB32格式来加载图像文件和视频帧格式。
2.点击运行按钮,程序会创建对应的文件读取的实例和一个新的图像代理来处理图像或视频帧序列,然后调用start()方法进行处理;
3.先创建存储输入、输出图像和原始图像的存储区域,然后将数据复制到GPU中。
4.配置流水线,把图像送入流水线中,使用消息块连接缩放器、图像处理器和显示代理,也会同时连接取消消息源一遍随时取消执行;
5.启动流水线代理,在迭代过程中反复简化颜色,然后执行Canny边缘检测算法;
6.将GPU上的数据移回destFrame位图中的像素数据;
7.流水线等待所有代理完成工作,发出结束信号,通知关闭流水线;
8.输出C++AMP处理过后的图片,以及各阶段处理的时间。
4结束语
本文主要对基于C++AMP的图像并行计算进了理论与技术上的研究,对不同分辨率的图像分别进行串行和并行处理,可以非常清楚的看到并行运算的优势。通过实验,从实验结果中我们可以看出C++AMP的在并行处理上的高速且高效,由于C++AMP的可扩展性使得C++AMP作为一种新的异构并行技术得以快速发展起来。C++AMP是作为新推出的一种有着非常好的集成优势的并行化技术,基于C++AMP的图像并行化技术对于图像处理的速度以及效率都有很大的优势。C++AMP图像处理方面有着广泛的应用,我们也可以在其他需要并行的地方使用它。随着C++AMP技术的不断成熟与改进,C++AMP在并行计算领域会占据更重的地位。
参考文献
[1]肖汉.基于CPU+GPU的影像匹配高效能异构并行计算研究[D].武汉大学,2011.
[2]丁鹏,陈利学,龚捷,张岩.GPU通用计算研究[J].计算机与现代化.2010(01):12-1