【CUDA学习笔记】第九篇:基本计算机视觉操作【上】(附实践源码下载)(二)

简介: 【CUDA学习笔记】第九篇:基本计算机视觉操作【上】(附实践源码下载)(二)

4、对图像进行滤波操作


       前面所描述的各种方法都只针对单像素强度进行处理,因此也称为“点处理”方法。而更多时候,查看像素的邻域关系比只处理单像素强度有更大的用途,我们称之为“邻域处理”技术。邻域可以是3×3,5×5,7×7等以特定像素为中心的矩阵。图像滤波是一种重要的邻域处理技术。


       滤波是信号处理中的一个重要概念:拒绝或允许某特定频段通过。如何在图像中测量频率?如果某区域内的灰度级变化缓慢,那么就是低频区域;如果灰度级变化剧烈,这就是高频区域。通常,图像的背景被视为是低频区域,边缘是高频区域。


4.1、均值滤波

       平均滤波器对邻域像素执行平均操作。如果图像中存在高斯噪声,则可以使用这种低通平均滤波器来消除噪声,但平均操作会使图像边缘变得模糊。邻域可以是3×3,5×5,7×7,依此类推。滤波器窗口的尺寸越大,图像的模糊程度就越大。

       cv::Ptr是智能指针的模板类,用于存储cv::cuda::Filter类型的滤波器。接着用create-BoxFilter函数来创建不同窗口大小的平均滤波器,这个函数需要三个强制参数和三个可选参数:第一个和第二个参数是源图像和目标图像的数据类型,这里设定为8位无符号灰度的CV_8UC1图像;第三个参数定义滤波器窗口的大小,可以是3×3、5×5、7×7等;第四个参数是表示位于内核中心点的锚点,默认值为(-1,-1)。最后还有两个关于像素插值方法和边界值的可选参数,这里省略。


       创建出来的滤波器指针有一个apply方法,能将创建的滤波器用在所有图像上,它需要三个参数:第一个参数是源图像,第二个参数是目标图像,第三个可选参数是CUDA流,用于本书前面所述的多任务处理。代码中,在图像上应用了三个不同大小的平均滤波器,执行结果如图6-8所示。往下一次kernel增大:

468846a1e9dd44bd857172716f0c8a6e.png

556e568d687b9860f8130d8ac7de2f0b.png

a2cd58bafdd8b03164c3547e7595fcf7.png

e8d943751411841dedd6aa549b1be7d9.png

       从输出的结果可以看出,虽然大型滤波器可以消除更多噪声,但是随着滤波器尺寸的增加,更多的像素被平均处理,导致图像变得更加模糊。


4.2、高斯滤波

       高斯滤波器使用具有高斯分布的掩码来过滤图像,而不是简单的平均掩码。这个滤波器还在图像上引入平滑模糊,这个方法已经被广泛用于消除图像中的噪声。

9d1ee4ac9e10c89e44044b465bb36aef.png

       createGaussianFilter函数用于为高斯滤波器创建掩码,需要提供源图像/目标图像的数据类型、滤波器的大小以及水平方向标准差作为这个函数的参数。我们还可以提供竖直方向标准差作为参数,如果不提供的话,会用水平方向标准差作为其默认值,然后用apply方法创建出不同大小的高斯掩码应用于图像处理。本段代码的输出如图:

b35226b8974369d4af800213ac1a1526.png

0f7ea3ea10c133db667157434275fc5b.png

082748a7b3f649f89cb43b9720555282.png

9f707e043c6579f9b7737ac280231073.png

       同样地,随着高斯滤波器尺寸的增加,图像变得更加模糊。高斯滤波器用于消除噪声并在图像上引入平滑模糊。


4.3、中值滤波

       当图像受到椒盐噪声的影响,那么平均滤波器或高斯滤波器是消除不了的,这时候需要一个非线性的滤波器。用邻域的中值运算去替代平均值的方式可以帮助消除椒盐噪声。在这个滤波器中,邻域中的9像素值的中值放置于中心像素处,这将能消除椒盐噪音所产生的过高或过低的极端值。虽然OpenCV和CUDA提供了中值滤波功能,但它比OpenCV的常规函数慢。

697a5bb00adf7688121df79e2d077841.png

       OpenCV中的medianBlur函数用于实现中值滤波器,它需要三个参数:第一个参数是源图像,第二个参数是目标图像,第三个参数是中值运算的窗口大小。中值滤波的输出如图:

95d03712912441b13ef384080c93d1cd.png

       如图所示,源图像受椒盐噪声的影响。通过3×3尺寸的中值滤波器完全消除了这种噪声,而且没有产生极端模糊。因此,当图像应用受椒盐噪声影响时,中值滤波是一个非常重要的预处理步骤。

相关文章
|
2月前
|
机器学习/深度学习 监控 算法
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
61 3
|
2月前
|
机器学习/深度学习 算法 PyTorch
【机器学习】大模型环境下的应用:计算机视觉的探索与实践
【机器学习】大模型环境下的应用:计算机视觉的探索与实践
74 1
|
4月前
|
监控 算法 自动驾驶
计算机视觉的实践与挑战:技术深度剖析
【8月更文挑战第21天】计算机视觉技术作为人工智能的璀璨明珠,正逐步深入到我们生活的各个方面,带来前所未有的便利和变革。然而,随着技术的不断发展,我们也面临着诸多挑战和问题。未来,我们需要不断推动技术创新和跨学科合作,加强数据安全和隐私保护,提升算法的鲁棒性和可解释性,以应对这些挑战并推动计算机视觉技术的持续发展。让我们共同努力,探索计算机视觉技术的广阔天地,为创造一个更加智能、安全和美好的世界而不懈努力。
|
7月前
|
文字识别 算法 TensorFlow
【Keras+计算机视觉+Tensorflow】OCR文字识别实战(附源码和数据集 超详细必看)
【Keras+计算机视觉+Tensorflow】OCR文字识别实战(附源码和数据集 超详细必看)
196 2
|
7月前
|
算法 数据库 计算机视觉
【计算机视觉】FCN、Seg-Net、U-Net模型进行图像分割实战(附源码和数据集 超详细必看)
【计算机视觉】FCN、Seg-Net、U-Net模型进行图像分割实战(附源码和数据集 超详细必看)
280 2
|
7月前
|
机器学习/深度学习 算法 TensorFlow
【Keras+计算机视觉+Tensorflow】实现基于YOLO和Deep Sort的目标检测与跟踪实战(附源码和数据集)
【Keras+计算机视觉+Tensorflow】实现基于YOLO和Deep Sort的目标检测与跟踪实战(附源码和数据集)
128 1
|
7月前
|
机器学习/深度学习 计算机视觉 Python
【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)
【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)
218 0
|
7月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
【Keras+计算机视觉+Tensorflow】DCGAN对抗生成网络在MNIST手写数据集上实战(附源码和数据集 超详细)
【Keras+计算机视觉+Tensorflow】DCGAN对抗生成网络在MNIST手写数据集上实战(附源码和数据集 超详细)
134 0
|
7月前
|
机器学习/深度学习 监控 算法
【Keras计算机视觉】Faster R-CNN神经网络实现目标检测实战(附源码和数据集 超详细)
【Keras计算机视觉】Faster R-CNN神经网络实现目标检测实战(附源码和数据集 超详细)
140 0
|
7月前
|
机器学习/深度学习 并行计算 算法
【计算机视觉+CNN】keras+ResNet残差网络实现图像识别分类实战(附源码和数据集 超详细)
【计算机视觉+CNN】keras+ResNet残差网络实现图像识别分类实战(附源码和数据集 超详细)
213 0

热门文章

最新文章

下一篇
DataWorks