图像滤波
所为图像滤波通过滤波器得到另一个图像
什么是滤波器
在深度学习中,滤波器又称为卷积核,滤波的过程成为卷积
卷积核概念
卷积核大小,一般为奇数,如
- 3*3
- 5*5
- 7*7
为什么卷积核大小是奇数?
原因是:保证 锚点 在中间,防止位置发生偏移的原因
卷积核大小的影响
在深度学习中,卷积核越大,看到的信息越多,提取的特征越好,同时计算量越大
图像平滑处理
图像噪声的定义和性质
图像噪声是指存在于图像数据中的不必要的或多余的干扰信息。它妨碍了人们通过视觉器官对接收信息的理解。噪声在理论上可以定义为“不可预测,只能用概率统计方法来认识的随机误差”。因此,将图像噪声看成是多维随机过程是合适的,描述噪声的方法可以借用随机过程的描述,即用其概率分布函数和概率密度分布函数。
图像噪声的分类
图像噪声可以根据其来源和性质进行分类。主要分为外部噪声和内部噪声。外部噪声是由外部环境因素引起的,如光线变化、电磁干扰等。内部噪声则是由设备本身的因素引起的,如传感器噪声、电路噪声等。
图像噪声的产生原因
图像噪声的产生原因多种多样,主要包括以下几个方面:
- 传感器和电路产生的噪声:扫描仪或数码相机的传感器和电路可能会产生电子噪声,导致图像中出现噪点。
- 长时间曝光:在拍摄夜景时,由于CCD无法处理较慢的快门速度所带来的巨大工作量,导致一些特定的像素失去控制,产生噪点。
- 格式压缩:使用JPEG格式对图像进行压缩时,由于图像数据的处理方式,可能会在边缘位置产生不自然的结合,形成噪点。
- 感光元件特性:感光元件的热稳定性等特性也可能导致噪点的产生。
图像噪声的影响和解决方法
图像噪声的存在严重影响了图像的质量,使得图像中的信息变得模糊和不清晰。为了减少图像中的噪声,可以采取一些专业的图像处理技术,如图像降噪(Image Denoising),通过减少数字图像中的噪声来提高图像的质量。
图像平滑处理的一个例子是减少图像中的噪声。比如,在拍摄夜间照片时,由于光线不足,图像可能出现许多随机噪点。通过应用平滑处理(如高斯模糊),可以降低这些噪点的影响,从而使图像看起来更清晰,细节更突出。这有助于后续的图像分析或特征提取,提升最终结果的准确性
常见的图像平滑处理方法包括高斯滤波、中值滤波和双边滤波。
高斯滤波
高斯滤波是图像处理中常用的一种平滑滤波方法,其主要作用是去除图像中的噪声,并减少图像细节,以实现图像的平滑处理。
高斯滤波的原理是利用高斯函数对图像进行加权平均。在滤波过程中,每个像素的值都会被其周围像素的加权平均值所取代,而这些权重则由高斯分布函数计算得出。通过这种方式,高斯滤波可以有效地减少图像中的噪声,并保留图像的整体特征。
高斯滤波的使用场景包括但不限于:
- 去除高斯噪声: 高斯滤波可以有效地去除高斯噪声,因为该滤波器在计算像素值时会对周围像素进行加权平均,从而抑制噪声的影响。
- 模糊处理: 由于高斯滤波会平均周围像素的值,因此它也可用于实现图像的模糊处理,例如在某些需求下需要模糊化处理的图像或区域。
- 提取大致轮廓: 由于高斯滤波会平滑图像细节,因此在一定程度上可以帮助提取图像的大致轮廓和结构特征。
cv2.GaussianBlur()
是 OpenCV 库中用于图像模糊处理的函数之一。该函数可以对图像进行高斯模糊处理,即在每个像素周围使用高斯核来加权平均计算像素值,从而达到模糊效果。
cv2.GaussianBlur(src, ksize, sigmaX)
:
src
:输入图像。ksize
:高斯核的大小,通常以元组(width, height)
的形式指定。sigmaX
:高斯核在 x 方向上的标准差。
以下是一个简单的示例代码,演示如何使用 cv2.GaussianBlur()
函数对图像进行高斯模糊处理:
import cv2
img = cv2.imread("images/renwu01.jpeg")
# 定义高斯核大小和标准差
ksize = (9, 9)
sigma = 3
# 对图像进行高斯模糊处理
blurred_image = cv2.GaussianBlur(img, ksize, sigma)
# 显示原始图像和滤波后的图像
cv2.imshow('old Image', img)
cv2.imshow('new Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
双边滤波
双边滤波是图像处理中常用的一种平滑滤波方法,它可以同时平滑图像并保留边缘信息。
传统的线性滤波方法如均值滤波或高斯滤波在平滑图像的同时,可能会模糊或模糊边缘。而双边滤波通过考虑像素点的空间距离和灰度差异,实现了对图像进行平滑的同时,尽量保留图像的边缘细节。
双边滤波的原理是在滤波过程中,不仅考虑像素点与周围像素点之间的空间距离权重,还考虑像素点与周围像素点的灰度差异权重。这样,像素点的最终值将由它的邻域像素根据这两个权重的组合来计算得出,从而平滑图像的同时保留边缘信息。
双边滤波适用于各种类型的图像,特别适合于那些需要平滑处理但仍保留边缘细节的图像,例如人脸识别、图像增强和图像去噪等领域。
cv2.bilateralFilter()
是 OpenCV 库中用于图像滤波处理的函数之一。该函数可以对图像进行双边滤波处理,即在保持边缘清晰的同时,对图像进行平滑处理。
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)
函数接受四个参数:
src
:输入图像。d
:滤波器的直径,用于指定在每个像素周围考虑的像素邻域大小。一般为正奇数sigmaColor
:颜色空间的标准差,用于控制滤波过程中颜色相似性的权重。较大的值意味着更宽松的颜色相似性条件。
-
大 sigmaColor 值:当
sigmaColor
较大时,颜色差异较大的像素也会被赋予较大的权重,这意味着滤波器会在更大范围内进行平滑处理,导致图像细节的丢失较多。 -
小 sigmaColor 值:当
sigmaColor
较小时,只有颜色差异较小的像素会被赋予较大的权重,滤波器主要在颜色相似的区域内进行平滑处理,这样可以更好地保留边缘和细节 -
sigmaSpace
:坐标空间的标准差,用于控制滤波过程中空间相似性的权重。较大的值意味着更宽松的空间相似性条件。 -
大 sigmaSpace 值:当
sigmaSpace
较大时,空间上距离较远的像素也会被赋予较大的权重,这意味着滤波器会在更大的空间范围内进行平滑处理,导致图像的局部细节被进一步平滑。 -
小 sigmaSpace 值:当
sigmaSpace
较小时,只有空间上距离较近的像素会被赋予较大的权重,滤波器主要在局部范围内进行平滑处理,这样可以更好地保留局部细节和边缘信息