多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

计算机视觉基础|第7章 图像滤波处理(图像降噪)

计算机视觉基础|第7章 图像滤波处理(图像降噪) 目录前言7.1 本章学习目标7.2 前置理论知识7.3 均值滤波cv2.blur7.4 方框滤波cv2.boxFilter7.5 高斯滤波cv2.GaussianBlur7.6 中值滤波cv2.medianBlur椒盐噪声专用7.7 四大滤波算法对比汇总7.8 注意7.9 本章小结前言承接第6章形态学操作。图像在采集、传输过程中易产生各类噪声图像滤波的核心作用是消除图像噪声、平滑画面同时尽可能保留目标边缘细节是图像处理中最基础、最常用的前置操作。7.1 本章学习目标理解图像噪声、图像卷积的底层原理掌握边界填充机制熟练掌握均值滤波、方框滤波、高斯滤波、中值滤波四种常用滤波算法精准区分各类滤波的适配噪声类型明确优缺点掌握卷积核尺寸对滤波效果的影响规律能够根据图像噪声类型灵活选择最优滤波算法7.2 前置理论知识7.2.1 图像噪声概述图像中无规律分布的杂点、雪花、黑白斑点统称为图像噪声会严重影响图像质量和后续图像处理效果。本章重点学习、测试椒盐噪声画面随机分布黑白噪点白色噪点称为“盐”黑色噪点称为“椒”是图像处理中最典型的噪声类型之一。7.2.2 滤波核心本质——图像卷积所有图像滤波的底层原理均为卷积运算通过固定大小的卷积核滑动窗口在整张图像上逐像素滑动根据窗口覆盖范围内的邻域像素值按照对应算法规则计算出新的中心像素值最终实现图像平滑、降噪的效果。核心注意点卷积核尺寸必须为奇数3×3、5×5、17×17等方便确定窗口中心位置卷积核尺寸越大降噪效果越强同时图像模糊程度越高。7.2.3 边界填充机制当卷积核滑动到图像边缘区域时窗口会超出图像边界。OpenCV 会自动对图像边缘做像素填充处理补齐缺失像素确保滤波后的图像尺寸与原图完全一致无需手动处理边界。7.2.4 公共基础代码通用以下代码为本章所有滤波实验的基础依赖实现图片读取、尺寸重置、手动生成椒盐噪声功能所有滤波算法均可直接复用。import cv2 import numpy as np from cv2 import boxFilter def add_peppersalt_img(img, n10000): 自定义函数为图像添加椒盐噪声n为噪点数量数量越大噪声越多 result img.copy() h, w img.shape[:2] # 随机生成黑白噪点 for i in range(n): x np.random.randint(0, w) y np.random.randint(0, h) if np.random.randint(0, 2) 0: result[y, x] 0 # 黑色噪点椒 else: result[y, x] 255 # 白色噪点盐 return result #读取图像并统一缩放尺寸 img cv2.imread(rD:\pythoncode2\bigdata_ai40\Image\girl.png) img cv2.resize(img, (500, 500)) #生成带椒盐噪声的图像 img_noise add_peppersalt_img(img) #展示原图与噪声图 cv2.imshow(原图, img) cv2.imshow(椒盐噪声图, img_noise) cv2.waitKey(0)原图添加噪声7.3 均值滤波cv2.blur原理均值滤波是最简单的线性滤波采用全1卷积核用卷积核窗口内所有像素的平均值替换窗口中心像素值以此抹平图像噪点。边缘像素通过填充邻域像素完成平滑处理。特点与适用场景算法简单、运算速度快缺点是会模糊图像边缘细节降噪强度越高边缘丢失越严重。主要用于去除高斯噪声。实战代码# 均值滤波不同卷积核效果对比 # 3×3小核轻度降噪轻微模糊 blur_3 cv2.blur(img_noise, (3, 3)) # 17×17大核强降噪图像明显模糊 blur_17 cv2.blur(img_noise, (17, 17)) cv2.imshow(均值滤波-3×3核, blur_3) cv2.imshow(均值滤波-17×17核, blur_17) cv2.waitKey(0)7.4 方框滤波cv2.boxFilter原理方框滤波与均值滤波底层逻辑相似核心区别在于可通过normalize参数控制是否归一化灵活切换滤波效果。normalizeTrue归一化窗口像素求和后除以像素总数效果完全等价均值滤波normalizeFalse不归一化直接对窗口像素求和像素值易超过255图像大面积发白参数详解src输入图像depth输出图像深度-1 表示与输入图像深度一致ksize卷积核尺寸anchor核锚点默认(-1,-1)以核中心为基准normalize是否开启归一化示例代码# 方框滤波两种效果对比 # 归一化等价均值滤波 box_normal cv2.boxFilter(img_noise, -1, (3, 3), normalizeTrue) # 不归一化像素求和溢出画面泛白 box_no_normal cv2.boxFilter(img_noise, -1, (3, 3), normalizeFalse) cv2.imshow(方框滤波-归一化, box_normal) cv2.imshow(方框滤波-不归一化, box_no_normal) cv2.waitKey(0)7.5 高斯滤波cv2.GaussianBlur原理高斯滤波是加权平均滤波卷积核权重遵循高斯分布卷积核中心像素权重最大距离中心越远的像素权重越小。通过加权求和计算新像素值兼顾降噪与边缘保留。特点与适用场景降噪效果柔和可最大程度保留图像边缘细节是日常图像处理、工程落地的首选滤波算法专门适配高斯噪声。补充当sigmaX0时OpenCV 会根据卷积核尺寸自动计算高斯标准差无需手动赋值。示例代码# 高斯滤波3×3卷积核、标准差为1 gauss cv2.GaussianBlur(img_noise, (3, 3), sigmaX1) cv2.imshow(高斯滤波-3×3核, gauss) cv2.waitKey(0)7.6 中值滤波cv2.medianBlur椒盐噪声专用原理中值滤波属于非线性滤波将卷积核窗口内所有像素值从小到大排序取中间像素值中位数作为窗口中心的新像素值可直接剔除图像中极端的黑白噪点。特点与适用场景对椒盐噪声降噪效果极佳可精准去除黑白斑点同时完好保留图像边缘参数写法特殊仅需传入奇数数字无需元组格式。实战代码# 中值滤波核大小为3 median cv2.medianBlur(img_noise, 3) cv2.imshow(中值滤波-核大小3, median) cv2.waitKey(0) #释放所有窗口 cv2.destroyAllWindows()7.7 四大滤波算法对比汇总滤波函数核心原理适配噪声类型核心特点cv2.blur均值滤波邻域像素求算术平均值高斯噪声算法简单易模糊图像边缘cv2.boxFilter方框滤波邻域像素求和可归一化通用极少单独使用与均值滤波效果相近实用性低cv2.GaussianBlur高斯滤波邻域像素高斯加权平均高斯噪声工程首选兼顾降噪与边缘保留cv2.medianBlur中值滤波邻域像素取中位数椒盐噪声专治椒盐噪点边缘保留效果好7.8注意所有滤波卷积核必须使用奇数尺寸偶数核无法确定中心会报错或滤波失效。卷积核尺寸与降噪强度、模糊程度正相关需根据图像噪声轻重合理选择。中值滤波参数格式特殊传入数字如3、5不可传入元组。算法选择准则椒盐噪声用中值滤波普通高斯噪声、日常图片降噪用高斯滤波。彩色图像可直接滤波OpenCV 会自动对 BGR 三个通道分别完成卷积运算。7.9 本章小结图像滤波的本质是卷积窗口运算核心作用是消除图像噪声、平滑画面是图像处理前置核心步骤。均值、方框、高斯为线性滤波中值为非线性滤波适配场景各有差异。高斯滤波是通用最优方案中值滤波是椒盐噪声专属解决方案。卷积核越大降噪效果越强但图像细节、边缘模糊越严重需合理取舍。
返回列表