请人代做谷歌外贸网站,wordpress前端空白,建设项目管理公司网站,贵州省住房和城乡建设厅官网站首页文章目录 概要2D 卷积#xff08;图像过滤#xff09;模糊图像#xff08;平滑图像#xff09;中值模糊双边过滤小结 概要
在图像处理中#xff0c;低通滤波器是一种常用的技术#xff0c;用于平滑、模糊或降低图像的噪音。这种滤波器通过去除图像中高频部分#xff08… 文章目录 概要2D 卷积图像过滤模糊图像平滑图像中值模糊双边过滤小结 概要
在图像处理中低通滤波器是一种常用的技术用于平滑、模糊或降低图像的噪音。这种滤波器通过去除图像中高频部分即变化较快的部分来实现这些效果。通过应用2D卷积操作低通滤波器将每个像素的值与其周围像素的值进行加权平均从而实现图像的平滑处理。
在实际应用中我们可以定制不同类型的低通滤波器例如平均滤波器、高斯滤波器等根据需求选择合适的滤波器。平均滤波器将像素的值替换为其周围像素值的平均值从而消除图像中的高频噪音。而高斯滤波器则使用高斯函数生成一个权重矩阵将像素值进行加权平均使得距离中心像素越远的像素权重越小实现更加自然的平滑效果。
定制的低通滤波器可以根据图像特性进行调整例如在面对强烈噪音时增加滤波器的大小或者根据图像中对象的大小调整滤波器的标准差。这种灵活性使得低通滤波器在图像处理中具有广泛的应用例如在计算机视觉中的目标检测、图像识别、医学图像处理等领域。
2D 卷积图像过滤
使用各种低通滤波平滑图像 将定制的过滤器应用在图像上2D卷积
OpenCV提供了一个非常有用的函数即cv.filter2D该函数允许我们将一个图像和一个自定义的核也称为滤波器进行卷积操作。举个例子如果我们想在一幅图像上尝试平均滤波我们可以使用一个简单的平均核该核中的所有元素值相等代表了平均操作。通过使用cv.filter2D函数我们可以将这个平均核应用到图像上从而实现平均滤波的效果。
这种滤波技术不仅可以用于去除图像中的噪声还可以在图像处理任务中发挥关键作用比如在边缘检测、图像增强和特征提取等领域。 一个 5 X 5 的平均滤波核如下所示 保持这个核在像素上面将被这个核覆盖的25个像素点的值求平均值然后将这个平均值替换掉最中间那个像素点的值。然后将这个操作应用在图像的所有像素点上。
# 导入必要的库
import numpy as np # 用于数值计算
import cv2 as cv # OpenCV库用于图像处理
import matplotlib.pyplot as plt # 用于绘图和可视化# 读取图像文件 img.png
img cv.imread(img.png)# 定义一个 5x5 的平均滤波核
kernel np.ones((5, 5), np.float32) / 25# 使用 cv2.filter2D 函数将图像与平均滤波核进行卷积
dst cv.filter2D(img, -1, kernel)# 绘制原始图像、平均滤波后的图像并显示
plt.subplot(121) # 创建第一个子图
plt.imshow(img) # 显示原始图像
plt.title(Original) # 设置子图标题为 Original
plt.xticks([]), plt.yticks([]) # 隐藏坐标轴plt.subplot(122) # 创建第二个子图
plt.imshow(dst) # 显示平均滤波后的图像
plt.title(Averaging) # 设置子图标题为 Averaging
plt.xticks([]), plt.yticks([]) # 隐藏坐标轴plt.show() # 显示绘制好的图像 模糊图像平滑图像
图像处理中模糊或称平滑图像是一种常见的操作可以通过低通滤波器与图像进行卷积来实现。这个技术非常有效地去除图像中的噪声因为它能够消除高频内容比如噪声和边缘。然而需要注意的是模糊操作也会稍微模糊图像的边缘尽管有一些特殊的模糊技术可以保持边缘的清晰度。
平均 这是通过将图像与归一化框滤波器进行卷积完成的。它简单的将核下面的像素值求平均并覆盖中间的像素值。这个可以使用函数cv.blur() 或者 cv.boxFilter() 来实现。我们应该指定内核的高度和宽度。一个 3 X 3 的归一化框滤波器如下所示 Note: 如果你不想使用归一化框滤波器那可以使用 cv.boxFilter。将 normalizeFalse 传入函数。
# 导入必要的库
import cv2 as cv # OpenCV库用于图像处理
import numpy as np # 用于数值计算
from matplotlib import pyplot as plt # 用于绘图和可视化# 读取图像文件 img.png
img cv.imread(img.png)# 使用平均模糊平滑技术对图像进行处理卷积核大小为 (5, 5)
blur cv.blur(img, (5, 5))# 绘制原始图像和模糊处理后的图像并显示
plt.subplot(121) # 创建第一个子图
plt.imshow(img) # 显示原始图像
plt.title(Original) # 设置子图标题为 Original
plt.xticks([]), plt.yticks([]) # 隐藏坐标轴plt.subplot(122) # 创建第二个子图
plt.imshow(blur) # 显示平均模糊后的图像
plt.title(Blurred) # 设置子图标题为 Blurred
plt.xticks([]), plt.yticks([]) # 隐藏坐标轴plt.show() # 显示绘制好的图像 2.高斯滤波Gaussian Blur 在高斯滤波中我们使用高斯核替代了盒框滤波器。这种滤波方法已经被集成在OpenCV的cv.GaussianBlur()函数中。在使用高斯滤波时我们需要确定核的高度和宽度这两个数值需要是正数且奇数。此外我们还需要指定X和Y方向上的标准差sigma X和sigma Y。如果只确定了sigma X那么sigma Y的值会被设置为与sigma X相同。如果两者都为0那么它们的值会根据核的大小自动计算。
高斯滤波在去除图像中的高斯噪声方面非常有效。高斯核的权重分布使得中心像素周围的像素对平均值的贡献更大这样可以更好地保留图像的细节。
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt# 读取图像文件 img.png
img cv.imread(img.png)# 使用高斯滤波核大小为 5x5标准差为 0表示自动计算
blur cv.GaussianBlur(img, (5, 5), 0)# 绘制原始图像和高斯滤波处理后的图像并显示
plt.subplot(121) # 创建第一个子图
plt.imshow(img) # 显示原始图像
plt.title(Original) # 设置子图标题为 Original
plt.xticks([]), plt.yticks([]) # 隐藏坐标轴plt.subplot(122) # 创建第二个子图
plt.imshow(blur) # 显示高斯滤波后的图像
plt.title(Blurred) # 设置子图标题为 Blurred
plt.xticks([]), plt.yticks([]) # 隐藏坐标轴plt.show() # 显示绘制好的图像 中值模糊
中值模糊是一种特殊的滤波技术它的原理是在核的覆盖区域内找到像素值的中间值并将中间值赋给核中心的像素点。与其他滤波方法不同中值滤波不是使用计算得到的新值替代中心像素而是直接采用该区域内的中间值。
在OpenCV中中值滤波可以通过cv.medianBlur()函数实现。与其他滤波方法类似中值滤波的核的大小也应该是正数和奇数。这种滤波技术在处理图像中的椒盐噪声图像中随机出现的亮或暗像素点非常有效。因为它通过选择中间值可以避免受到噪声的干扰。
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt# 读取图像文件 img.png
img cv.imread(img.png)# 使用中值模糊核大小为 5x5
blur cv.medianBlur(img, 5)# 绘制原始图像和中值模糊处理后的图像并显示
plt.subplot(121) # 创建第一个子图
plt.imshow(img) # 显示原始图像
plt.title(Original) # 设置子图标题为 Original
plt.xticks([]), plt.yticks([]) # 隐藏坐标轴plt.subplot(122) # 创建第二个子图
plt.imshow(blur) # 显示中值模糊后的图像
plt.title(Blurred) # 设置子图标题为 Blurred
plt.xticks([]), plt.yticks([]) # 隐藏坐标轴plt.show() # 显示绘制好的图像 双边过滤
双边过滤在需要处理噪声但又需要保持图像边缘清晰的场景中非常有效。它的操作由cv.bilateralFilter()函数完成。相较于其他滤波器这个操作相对较慢。我们已经了解到高斯滤波器通过获取像素周围的邻域并计算其高斯加权平均值来进行操作。高斯滤波仅仅是一个空间函数即在滤波时只考虑相邻像素的值。它不会检查像素值是否接近也不会检查一个像素是否是边缘像素。因此它可能会模糊掉一些我们希望保留的边缘细节。
双边滤波在空间上同样使用高斯滤波器但还引入了一个像素强度差异的高斯滤波器。空间上的高斯函数确保只有附近的像素被用来进行模糊处理而像素差异高斯函数确保只有与中心像素具有相似强度的像素被模糊处理。因此它可以保持图像边缘的清晰度因为边缘处的像素会有较大的强度变化不容易被平滑掉。这种特性使得双边滤波在同时保持图像细节和去除噪声的需求下表现出色。
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt# 读取图像文件 img.png
img cv.imread(img.png)# 使用双边过滤参数d表示领域直径sigmaColor表示颜色空间标准差sigmaSpace表示坐标空间标准差
blur cv.bilateralFilter(img, d9, sigmaColor75, sigmaSpace75)# 绘制原始图像和双边过滤处理后的图像并显示
plt.subplot(121) # 创建第一个子图
plt.imshow(img) # 显示原始图像
plt.title(Original) # 设置子图标题为 Original
plt.xticks([]), plt.yticks([]) # 隐藏坐标轴plt.subplot(122) # 创建第二个子图
plt.imshow(blur) # 显示双边过滤后的图像
plt.title(Bilateral Filtered) # 设置子图标题为 Bilateral Filtered
plt.xticks([]), plt.yticks([]) # 隐藏坐标轴plt.show() # 显示绘制好的图像 小结
总之低通滤波器通过2D卷积操作能够有效平滑图像、去除噪音、提高图像质量为各种图像处理任务提供了重要支持。通过定制不同类型的滤波器我们能够根据具体需求进行图像处理获得更清晰、更有信息量的图像结果。