当前位置: 首页 > 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.dtcms.com/a/361275.html

相关文章:

  • 解锁水系电池机理:原位谱学测试方案全解析-测试GO
  • Apache Commons ConvertUtils
  • FFMPEG 10BIT下 Intel b570 qsv 硬解AV1,H265视频编码测试
  • 《Shell 大道:筑基篇(上)—— 神念控流程,函数成符阵》
  • 机器学习——模型架构
  • ✝常用表格✝
  • 读《独角兽项目:数字化转型》
  • 【开题答辩全过程】以 基于微信小程序的校园二手物品交易平台的设计与实现为例,包含答辩的问题和答案
  • 分布式光伏模式怎么选?从 “凭经验” 到 “靠数据”,iSolarBP 帮你锁定最优解
  • 苹果WWDC25开发秘鉴:AI、空间计算与Swift 6的融合之道
  • 领码方案:低代码平台前端缓存与 IndexedDB 智能组件深度实战
  • GDAL 简介
  • FAST API部署和使用
  • java讲解自己对业务架构、数据架构、应用架构的理解
  • gh-pages部署github page项目
  • 【机器学习入门】5.1 线性回归基本形式——从“选西瓜”看懂线性模型的核心逻辑
  • A2A + MCP 的python实现的最小可运行骨架
  • duilib中CTextUI控件使用技巧与问题总结(CTextUI控件自适应文字宽度特性)
  • 五、练习2:Git分支操作
  • 四、操作系统
  • 腾讯混元翻译大模型Hunyuan-MT-7B:重塑跨语言沟通的技术革命
  • 2025年应届生求职加分指南:这些新兴技能路径让你脱颖而出
  • 电子电气架构 --- 智能电动车EEA电子电气架构(下)
  • 【LeetCode 热题 100】5. 最长回文子串——中心扩散法
  • Linux按键输入实验
  • (纯新手教学)计算机视觉(opencv)实战十一——轮廓近似(cv2.approxPolyDP)
  • Python OpenCV图像处理与深度学习:Python OpenCV特征检测入门
  • “人工智能+”时代的端侧AI:算力下沉与实时视频的新基座
  • crypto-whatkey(2025YC行业赛)
  • 【OpenFeign】基础使用