当前位置: 首页 > news >正文

计算机视觉(五):blur

计算机视觉中的图像模糊(blur)是一种常见的图像处理技术,其核心是减少图像中高频细节信息,使图像变得平滑。高频信息通常代表图像中的边缘、纹理和噪声,而低频信息则代表图像的平滑区域。通过模糊处理,我们可以有效地降低这些高频信息的强度,从而达到各种目的。

图像模糊的原理

图像模糊的本质是卷积(convolution)运算。简单来说,卷积就是用一个小的、预先定义的矩阵(称为卷积核或滤波器)在图像上滑动,对每个像素及其邻域内的像素进行加权平均。这个加权平均的结果就是新的像素值。

  • 卷积核(Convolution Kernel): 这是一个小的矩阵,定义了模糊操作的权重。不同的模糊算法使用不同的卷积核。
  • 加权平均(Weighted Averaging): 在卷积过程中,卷积核中的每个值都对应于图像中相应位置的像素,将这些像素值乘以对应的权重,然后求和。这个和就是新的中心像素值。由于卷积核中的权重通常是归一化的(总和为1),这个过程实际上是一种加权平均。

几种常见的图像模糊算法

高斯模糊(Gaussian Blur)

高斯模糊是应用最广泛、效果最自然的一种模糊算法。它的核心是使用高斯函数来生成卷积核。高斯函数是一种钟形曲线,其中心值最高,向四周逐渐衰减。这意味着距离中心像素越近的像素,在加权平均中占的权重越大;而距离越远的像素,权重越小。

  • 原理: 使用一个服从高斯分布的卷积核与图像进行卷积。这个卷积核中的权重是根据高斯函数计算得出的,距离中心点越近,权重越大。
  • 效果: 产生一种平滑、自然的模糊效果,类似于从远处看物体。它能有效地去除图像中的随机噪声。
  • 参数: 主要参数是标准差(σ)。σ 越大,高斯分布越平坦,卷积核的尺寸也越大,模糊效果越明显。

均值模糊(Mean Blur)

均值模糊,也称为盒式模糊(Box Blur),是最简单的一种模糊算法。

  • 原理: 使用一个所有元素都相等的卷积核(例如一个所有值都为1的矩阵)与图像进行卷积。这意味着每个新像素的值是其邻域内所有像素的简单平均值。
  • 效果: 产生一种比较生硬的模糊效果,因为所有邻域像素的权重都相同。这会导致图像边缘出现“块状”的感觉。
  • 参数: 主要参数是卷积核的大小,如 3×3 或 5×5。

中值模糊(Median Blur)

中值模糊与前两种基于加权平均的模糊不同,它是一种非线性滤波。

  • 原理: 在卷积核滑动的每个位置,它不是计算加权平均,而是找到该邻域内所有像素的中值(Median),然后用这个中值来替换中心像素的值。
  • 效果: 非常擅长去除椒盐噪声(Salt-and-pepper noise)。椒盐噪声通常是图像中的一些随机黑点或白点。由于中值滤波会用周围的正常像素来替换这些异常值,因此对这类噪声有很好的抑制作用,同时能保留大部分图像边缘的清晰度。
  • 应用: 主要用于去除图像中的脉冲噪声,而不是用于产生一般的模糊效果。

opencv实现blur

使用 cv2.blur()实现均值模糊

import cv2
import numpy as np# 创建一个示例图像(一个蓝色的正方形)
image = np.zeros((300, 300, 3), dtype='uint8')
cv2.rectangle(image, (50, 50), (250, 250), (255, 0, 0), -1)# 定义模糊核的大小,例如 5x5
kernel_size = (5, 5)# 应用均值模糊
blurred_image = cv2.blur(image, kernel_size)# 显示原始图像和模糊后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Blurred Image (Mean Blur)', blurred_image)cv2.waitKey(0)
cv2.destroyAllWindows()

实现效果:

在这里插入图片描述

使用 cv2.GaussianBlur()实现高斯模糊

import cv2
import numpy as np# 创建一个示例图像
image = np.zeros((300, 300, 3), dtype='uint8')
cv2.putText(image, "OpenCV", (60, 160), cv2.FONT_HERSHEY_SIMPLEX, 2, (255, 255, 255), 5)# 定义高斯核的大小
ksize = (21, 21)# 定义标准差,越大模糊效果越明显
sigma = 5# 应用高斯模糊
gaussian_blurred_image = cv2.GaussianBlur(image, ksize, sigma)# 显示原始图像和高斯模糊后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Gaussian Blurred Image', gaussian_blurred_image)cv2.waitKey(0)
cv2.destroyAllWindows()

实现效果:

在这里插入图片描述

使用 cv2.medianBlur() 实现中值模糊

import cv2
import numpy as np# 创建一个带有椒盐噪声的示例图像
image = np.zeros((300, 300), dtype='uint8')
cv2.putText(image, "Noise", (60, 160), cv2.FONT_HERSHEY_SIMPLEX, 2, (255, 255, 255), 5)# 随机添加一些椒盐噪声(黑点和白点)
rows, cols = image.shape
for i in range(1000):y = np.random.randint(0, rows)x = np.random.randint(0, cols)image[y, x] = np.random.choice([0, 255])# 定义中值滤波的核大小(必须是奇数)
kernel_size = 5# 应用中值模糊
median_blurred_image = cv2.medianBlur(image, kernel_size)# 显示原始图像和中值模糊后的图像
cv2.imshow('Original Image with Noise', image)
cv2.imshow('Median Blurred Image', median_blurred_image)cv2.waitKey(0)
cv2.destroyAllWindows()

实现效果:

在这里插入图片描述

http://www.xdnf.cn/news/1424665.html

相关文章:

  • 原子操作(Atomic Operation) 是指不可被中断的操作——要么完整执行,要么完全不执行
  • 贵州在假期及夏天结束后保持旅游活力的策略分析
  • AI如何重塑电力工程设计?揭秘良策金宝AI的六大“超能力”
  • SQLSERVER关键字:N
  • VBA数据库解决方案第二十二讲:根据工作表数据生成数据库中数据表
  • 算法练习——189.轮转数组
  • 【逆序对 博弈】P10737 [SEERC 2020] Reverse Game|普及+
  • 【开题答辩全过程】以 基于JSP的养生网站设计与实现为例,包含答辩的问题和答案
  • MySQL 中 InnoDB 引擎的事务隔离级别与“可重复读”隔离级别下的 SQL 编写规范
  • Linux 进程间通信(IPC)
  • 大型语言模型微调 内容预告(69)
  • 【Docker】2025版Ubuntu 22.04 安装 Docker Docker Compose 指南
  • 电力工程师的AI时代已来,这6大功能彻底颠覆传统工作模式
  • 系统性学习数据结构-第二讲-顺序表与链表
  • 金融数据安全
  • 基于单片机汽车防盗系统/汽车安全防丢系统
  • 动态代理设计模式
  • 多模态大语言模型部署
  • Java泛型通配符详解:搞懂?/extends/super用法,避开集合操作踩坑点
  • 二、感知机
  • 高防IP防护效果评估全攻略:从指标解读到实战测试
  • langgraph / openmanus / suna 对比
  • 数据安全不用愁,群晖NAS让你存得放心、用得安心
  • 深度学习环境搭建运行(二) Ubuntu22.04安装基于CUDA11.8的ONNXRuntime-gpu1.18.1详细步骤(新手入门)
  • 联邦学习的文献复现与创新思路指导
  • Qt 项目文件(.pro)中添加 UI 文件相关命令
  • 深度学习】--卷积神经网络
  • k8s--etcd
  • h5实现内嵌微信小程序支付宝 --截图保存海报分享功能
  • authentication port-control auto 和 dot1x port-control auto