南昌有什么网站,结构设计网站推荐,2023年8月新冠又来了,网站建设宀金手指花总十四本篇文章记录我学习【OpenCV】图像处理中关于“平滑”的知识点#xff0c;希望我的分享对你有所帮助。 目录
一、什么是平滑处理
1、平滑的目的是什么#xff1f;
2、常见的图像噪声
#xff08;1#xff09;椒盐噪声
编辑#xff08;2#xff09; 高斯噪声
希望我的分享对你有所帮助。 目录
一、什么是平滑处理
1、平滑的目的是什么
2、常见的图像噪声
1椒盐噪声
编辑2 高斯噪声
3 泊松噪声
4 斑点噪声 二、图像平滑处理的方法
1、均值滤波 2、高斯滤波
1高斯函数
2高斯滤波的卷积核
3高斯滤波的操作过程 3、中值滤波
1中值滤波的原理
2中值滤波的步骤
编辑3中值滤波的优缺点 4、双边滤波
1双边滤波的原理
2双边滤波的数学公式 3双边滤波的步骤
4双边滤波的优缺点 一、什么是平滑处理 在图像处理中平滑是指减少图像中噪声或细节的过程目的是让图像看起来更加平滑、柔和或是突出主要特征同时抑制不必要的细节。平滑操作常常用于噪声去除、边缘检测之前的预处理等任务。 因此你只需明白图像处理中“平滑”操作就是一种“预处理”的手段目的是为后续的处理工作做铺垫。 1、平滑的目的是什么 噪声去除图像在采集过程中可能会受到各种噪声的影响平滑操作能够有效减小噪声对图像质量的影响。特征提取通过平滑去除细节有助于在后续处理如边缘检测、形态学处理等中更好地提取关键特征。图像压缩某些压缩算法依赖于图像的平滑化以降低数据冗余。 2、常见的图像噪声
在介绍平滑处理的方法时我想想介绍一下常见的图像噪声。 图像噪声是指在图像中出现的无意义的、随机的像素值通常由传感器、信号处理或环境干扰等因素引起。这些噪声会破坏图像的质量使得图像显得模糊、杂乱、失真。 1椒盐噪声 这种噪声在图像中表现为一些亮白色或黑色的随机小点通常是由数据传输错误或压缩过程中的问题引起的。 椒盐噪声Salt-and-pepperNoise也称为脉冲噪声是一种随机出现的白点或黑点具体表现为亮的区域有黑色像素或是暗的区域有白色像素又或是两者皆有。 2 高斯噪声 是一种呈现正态分布的噪声通常表现为图像中的像素值出现细微的随机波动。高斯噪声在许多实际场景中都很常见尤其是在低光照条件下。 高斯噪声GaussNoise是指概率密度函数服从高斯分布正态分布的一类噪声。除了常用抑制噪声的方法外常采用数理统计方法对高斯噪声进行抑制。 3 泊松噪声 在低光照条件下图像的噪声可能呈现泊松分布这种噪声通常表现为图像中某些区域的像素值有较大的波动。 4 斑点噪声 常见于雷达成像或医学成像中它的特点是图像局部区域的像素值变化比较剧烈通常是由成像设备的工作原理或测量误差引起的。 二、图像平滑处理的方法
1、均值滤波 原理将每个像素值替换为其邻域内像素的平均值。效果均值滤波能够有效去除噪声但会导致图像模糊特别是当噪声较多时。实现使用一个固定大小的卷积核如 3x3、5x5对图像进行卷积操作。 均值滤波MeanFiltering就是对图像的所有像素点进行取均值即以一个方形区域为单位将该区域的中心像素点赋值为区域内所有像素点的平均值。 数学表达式 设图像为二维矩阵图像的像素值表示为其中和是图像的横纵坐标。 均值滤波器通常采用一个大小为的卷积核表示为 。假设滤波后的像素值 是当前像素周围区域的平均值可以通过卷积操作来实现 其中是当前像素点的位置,是滤波器的尺寸。 在这个过程中卷积核的每个元素都等于即均值滤波器是一个均匀的滤波器。 均值滤波的步骤: 选择滤波器大小选择一个 的滤波器大小通常为奇数例如 3×33×3, 5×55×5, 7×77×7 等这个大小决定了每个像素周围的邻域范围。遍历图像遍历图像中的每一个像素点对于每个像素点计算其周围邻域内像素的均值。更新像素值将该邻域的均值赋给当前像素点完成平滑处理。 在Python中可以通过使用OpenCV库来实现均值滤波。
import cv2
import numpy as np# 读取图像
image cv2.imread(image.jpg)# 使用3x3的均值滤波器
result cv2.blur(image, (3, 3))# 显示原图和处理后的图像
cv2.imshow(Original Image, image)
cv2.imshow(Filtered Image, result)# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()此代码利用OpenCV中的cv2.blur()函数应用3x3大小的均值滤波器对图像进行平滑处理。 均值滤波是一种简单而有效的图像去噪方法适用于去除随机噪声。然而由于它会模糊图像细节尤其是边缘因此在需要保留细节的场景下可能需要使用更复杂的滤波算法如高斯滤波或中值滤波。 2、高斯滤波 原理利用高斯分布对图像进行加权平均处理权重较高的像素对结果的贡献较大权重较低的像素对结果的影响较小。效果高斯滤波比均值滤波保留更多的图像结构减少了噪声的同时边缘损失较少平滑效果较为自然。实现使用高斯函数生成卷积核然后用该卷积核对图像进行卷积操作。 高斯滤波Gaussian Filtering是一种常见的图像处理方法主要用于去除图像中的噪声或平滑图像。它通过卷积运算与高斯函数正态分布函数相结合对图像进行模糊处理。高斯滤波的核心思想是使用一个高斯核即一个矩阵与图像进行卷积从而在图像上应用模糊效果减弱细节并减少噪声。 1高斯函数
高斯滤波的基础是高斯函数它的公式如下 是高斯分布的值表示在点处的权重。是高斯函数的标准差控制高斯分布的宽度。标准差越大平滑效果越强标准差越小平滑效果越弱。是相对于高斯滤波器中心点的坐标。 这个高斯函数呈现钟形曲线值在中心最大随着远离中心的距离增大值逐渐减小。因此高斯滤波会根据距离中心的远近对周围像素赋予不同的权重离中心越远的像素权重越小。 2高斯滤波的卷积核 高斯滤波通常通过一个卷积核或称为滤波器来实现该核是基于二维高斯函数构造的。卷积核的大小决定了滤波的效果通常为奇数尺寸如3×3、5×5、7×7等。 例如一个简单的3×3高斯核可能如下所示假设 这个矩阵表示了高斯滤波器的权重。每个像素的值都被乘以相应的位置权重然后加总得到新的像素值。高斯滤波器对图像进行卷积时权重较大的像素会对中心像素的影响更大而权重较小的像素则对其影响较小。
3高斯滤波的操作过程 高斯滤波的基本操作过程可以分为以下几步 选择卷积核大小和标准差 选择一个适合的高斯核并确定标准差来控制平滑程度。 对每个像素进行卷积操作对图像中的每个像素位置使用高斯核与其周围的像素进行卷积运算。卷积的计算方式是将高斯核与图像像素值逐点相乘得到加权和。 更新像素值将卷积运算得到的加权和作为该像素的新值。 处理边界问题在边缘或角落处由于周围像素不足以填满整个卷积核可以采用零填充、镜像填充等方法来处理。 在Python中可以通过使用OpenCV库来实现高斯滤波。
import cv2# 读取图像
image cv2.imread(image.jpg)# 使用高斯滤波进行图像平滑(5, 5)为核大小0为自动计算标准差
blurred_image cv2.GaussianBlur(image, (5, 5), 0)# 显示原图与处理后的图像
cv2.imshow(Original Image, image)
cv2.imshow(Gaussian Blurred Image, blurred_image)# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()3、中值滤波 原理将每个像素值替换为其邻域内所有像素值的中位数。效果中值滤波对于去除椒盐噪声即黑白像素的随机分布非常有效比均值滤波更能保留边缘信息。实现遍历图像每次将一个窗口内的像素值排序取其中间的值作为当前像素的值。 中值滤波Median Filtering是一种常用的图像平滑和去噪方法尤其在处理椒盐噪声时表现优异。它的基本思想是对于图像中的每个像素将该像素的邻域内像素值按大小排序然后用排序后的中位数值替代当前像素的值。中值滤波不仅能有效去除噪声还能较好地保留图像的边缘特征。 1中值滤波的原理
与均值滤波不同中值滤波并不是取邻域像素的平均值而是选择邻域内像素值的中位数。中位数是指一组数据按大小排序后位于中间位置的值。对于一个大小为的邻域窗口将该邻域的像素值排序并取中间的值作为当前像素的新值。
例如对于一个 3×3 的邻域窗口
[ 7, 2, 3 ]
[ 5, 8, 1 ]
[ 4, 9, 6 ]排序后的像素值为
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]中位数是排序后的中间值位置为第五个元素即 5。因此这个窗口中心的像素值将被替换为 5。
2中值滤波的步骤 选择窗口大小通常选择一个的邻域窗口例如 3×3, 5×5 等。窗口大小为奇数确保有一个明确的中心点。遍历图像对图像中的每个像素点进行操作取该像素及其邻域的像素值。排序并替换将邻域内的像素值排序取排序后的中位数并用该中位数值替代当前像素的值。处理边界对于图像的边缘像素邻域可能会超出图像范围通常可以采取填充边界或镜像填充等方法处理。 3中值滤波的优缺点 优点 去噪效果好中值滤波能够有效去除椒盐噪声因为椒盐噪声通常是极端的亮点或暗点而中值滤波能够将这些极端值替换为邻域的中位数。保边缘能力强相比均值滤波中值滤波对图像的边缘信息影响较小因为它不会对像素值进行平均化而是通过排序选择合适的中位数来替换。无需假设噪声分布与高斯滤波等方法不同中值滤波不依赖于噪声的统计特性因此对不同类型的噪声具有较好的鲁棒性。 缺点 计算复杂度较高对于每个像素需对邻域像素进行排序时间复杂度为尤其是当图像较大时计算量较大。对细节有一定影响尽管中值滤波能有效去除噪声但在处理较复杂的图像时过度滤波可能会导致图像细节的损失。 在OpenCV中可以使用cv2.medianBlur()函数实现中值滤波。
import cv2# 读取图像
image cv2.imread(image.jpg)# 使用3x3的中值滤波
median_blurred_image cv2.medianBlur(image, 3)# 显示原图与处理中值滤波后的图像
cv2.imshow(Original Image, image)
cv2.imshow(Median Filtered Image, median_blurred_image)# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()cv2.medianBlur(image, ksize)这个函数接受两个参数image 是输入图像ksize 是滤波器的大小通常为奇数例如 3、5、7 等。它会使用一个 k×k 的邻域进行中值滤波。 中值滤波是一种有效的图像去噪方法尤其适用于去除椒盐噪声。它的主要优点是能够在去噪的同时保留边缘和细节信息因此在许多图像处理和计算机视觉任务中得到了广泛应用。尽管它的计算复杂度相对较高但它对于处理噪声的鲁棒性和效果常常使其成为首选方法之一。 4、双边滤波 原理双边滤波不仅考虑像素空间中的邻近关系还考虑像素值的相似性能够在平滑图像的同时保留边缘。效果在去噪的同时能较好地保留图像的边缘信息适用于去除细微噪声且保持图像细节的场景。实现双边滤波结合了空间距离和像素值差异进行加权处理相较于其他滤波器计算复杂度较高。 双边滤波Bilateral Filtering是一种在图像处理中常用的非线性滤波方法能够在平滑图像的同时保留图像的边缘信息。与传统的线性滤波方法如均值滤波、高斯滤波不同双边滤波不仅考虑像素的空间邻近性还考虑像素值的相似性这使得它在处理图像细节和边缘时表现出色。 1双边滤波的原理 双边滤波的核心思想是在每个像素的邻域内进行加权平均但权重不仅依赖于空间距离还依赖于像素值的相似度。这种加权方式使得在平滑区域没有边缘的地方能够有效地进行平滑而在边缘附近则能够保留边缘信息。 对于图像中的每个像素点 双边滤波通过以下步骤进行 空间权重基于像素之间的空间距离越靠近的像素其权重越大。像素值权重基于像素值之间的相似度像素值相似的点给予更高的权重。加权平均最终通过计算空间和像素值的加权平均来得到新的像素值。 2双边滤波的数学公式
对于图像中一个像素其经过双边滤波后的值是通过加权平均其邻域内像素值得到的公式如下 3双边滤波的步骤 计算邻域内像素的空间权重使用高斯函数计算像素之间的空间距离权重。计算像素值的相似性权重使用高斯函数计算像素值之间的差异权重。计算加权平均对每个像素考虑空间权重和像素值权重的加权平均得到新的像素值。归一化处理为了使得加权平均的结果合理需要对加权和进行归一化通常会通过计算一个归一化因子来完成。 4双边滤波的优缺点 优点 边缘保留双边滤波能够在去噪的同时保持图像的边缘信息因此特别适合去除噪声同时保持细节的任务。非线性由于双边滤波是基于像素值的相似度加权的因此它是非线性的可以很好地处理图像中的各种噪声。适用性广泛双边滤波不仅可以用于图像去噪还可以用于图像平滑、纹理去除等多种应用。 缺点 计算量大由于双边滤波需要计算每个像素与其邻域内其他像素的空间距离和像素值差异因此其计算量较大尤其是在高分辨率图像上效率较低。参数调节困难双边滤波有两个重要的参数空间权重的标准差和像素值权重的标准差需要根据图像的不同特性进行调节调节不当可能会导致过度平滑或保留过多噪声。 在OpenCV中可以使用cv2.bilateralFilter()函数实现双边滤波。
import cv2# 读取图像
image cv2.imread(image.jpg)# 使用直径为15标准差为75的双边滤波
bilateral_filtered_image cv2.bilateralFilter(image, d15, sigmaColor75, sigmaSpace75)# 显示原图与双边滤波后的图像
cv2.imshow(Original Image, image)
cv2.imshow(Bilateral Filtered Image, bilateral_filtered_image)# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()