【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尺寸的中值滤波器完全消除了这种噪声,而且没有产生极端模糊。因此,当图像应用受椒盐噪声影响时,中值滤波是一个非常重要的预处理步骤。

相关文章
|
7月前
|
算法 vr&ar 计算机视觉
[笔记]Python计算机视觉编程《二》 基本的图像操作和处理
[笔记]Python计算机视觉编程《二》 基本的图像操作和处理
|
7月前
|
存储 算法 程序员
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(四)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(四)
|
7月前
|
存储 Serverless C语言
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(三)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(三)
|
7月前
|
安全 数据挖掘 计算机视觉
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(二)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(二)
|
7月前
|
XML 算法 计算机视觉
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(一)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理
|
9月前
|
机器学习/深度学习 决策智能 计算机视觉
计算机视觉实战(四)图像形态学操作
计算机视觉实战(四)图像形态学操作
|
12月前
|
并行计算 API 计算机视觉
【CUDA学习笔记】第十篇:基本计算机视觉操作【下】(附实践源码下载)(二)
【CUDA学习笔记】第十篇:基本计算机视觉操作【下】(附实践源码下载)(二)
67 0
|
12月前
|
并行计算 算法 计算机视觉
【CUDA学习笔记】第十篇:基本计算机视觉操作【下】(附实践源码下载)(一)
【CUDA学习笔记】第十篇:基本计算机视觉操作【下】(附实践源码下载)(一)
92 0
|
12月前
|
存储 并行计算 API
【CUDA学习笔记】第九篇:基本计算机视觉操作【上】(附实践源码下载)(一)
【CUDA学习笔记】第九篇:基本计算机视觉操作【上】(附实践源码下载)(一)
81 0
|
计算机视觉 Python
计算机视觉中Python如何实现图像操作与处理
学习过flask动画制作或者视频编辑的童鞋应该都知道,我们平时所看到的流畅的视频画面都是由一帧一帧的图像构成的,比如我们以前读书的时候喜欢在书的边角处花一些动作不同的简笔画,当我们快速翻动书本的时候就好像我们的简笔画中的物体活了,就像在看动画一般.所以当我们需要对一个视频文件进行分析时,连续播放的视频并没有那么容易进行采样分析,在计算机视觉中对视频的分析通常都是对视频帧的分析.说白了,其实计算机视觉就是一们研究如何对图像中的信息进行自动提取的学科. 所以学习计算机视觉首先需要学会如何对图像进行处理,那在Python中我们都怎么处理图像的呢? 在Python中处理图像的库有很多,非常丰富,Pyt
148 0

热门文章

最新文章