首页 > 其他分享 >OpenCV||超详细的图像平滑

OpenCV||超详细的图像平滑

时间:2024-08-03 11:27:30浏览次数:18  
标签:滤波 cv2 平滑 噪声 OpenCV 图像 像素点

消除噪声的工作称为图像平滑

平滑处理算法

  • 基于二维离散卷积的高斯平滑、均值平滑;
  • 基于统计学方法的中值平滑;
  • 具备保持边缘作用的双边滤波、导向滤波。

平滑滤波算法:线性平滑、非线性平滑、自适应平滑

一、线性滤波

1.1 归一化方框滤波器

概述:归一化方框滤波器,也被称为均值滤波器,是图像处理中常用的一种线性滤波技术。其核心思想在于,通过计算图像中每个像素点周围邻域内像素值的平均值,来替代该像素点的原始值,从而达到平滑图像的目的。

特点

  1. 线性:均值滤波是一种线性滤波技术,其输出是输入像素值的线性组合。
  2. 平滑效果:能够有效地去除图像中的随机噪声,但同时也会使图像变得模糊,特别是在图像的边缘部分。
  3. 计算简单:由于只涉及平均值的计算,因此均值滤波的计算复杂度相对较低。

API:

在OpenCV中,均值滤波可以通过cv2.blur()函数实现。该函数的参数包括要处理的图像、核的大小(即窗口的大小)等。需要注意的是,cv2.blur()函数内部实际上已经实现了归一化处理,因此无需额外进行归一化操作。

示例

import cv2  
  
# 读取图像  
img = cv2.imread('path_to_image.jpg')  
  
# 应用均值滤波  
blurred_img = cv2.blur(img, (5, 5))  # 核的大小为5x5  
  
# 显示结果  
cv2.imshow('Original Image', img)  
cv2.imshow('Blurred Image', blurred_img)  
cv2.waitKey(0)  
cv2.destroyAllWindows()

注意事项

  • 核的大小:核的大小会直接影响滤波的效果。核越大,平滑效果越明显,但图像也会变得更加模糊。
  • 噪声类型:均值滤波对于随机噪声(如高斯噪声)有较好的去除效果,但对于某些类型的噪声(如椒盐噪声)效果可能不佳。
  • 边缘效应:由于均值滤波会计算邻域内的平均值,因此在图像的边缘部分可能会出现模糊效应。为了减轻这种效应,可以在滤波前对图像进行边界扩展处理。

1.2 高斯滤波

高斯滤波对去除高斯噪声有很好的效果

概念:高斯滤波通过对图像中的每个像素点应用高斯函数,将其邻域内的像素值加权平均后替换原像素值。高斯函数是一个钟形曲线,其标准差(σ)决定了曲线的宽度和平滑程度。标准差越大,曲线越宽,滤波效果越明显,图像越模糊。

 实现方式

  • 用离散化窗口滑窗卷积(常用)
  • 傅里叶变换(当离散化的窗口非常大、用滑窗计算量非常大的情况使用)

卷积知识

  • 卷积核:用来对图像矩阵进行平滑的矩阵,也称为过滤器;
  • 锚点:卷积核和图像矩阵重叠,进行内积运算后,锚点位置的像素点会被计算值取代。一般选取奇数卷积核的中心点作为锚点。
  • 步长:卷积核沿着图像矩阵每次移动的长度。
  • 内积:卷积核和图像矩阵对应像素点相乘,然后相加得到一个总和(不要和矩阵乘法弄混淆)。

API:

cv2.GaussianBlur()
  • src:输入图像。
  • ksize:高斯核的大小,(宽度, 高度)。宽度和高度都应为正数和奇数,或者可以设置为(0, 0),此时由sigma计算得出。
  • sigmaX:X方向上的高斯核标准差。如果sigmaX为零,则从ksize.width中计算得出;如果两个sigma都为零,则分别从ksize.widthksize.height中计算得出;如果它们都不为零,则分别指定高斯核在X和Y方向上的标准差。
  • sigmaY:Y方向上的高斯核标准差。如果sigmaY为零,则与sigmaX相同。

注意事项

  • 核大小(ksize)和标准差(sigma)是控制高斯滤波效果的关键参数。核越大,标准差越大,图像的平滑效果就越明显,但可能会丢失更多的细节。
  • 在某些情况下,你可能需要根据图像的噪声类型和程度来调整这些参数,以达到最佳的滤波效果。
  • 高斯滤波是一种线性滤波技术,它在平滑图像的同时可能会模糊边缘和细节。因此,在选择滤波参数时需要权衡平滑效果和细节保留之间的平衡。

二、非线性滤波

2.1 中值滤波

概念:中值滤波用像素点领域灰度值的中值来代替该像素点的灰度值,也就是说用一片区域的中间值来代替所有值,可以除去最大值、最小值。

优点:对除去斑点噪声和椒盐噪声很有用,均值滤波噪声也被参与运算。

缺点:中值滤波的时间在均值滤波的5倍以上。

API

dst = cv2.medianBlur(src, ksize)
  • src:源图像,可以是任意数量的单通道图像,数据类型为8位或浮点型。
  • ksize:中值滤波的窗口大小,必须是正奇数(例如3, 5, 7等)。这是中值滤波中最重要的参数。它定义了滤波器窗口的大小,窗口内的像素值将被用来计算中值。由于中值滤波是一个邻域操作,因此窗口大小的选择对滤波效果有显著影响。窗口越大,滤波效果越强,但同时可能会导致图像细节的损失。通常,窗口大小的选择取决于图像中噪声的强度和分布。

注意事项

  • 中值滤波对椒盐噪声特别有效,但可能不适用于其他类型的噪声(如高斯噪声)。
  • 窗口大小的选择应根据具体应用场景和噪声特性进行调整。
  • 滤波后的图像可能会损失一些细节信息,因此在实际应用中需要权衡滤波效果和细节保留之间的关系。

2.2 双边滤波

概念:双边滤波(Bilateral Filter)是一种非常有效的图像去噪技术,它能够在去除噪声的同时很好地保持边缘信息。双边滤波不仅考虑像素之间的空间邻近度,还考虑像素值之间的相似性,这使得它在处理图像时能够同时去除噪声和保持边缘清晰。

优点:

  1. 边缘保持:双边滤波能够很好地保持图像的边缘信息。这是因为它在滤波过程中同时考虑了像素的空间邻近度和颜色相似性。空间上接近且颜色相似的像素会被赋予更高的权重,从而保留了边缘细节。
  2. 去噪能力强:对于图像中的噪声,双边滤波能够有效地去除,特别是对于那些颜色与周围像素差异较大的噪声点(如椒盐噪声)。
  3. 适用范围广:双边滤波不仅适用于灰度图像,也适用于彩色图像。在彩色图像中,它可以分别对每个颜色通道进行处理,或者在转换到适当的颜色空间后进行处理,以更好地去除噪声并保留颜色信息。
  4. 自动卡通化或图画滤波器:双边滤波的强大功能可以使其作为一个自动的卡通化或图画滤波器,通过平滑平坦区域同时保持边缘锐化,使图像看起来更加清晰和生动。

缺点:

  1. 计算复杂度高:双边滤波的计算复杂度相对较高,因为它需要为每个像素点计算其邻域内所有像素点的权重,并根据这些权重进行加权平均。这导致双边滤波的运行时间相对较长,特别是对于大尺寸图像或高分辨率图像。
  2. 可能保留高频噪声:尽管双边滤波在去除噪声方面表现出色,但它可能会保留一些高频噪声,特别是当噪声的颜色与周围像素相似时。这是因为双边滤波在颜色相似性方面也有一定的容忍度,导致一些高频噪声可能无法被完全去除。
  3. 参数选择敏感:双边滤波的效果很大程度上取决于其参数的选择,包括滤波器的直径(d)、颜色空间的标准差(sigmaColor)和坐标空间的标准差(sigmaSpace)。选择合适的参数需要一定的经验和试验,否则可能导致滤波效果不理想。
  4. 可能导致图像模糊:如果参数设置不当,特别是当sigmaSpace值过大时,双边滤波可能会导致图像边缘模糊。这是因为过大的sigmaSpace值会使距离较远的像素点也参与滤波计算,从而模糊了边缘信息。

API

dst = cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, borderType=cv2.BORDER_DEFAULT)
  • src:输入图像,即需要进行滤波处理的图像。
  • d:滤波器的直径。这个参数定义了滤波时考虑的邻域范围的大小,它必须是正奇数。直径越大,滤波效果越明显,但同时计算量也越大。
  • sigmaColor:颜色空间的标准差,用于控制颜色相似性的权重。该值越大,表示在颜色上越接近的像素点将具有更大的权重,即更多的颜色将被混合在一起。这有助于去除颜色噪声,但过大的值可能会导致图像颜色过于平滑。
  • sigmaSpace:坐标空间的标准差,用于控制空间邻近度的权重。该值越大,表示在位置上越接近的像素点将具有更大的权重,即更多的像素将被包括在滤波过程中。这有助于去除空间噪声,但过大的值可能会导致边缘模糊。
  • borderType(可选):边界像素的外推方法,默认值为cv2.BORDER_DEFAULT。这个参数在大多数情况下可以保持默认值。

注意事项

  • 选择合适的dsigmaColorsigmaSpace值对于获得理想的滤波效果至关重要。较小的d值会导致较快的处理速度,但可能会错过一些噪声。较大的sigmaColor值会导致更多的颜色混合,可能使图像看起来过于平滑。而sigmaSpace值的选择则需要在去除噪声和保留细节之间找到平衡。
  • 双边滤波在处理具有明显边缘的图像时效果尤为显著,因为它能够在去除噪声的同时保持边缘的清晰度。
  • 由于双边滤波需要同时考虑颜色和空间两个因素,因此其计算量相对较大,处理速度可能不如一些简单的滤波方法。

标签:滤波,cv2,平滑,噪声,OpenCV,图像,像素点
From: https://blog.csdn.net/m0_56230886/article/details/140829995

相关文章

  • 数字图像处理 第四章 频率域滤波(下)
    文章目录一、频率域滤波P161-P1691.1频率域的其他特性P161-P1621.2频率滤波基础P162-P1651.3频率域滤波小结P165-P1661.4空间和频率滤波间的对应P165-P166二、使用频率域滤波器平滑图像P169-P1742.1理想低通滤波器(ILPF)P169-P1......
  • 数字图像处理 第四章 频率滤波(上)
    文章目录一、背景P124-125二、基本概念P125-1302.1复数P125-P1262.2傅里叶级数P1262.3冲激及其取样特性P126-P1282.4连续变量函数的傅里叶变换P128-P1302.5卷积P130-P131三、取样与取样函数的傅里叶变换P131-P1373.1取样P1......
  • 【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+
    一、项目介绍眼疾识别系统,使用Python作为主要编程语言进行开发,基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法,通过对眼疾图片4种数据集进行训练('白内障','糖尿病性视网膜病变','青光眼','正常'),最终得到一个识别精确度较高的模型。然后使用Django框架开发Web网......
  • 如何在python中通过requests和opencv加载uint16 png文件
    我正在尝试从URL自动加载图像,然后将其加载到numpy矩阵。为此,我需要使用requests和opencv库。对于像uint8这样编码的标准图像,它以正确的方式工作,并且由于值溢出而损坏了uint16图像。这是我现在正在使用的一个简单的最小代码:importrequestsimportcv2importnumpy......
  • 图像处理案例02
    手指拖拽屏幕上的方块儿1步骤:1.opencv获取视频流2.获取手指关节关键点坐标3.判断手指是否在方块上4.如果在方块上,方块跟着手指移动2代码importcv2importnumpyasnpimportmathimportmediapipeasmp##检测手掌参数设置mp_drawing=mp.solutions.drawing_util......
  • 【学术会议征稿】第三届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2024)
    第三届图像处理、计算机视觉与机器学习国际学术会议(ICICML2024)20243rd InternationalConferenceonImageProcessing,ComputerVisionandMachineLearning 重要信息大会官网:参会投稿/了解会议详情大会时间:2024年11月22日-24日 大会地点:中国深圳接受/拒稿......
  • 【C#】WPF实现HaIcon图像缩放、移动
    1.HaIcon实现的C#代码////FilegeneratedbyHDevelopforHALCON/DOTNET(C#)Version12.0////ThisfileisintendedtobeusedwiththeHDevelopTemplateor//HDevelopTemplateWPFprojectslocatedunder%HALCONEXAMPLES%\c#usingSystem;usingSystem.Thre......
  • 【AI绘画】Black Forest Labs 发布 Flux: 文本到图像模型的下一次飞跃
    Prompt:Extremeclose-upofasingletigereye,directfrontalview.Detailedirisandpupil.Sharpfocusoneyetextureandcolor.Naturallightingtocaptureauthenticeyeshineanddepth.Theword“FLUX”ispaintedoveritinbig,whitebrushstrok......
  • opencv源码编译
    编译环境:ubuntu24.04LTSgcc(Ubuntu13.2.0-23ubuntu4)13.2.0g++(Ubuntu13.2.0-23ubuntu4)13.2.0cmakeversion3.28.3 在Ubuntu下编译OpenCV源码是一个相对直接的过程,但需要注意一些依赖项和配置选项。以下是一个基本的步骤指南,用于从源代码编译OpenCV。1.安装必要......
  • 深度学习扫盲——PIL(python图像处理库)
    PIL(PythonImagingLibrary)库,也称为Pillow,是Python中广泛使用的PIL。它提供了丰富的图像处理功能,支持几乎所有图片格式的存储、显示和处理,能够完成图像的缩放、裁剪、叠加以及图像添加线条、图像和文字等操作。以下是对PIL库(Pillow)的详细介绍:一、基本介绍定义:PIL是PythonImagin......