CUDA下局部阈值和二值函数的边缘检测

2014-12-18 11:39
电子科技 2014年3期
关键词:二值像素点算子

杨 昊

(西安电子科技大学电子工程学院,陕西西安 710071)

边缘检测经常被用作一种模式识别算法的工具,同时也是预测图像压缩算法中必不可少的部分,当只使用一种方法时,若无验证,边缘的预测误差较大,这使存档压缩比率大幅减少。

由于边缘检测的重要性,有众多算法已开发来解决这一问题。例如,Marr-Hildreth[1]边缘检测是使用高斯函数作为平滑函数,使用拉普拉斯算子提取图像二阶倒数的“零交叉”来进行的边缘检测。Sobol,Roberts,Cross 和 Prewitt[2]通过梯度算子估计图像灰度变化的方向,增强图像变化中的灰度变化区域,对增强的区域进一步判断边缘。Canny边缘检测算子认为,边缘检测的算子应满足最优准则、信噪比准则、定位精度准则及单边缘响应准则。这些算子从某种程度上均是将图像的变化看作是梯度,将较大的变化认作边界。

CUDA 边缘检测最初用于 Sobol、Canny算子[5]以及Gabor[6]小波算子的并行运算。文中将详细介绍基于局部阈值和布尔函数的并行运算。将介绍局部阈值和二值函数的算法。并给出了并行化并用CUDA的实现。

1 局部阈值与二值函数下的边缘检测

基于局部阈值和二值函数[3]下的边缘检测在概念上与上述边缘检测完全不同,若是将3×3的图像通过局部阈值函数转换到位块中,而位块中出现的一些模式则被定义为边缘检测的算子。

这些算法的共同特性是在图像的每个像素点均存在大量的数据计算,同时这些数据的计算也都是独立进行。由于这种性质,独立像素的运算符合并行运行的理想条件。近年来,随着GPU编程的发展,海量数据的并行运算越发普及与流行,GPU编程已演化为高度并行、多线程、多核处理的高速大数据计算能力,并具有较高的存储器带宽。同时,在 CUDA[4]、OpenCL、Microsoft DirectCompute等软件开发,GPU运算已变得愈发成熟。

基于局部阈值和二值函数的边缘检测无需依赖于梯度的变化,该方法以局部阈值为基础将局部像素点转换为二进制模式,并利用掩码来确定在某一确定点上是否存在边界。当获得的二进制模型符合边界模型时,便可获得更多精确的像素点。阈值计算是基于点的计算,所以该方法中的一个优势就是无需任何一种平滑函数来减少图像噪声。

步骤1 运用局部阈值将3×3视窗的图像像素点转变为一个位块模式。局部阈值的数值在图像的每个像素点上进行再运算,减去小的误差来得到九格窗口的平均像素强度。转换3×3的窗口按照以下方法:如果像素点的强度大于它的阈值,则赋予二进制的值为1,反之为0。接下来通过进一步分析来给出3×3的模块。

步骤2 对于每个像素点,文中将符合边缘模式压缩成3×3的二进制模块。对于3×3的二进制矩阵来说,存在16种可能的边缘图像,如图1所示。若二进制窗口得到的1的数值和16个矩阵中的任意一个相等,则窗口中的中间像素便可被认作为边缘像素。

图1 3×3的二进制模块中的中心像素被认作边缘像素点

步骤3 对图像中每个中心窗口像素重复进行步骤1和步骤2。这样可获得所有符合要求的边缘像素。此步骤依旧会存在一些由于噪声所引起的错误边缘。

步骤4 用全局阈值来消除错误边缘。每个3×3矩阵的计算误差,在边缘会得到一个最大值,用此数值与全局阈值进行对比,而全距阈值则通过图像的属性,如噪声强度来确定。那些被期望成为边缘的像素点值大于全局阈值,则这些像素点依旧是符合条件的边缘点。反之,则删除这些不符合的像素点。

二值法的边缘检测算子与Canny算子非常相似,即使两种算法使用完全不同的两种算子。二值法检测中的边缘通常是多斑点的,通过分析显示,对于边缘锋利的图像,二值边缘检测明显优于Canny边缘检测。

2 CUDA的实现

算子的计算建立在每个独立的像素上,且与高度不相关,这适用于并行运算的条件。CUDA通过内核函数和多线程来实现并行运算,因此这种特性是该类算法的理想模型,由于GPU和CPU在构建上不同,GPU的处理单元拥有更小更快的存储器,因此在数据的计算上GPU具有更大的优势。该处理方式符合边缘检测的算子,下面将给出如何使用CUDA来实现该算子。

并行算子最佳的方法就是对每个图像像素点创造独立的线程,执行必要的计算并储存边缘存在的信息。可分为宿主函数与内核函数两部分:宿主函数控制起始信道并使CPU独立内存中的输入输出数据成为有效的GPU设备;内核函数负责计算、内存管理和线程同步。宿主函数的实行分以下几步:(1)加载输入图像到宿主内存。(2)分配输入图像到内存设备。(3)将输入图像从主机复制到存储器。(4)启动内核。(5)将输出图像从存储器复制到主机。(6)自由分配宿主与设备内存。

CUDA中众多独立的线程可以执行并行化,这些线程组被组织在块中,全部且被组织进一个网格。这样做是为了使计算更加有效,从某种意义上讲,是更有效地使用可用内存。CUDA中局部存储器致力于独立线程,共享内存便是利用块中的线程,全局内存可用于所有线程。共享内存预测会远快于全局内存,这是因为内核函数可以显著地改善性能,大量信道所需的数据会从共享和局部存储器中存取。

为了方便起见,所有信道在CUDA中有一个三维的向量信道ID,这使每个独立信道在一个一维、二维或三维的块中识别。同样,每个块ID也在网格中识别。这便使图像处理如边缘检测的执行变得容易,文中将一个像素点(X,Y)连接于图像并利用以下的方法

局部阈值和二值函数下的边缘检测,每个信道需获取相应图像像素和其相邻所有像素点的值。如前所述,共享内存会远快速于全局内存。因此,内核函数需从局部存储器中获取可用的像素值。如图2(a)为通过信道块的图像截面处理,图2(b)为图像截面被加载到块共享存储器,从图中可以看出像素处理和数值如何储存进共享存储器。

图2 图像截面被加载到块共享存储器

二值函数对每个像素点均进行独立的边缘存在计算。首先将3×3的窗口转变成一个位图模式,位图模式将被以整形存入9宫格的掩码中。每个单元格在3×3的矩阵中有对应的位置,得到的掩码与符合16可能的边缘模式预先定义的掩码相比较。该方法的优点是可减少每个线程所需的内存。二值函数边缘检测算子利用全局阈值可实现减少错误的边缘。从图3中可看到,该方法所得到的边缘检测效果。

图3 在局部阈值与二值函数下进行的边缘检测效果

3 调试与结果

文中将对比时序和CUDA下实现边缘检测的算法。两种算法均使用Microsoft Visual Studio 2010在4.0版本下的CUDA平台调试。使用Intel(R)Core(TM)i7-2630 QM CPU@2.00 GHz,4 GB of DDR3 -1333 RAM,Nvidia GTX540M 1 GB在win7操作系统下进行。从128×128~2 048×2 048的每组图片进行了100次重复的计算,并记录了运算所需的时间,如表1所示。

表1 时序和CUDA下实现边缘检测算法结果分析

4 结束语

从计算结果可看出,GPU并行运算的速度相比于CPU时序运算快了10倍。在未来,伴随着CUDA的发展,这种更快更有效的方法将能够解决更多复杂的处理。

[1]NADERNEJAD E,SHARIFZADEH S,HASSANPOUR H.Edge detection techniques:evaluationsand comparisons[J].Applied Mathematical Sciences,2008,2(31):1507 -1520.

[2]DAVISL S.A survey of edge detection techniques[J].Computer Graphics and Image Processing,1975,4(3):248 -260.

[3]AHMAD M B,CHOI T S.Local threshold and boolean function based edge detection [J].IEEE Transactions on Consumer Electronics,1999,45(3):674 -679.

[4]Nvidia Conpration.NVIDIA CUDA Cprogramming guide version 4.0[M].MA USA:Nvidia Conpration,2011.

[5]YUANCHENG L,DURAISWAMI R.Canny edgedetection on NVIDIA CUDA[C].Tianjin:IEEE Computer Society Conference on Computer Vision and Pattern Recognition Workshops,CVPRW'08,2008:1 -8.

[6]WU Q,FU Z,TONG C,et al.The method of parallel Gabor wavelet transformedge detection based on CUDA[C].Mosico:2010 International Conference on Environmental Science and Information Application Technology(ESIAT),2010:537-540.

猜你喜欢
二值像素点算子
与由分数阶Laplace算子生成的热半群相关的微分变换算子的有界性
拟微分算子在Hp(ω)上的有界性
Heisenberg群上与Schrödinger算子相关的Riesz变换在Hardy空间上的有界性
基于局部相似性的特征匹配筛选算法
各向异性次Laplace算子和拟p-次Laplace算子的Picone恒等式及其应用
基于二值形态学算子的轨道图像分割新算法
基于5×5邻域像素点相关性的划痕修复算法
面向网络边缘应用的新一代神经网络
基于canvas的前端数据加密
基于稀疏表示的二值图像超分辨率重建算法