OpenCV计算机视觉 03 椒盐噪声的添加与常见的平滑处理方式(均值、方框、高斯、中值)

上一篇文章:OpenCV计算机视觉 02 图片修改 图像运算 边缘填充 阈值处理

目录

添加椒盐噪声

图像平滑常见处理方式

均值滤波 (blur)

方框滤波 (boxFilter)

​高斯滤波 (GaussianBlur)

中值滤波 (medianBlur)


添加椒盐噪声

def add_peppersalt_noise(image, n=10000):result = image.copy()h, w = image.shape[:2]    # 获取图片的高和宽for i in range(n):    # 生成n个椒盐噪声x = np.random.randint(1, h)y=  np.random.randint(1, w)if np.random.randint(0, 2) == 0:result[x, y] = 0else:result[x,y] = 255return result
​
image = cv2.imread('tu.png')
cv2.imshow('original',image)
cv2.waitKey(0)
noise = add_peppersalt_noise(image)
cv2.imwrite(r'noise.png',noise)#保存一下,等会我们做平滑操作
cv2.imshow('noise',noise)
cv2.waitKey(0)

图像平滑常见处理方式

图像平滑(smoothing)也称为“模糊处理”(bluring), 是一项简单且使用频率很高的图像处理方法。图像平滑处理可以用来压制、弱化或消除图像中的细节、突变、边缘和噪声。但最常见的是用来减少图像上的噪声或者失真。降低图像分辨率时,平滑处理是很重要的。下面是常用的一些滤波器

  • 均值滤波(邻域平均滤波)–> blur函数

  • 方框滤波–> boxFilter函数

  • 高斯滤波–>GaussianBlur函数

  • 中值滤波–>medianBlur函数

均值滤波 (blur)

是指用当前像素点周围 n*n 个像素值的均值来代替当前像素值。边界点的处理可以扩展当前图像的周围像素点padding.

特别注意,核数尽量选奇数不选偶数,原因是当核大小为奇数时,能够明确地定义一个中心像素。这样在计算平均值时,更容易确定以哪个像素为中心进行周边像素值的平均计算。当边界像素周围的像素数量不足 n×n 个,为了能够对边界像素也进行均值滤波计算,就通过在图像的四周添加额外的像素(即 padding)来补足所需的像素数量。这些添加的像素值可以是 0、图像边缘像素的重复值或者通过其他特定的算法计算得到的值,从而使得边界像素也能像内部像素一样进行完整的 n×n 区域的均值计算。

     

'''
dst=cv2.blur(src,ksize,anchor,borderType)dst是返回值src是需要处理的图像kszie是滤波核(卷积核)的大小anchor是锚点,默认值是(-1,-1)一般无需更改borderType是边界样式,一般无需更改一般情况下,使用dst=cv2.blur(src,ksize)即可
'''
blur_1 = cv2.blur(noise,(3,3))  #卷积核为3,3   效果一般,清晰度一般
cv2.imshow('blur_1',blur_1)
cv2.waitKey(0)
​
blur_2 = cv2.blur(noise,(5,5))#卷积核为5,5    效果好但模糊
cv2.imshow('blur_2',blur_2)
cv2.waitKey(0)
cv2.destroyAllWindows()

优点:

  • 算法简单,计算效率高。
  • 能有效地平滑均匀分布的噪声。

缺点:

  • 会使图像变得比较模糊,因为它对所有像素一视同仁,丢失了图像的细节和边缘信息。
方框滤波 (boxFilter)

方框滤波是指用当前像素点周围nxn个像素值的和来代替当前像素值。

'''
dst=cv2.boxFilter(src,ddepth,ksize,anchor,normalize,borderType)式中:● dst是返回值,表示进行方框滤波后得到的处理结果。● src 是需要处理的图像,即原始图像。● ddepth是处理结果图像的图像深度,一般使用-1表示与原始图像使用相同的图像深度。● ksize 是滤波核的大小。滤波核大小是指在滤波处理过程中所选择的邻域图像的高 度和宽度。● anchor 是锚点,(指对应哪个区域)● normalize 表示在滤波时是否进行归一化。1.当值为True时,归一化,用邻域像素值的和除以面积。  此时方框滤波与 均值滤波 效果相同。2.当值为False时,不归一化,直接使用邻域像素值的和。和>255时使用255
'''
boxFilter_1 = cv2.boxFilter(noise,-1,(3,3),normalize = True)
cv2.imshow('boxFilter_1',boxFilter_1)
cv2.waitKey(0)
boxFilter_2 = cv2.boxFilter(noise,-1,(3,3),normalize = False)
cv2.imshow('boxFilter_2',boxFilter_2)
cv2.waitKey(0)

优点:

  • 计算相对简单,速度较快。
  • 对于一些平滑程度要求不高的情况,可以快速达到一定的平滑效果。

缺点:

  • 如果未进行归一化,可能会导致像素值超出正常范围(例如 0 - 255),出现异常的结果。
  • 与均值滤波类似,可能会使图像变得模糊,丢失部分细节。
高斯滤波(GaussianBlur)

使用高斯函数来确定滤波核中每个像素的权重。离中心像素越近,权重越大;离中心像素越远,权重越小。再对滤波核覆盖区域内的像素进行加权平均,得到中心像素的新值。

'''
cv2.GaussianBlur(src, ksize[, sigmaX[, sigmaY[, dst]]])高斯滤波
参数说明:
src:输入图像,通常是一个NumPy数组。
ksize:滤波器的大小,它是一个元组,表示在水平和垂直方向上的像素数量。例如,(5, 5)表示一个5x5的滤波器。
sigmaX和sigmaY:分别表示在X轴和Y轴方向上的标准差。这些值与滤波器大小相同。默认情况下,它们都等于0,这意味着没有高斯模糊。
dst:输出图像,通常是一个NumPy数组。如果为None,则会创建一个新的数组来存储结果。
'''
GaussianB = cv2.GaussianBlur(noise,(3,3),1) #标准差为1,标准正太分布。
cv2.imshow('GaussianBlur_k=3_s=1',GaussianB)
cv2.waitKey(0)
GaussianB = cv2.GaussianBlur(noise,(3,3),2) 
cv2.imshow('GaussianBlur_k=3_s=2',GaussianB)
cv2.waitKey(0)
GaussianB = cv2.GaussianBlur(noise,(5,5),1) #标准差为1,标准正太分布。
cv2.imshow('GaussianBlur_k=5_s=1',GaussianB)
cv2.waitKey(0)

优点:

  • 相比均值滤波,能更好地保留图像的边缘和细节,因为其权重分配更符合图像的特征。
  • 对高斯噪声有较好的抑制效果。

缺点:

  • 计算复杂度相对较高,因为需要计算每个像素的权重。
中值滤波(medianBlur)

会取当前像素点及其周围临近像素点(一共有奇数个像素点)的像素值,将这些像素值从小到大排序,然后将位于中间位置的像素值作为当前像素点的像素值。

medianBlur函数:

'''
cv2.medianBlur(src, ksize[, dst])中值滤波
参数说明:
src:输入图像。
ksize:滤波器的大小,它是一个整数,表示在水平和垂直方向上的像素数量。例如,5表示一个5x5的滤波器。
dst:输出图像,通常是一个NumPy数组。如果为None,则会创建一个新的数组来存储结果。
'''
medianB = cv2.medianBlur(noise,3)
cv2.imshow('medianBlur_k=3',medianB)
cv2.waitKey(0)
medianB = cv2.medianBlur(noise,5)
cv2.imshow('medianBlur_k=5',medianB)
cv2.waitKey(0)
cv2.destroyAllWindows()

优点:

  • 对椒盐噪声有非常好的去除效果。
  • 能够在去除噪声的同时较好地保护图像的边缘信息。

缺点:

  • 对于一些细节丰富的图像,可能会使部分细节变得模糊。

综合来看,中值滤波处理椒盐噪声效果最好!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497657.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

告别 $arr[0]: PHP 和 Laravel 中更优雅的数组处理方式

你是否曾经历过这样的惊魂时刻:线上代码突然崩溃,只因访问了一个不存在的数组元素?或者更糟的是,应用开始疯狂抛出错误,而你却毫无头绪?这一切的罪魁祸首可能就是看似人畜无害的硬编码数组索引,…

uniapp 微信小程序 数据空白展示组件

效果图 html <template><view class"nodata"><view class""><image class"nodataimg":src"$publicfun.locaAndHttp()?localUrl:$publicfun.httpUrlImg(httUrl)"mode"aspectFit"></image>&l…

【开源免费】基于SpringBoot+Vue.JS网上摄影工作室系统(JAVA毕业设计)

本文项目编号 T 103 &#xff0c;文末自助获取源码 \color{red}{T103&#xff0c;文末自助获取源码} T103&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

SOEM裸机移植

源码地址 https://gitee.com/rathon/apollof429-v2.git 还有一些移植细节可以参考我之前写的一些博客 硬件平台&#xff1a; 正点原子APOLLOF429V2开发板 开发环境 stm32cubemx6.2.0版本&#xff0c;用的库为STM32Cube_FW_F4_V1.26.2&#xff0c;开发软件为STM32cubeide …

智慧地下采矿:可视化引领未来矿业管理

图扑智慧地下采矿可视化平台通过整合多源数据&#xff0c;提供实时 3D 矿井地图及分析&#xff0c;提升了矿产开采的安全性与效率&#xff0c;为矿业管理提供数据驱动的智能决策支持&#xff0c;推动行业数字化转型。

基于Docker+模拟器的Appium自动化测试(二)

模拟器的设置 打开“夜神模拟器”的系统设置&#xff0c;切换到“手机与网络”页&#xff0c;选中网络设置下的“开启网络连接”和“开启网络桥接模式”复选框&#xff0c;而后选择“静态IP”单选框&#xff0c;在IP地址中输入“192.168.0.105”&#xff0c;网关等内容不再赘述…

紫光同创-盘古200pro+开发板

本原创文章由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 一、开发系统介绍 开发系统概述 MES2L676-200HP 开发板采用紫光同创 logos2 系列 FPGA&#xff0c;型号&#xff1a;…

Rofin罗芬激光Principle and Advantages原理讲解PPT软件使用

Rofin罗芬激光Principle and Advantages原理讲解PPT软件使用

import org.springframework.data.jpa.repository.JpaRepository<T, ID>;

org.springframework.data.jpa.repository.JpaRepository<T, ID> 接口中的 ID 类型参数。 理解 JpaRepository<T, ID> 中的 T 和 ID&#xff1a; T (Type): T 代表的是你想要操作的 实体类 的类型。例如&#xff0c;如果你有一个名为 User 的实体类&#xff0c;那…

docker项目部署流程(Vue+Spingboot)

文章目录 1.docker安装(Ubuntu)1.卸载原有的docker引擎和旧版本软件包(第一次使用跳过)2.使用存储库安装apt 2.安装nginx并运行3.安装Mysql4.构建jdk镜像1.准备条件(3样东西)拉取ubuntu镜像DockerfileDockerfile简洁版 2.构建java镜像3.创建并运行java容器 5.网络配置1.自定义网…

《童年-高尔基》阅读笔记

《童年-高尔基》阅读笔记 2024-12-29日读完&#xff0c;在图书馆的书架上&#xff0c;大批的厚厚的外国文学书&#xff0c;只有这本薄薄的&#xff0c;我就拿下来看了一下&#xff0c;发现这本书就是初中就在语文课本中提到的自传体三部曲之一&#xff0c;其他两本是《在人间》…

fpga系列 HDL:ModelSim显示模拟波形以及十进制格式数值

FPGA中使用数字滤波器时&#xff0c;可通过观察模拟波形更好地查看滤波效果。可以通过ModelSim中的波形格式设置来实现更直观的波形显示。 右键波形->Format-> Analog 效果 不同的数值格式显示&#xff1a;右键波形->Radix-> Decimal 效果 示例代码 ver…

AI大模型语音识别转文字

提取音频 本项目作用在于将常见的会议录音文件、各种语种音频文件进行转录成相应的文字&#xff0c;也可从特定视频中提取对应音频进行转录程文字保存在本地。最原始的从所给网址下载对应视频和音频进行处理。下载ffmpeg(https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-…

《计算机组成及汇编语言原理》阅读笔记:p128-p132

《计算机组成及汇编语言原理》学习第 10 天&#xff0c;p128-p132 总结&#xff0c;总计 5 页。 一、技术总结 1.8088 organization and architecture 8088处理器是16位电脑&#xff0c;寄存器是16位&#xff0c;数据总线(data bus)是8位&#xff0c;地址总线是20位。 (1)g…

【ArcGIS Pro】完整的nc文件整理表格模型构建流程及工具练习数据分享

学术科研啥的要用到很多数据&#xff0c;nc文件融合了时间空间数据是科研重要文件。之前分享过怎样将nc文件处理成栅格后整理成表格。小编的读者还是有跑不通整个流程的&#xff0c;再来做一篇总结篇&#xff0c;也分享下练习数据跟工具&#xff0c;如果还是弄不了的&#xff0…

安装了python,环境变量也设置了,但是输入python不报错也没反应是为什么?window的锅!

目录 问题 结论总结 衍生问题 1 第1步&#xff1a;小白python安装&#xff0c;不要埋头一直点下一步&#xff01;&#xff01;&#xff01; 2 第2步&#xff1a;可以选择删了之前的&#xff0c;重新安装python 3 第3步&#xff1a;如果你不想或不能删了重装python&#…

图像处理-Ch7-快速小波变换和小波包

个人博客&#xff01;无广告观看&#xff0c;因为这节内容太多了&#xff0c;有点放不下&#xff0c;分了三节 文章目录 快速小波变换(The Fast Wavelet Transform)与两频段子带编译码系统的关系例&#xff1a;计算一维小波变换 一维快速小波反变换例&#xff1a;计算一维小波…

【从零开始】11. LLaMA-Factory 微调 Qwen 模型(番外篇)

书接上回&#xff0c;在完成了 RAGChecker 测试后&#xff0c;离 RAG 应用真正发布还差最后一步 - 基础信息指令微调。考虑到模型还是需要具备一定程度的“自我认知”&#xff0c;因此需要将公司信息“嵌入”到模型里面的。为此&#xff0c;我选择了 LLaMA-Factory&#xff08;…

小程序配置文件 —— 15 页面配置

页面配置 小程序的页面配置&#xff0c;也称为局部配置&#xff0c;每一个小程序页面也可以使用自己的 .json 文件来对页面的窗口表现进行配置&#xff1b; 需要注意的是&#xff1a;页面配置文件的属性和全局配置文件中的 window 属性几乎一致&#xff0c;只不过这里不需要额…

Linux高级--2.4.5 靠协议头保证传输的 MAC/IP/TCP/UDP---协议帧格式

任何网络协议&#xff0c;都必须要用包头里面设置写特殊字段来标识自己&#xff0c;传输越复杂&#xff0c;越稳定&#xff0c;越高性能的协议&#xff0c;包头越复杂。我们理解这些包头中每个字段的作用要站在它们解决什么问题的角度来理解。因为没人愿意让包头那么复杂。 本…