opencv - py_imgproc - py_filtering filtering 过滤-卷积平滑

news2024/11/29 20:34:49

文章目录

  • 平滑图像
    • 目标
    • 2D 卷积(图像过滤)
    • 图像模糊(图像平滑)
      • 1. 平均
      • 2. 高斯模糊
      • 3. 中值模糊
      • 4. 双边滤波
    • 其他资源

平滑图像

目标

学习:

  • 使用各种低通滤波器模糊图像
  • 将定制滤波器应用于图像(2D 卷积)

2D 卷积(图像过滤)

与一维信号一样,图像也可以使用各种低通滤波器 (LPF)、高通滤波器 (HPF) 等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中查找边缘。

OpenCV 提供了一个函数 cv.filter2D() 来将内核与图像进行卷积。作为示例,我们将在图像上尝试平均滤波器。 5x5 平均滤波器内核如下所示:
[ K = 1 25 [ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ] ] [K = \frac{1}{25} \begin{bmatrix} 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \end{bmatrix}] [K=251 1111111111111111111111111 ]
操作如下:将此内核保持在像素上方,添加此内核下方的所有 25 个像素,取平均值,并用新的平均值替换中心像素。此操作将对图像中的所有像素继续进行。尝试此代码并检查结果:

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('opencv_logo.png')

kernel = np.ones((5,5),np.float32)/25
dst = cv.filter2D(img,-1,kernel)

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()

结果:
在这里插入图片描述

图像模糊(图像平滑)

图像模糊是通过将图像与低通滤波器内核进行卷积来实现的。它对于去除噪声很有用。它实际上从图像中去除了高频内容(例如:噪声、边缘)。因此,在此操作中,边缘会稍微模糊一些(也有模糊技术不会模糊边缘)。OpenCV 提供了四种主要类型的模糊技术。

1. 平均

这是通过将图像与标准化盒式滤波器进行卷积来实现的。它只是取内核区域下所有像素的平均值并替换中心元素。这是通过函数 cv.blur()cv.boxFilter() 完成的。查看文档以了解有关内核的更多详细信息。我们应该指定内核的宽度和高度。 3x3 标准化盒式过滤器如下所示:

[ K = 1 9 [ 1 1 1 1 1 1 1 1 1 ] ] [K = \frac{1}{9} \begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{bmatrix}] [K=91 111111111 ]

@note 如果您不想使用标准化盒式过滤器,请使用 cv.boxFilter()。将参数 normalize=False 传递给函数。

查看下面的示例演示,其中内核大小为 5x5:

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

img = cv.imread('opencv-logo-white.png')

blur = cv.blur(img,(5,5))

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()

结果:
在这里插入图片描述

2. 高斯模糊

在此方法中,不使用盒式滤波器,而是使用高斯核。它通过函数 cv.GaussianBlur() 完成。我们应该指定核的宽度和高度,它们应该是正数和奇数。我们还应该分别指定 X 和 Y 方向的标准偏差 sigmaX 和 sigmaY。如果仅指定 sigmaX,则 sigmaY 与 sigmaX 相同。如果两者都为零,则根据核大小计算它们。高斯模糊在从图像中去除高斯噪声方面非常有效。

如果需要,您可以使用函数 cv.getGaussianKernel() 创建高斯核。

可以修改上述代码以进行高斯模糊:

blur = cv.GaussianBlur(img,(5,5),0)

结果:
在这里插入图片描述

3. 中值模糊

这里,函数 cv.medianBlur() 取核区域下所有像素的中值,并将中心元素替换为该中值。这对消除图像中的椒盐噪声非常有效。有趣的是,在上述过滤器中,中心元素是一个新计算的值,可能是图像中的像素值或新值。但在中值模糊中,中心元素总是被图像中的某个像素值替换。它有效地降低了噪声。其核大小应为正奇数。

在此演示中,我在原始图像中添加了 50% 的噪声并应用了中值模糊。检查结果:

median = cv.medianBlur(img,5)

结果:
在这里插入图片描述

4. 双边滤波

cv.bilateralFilter() 在去除噪声的同时保持边缘清晰,效果非常好。但与其他滤波器相比,该操作速度较慢。我们已经看到,高斯滤波器取像素周围的邻域并找到其高斯加权平均值。此高斯滤波器仅是空间函数,即在滤波时考虑邻近像素。它不考虑像素是否具有几乎相同的强度。它不考虑像素是否是边缘像素。因此,它还会模糊边缘,这是我们不想做的。

双边滤波也采用空间高斯滤波器,但多了一个高斯滤波器,它是像素差异的函数。空间高斯函数确保仅考虑邻近像素进行模糊,而强度差异高斯函数确保仅考虑与中心像素具有相似强度的像素进行模糊。因此它保留了边缘,因为边缘处的像素将具有较大的强度变化。

以下示例显示了双边滤波器的使用(有关参数的详细信息,请访问文档)。

blur = cv.bilateralFilter(img,9,75,75)

结果:
在这里插入图片描述

看,表面上的纹理消失了,但边缘仍然保留了下来。

其他资源

  • 有关 双边过滤 的详细信息

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MT1401-MT1410 码题集 (c 语言详解)

目录 MT1401归并排序 MT1402堆排序 MT1403后3位排序 MT1404小大大小排序 MT1405小大大小排序II MT1406数字重排 MT1407插入 MT1408插入 MT1409旋转数组 MT1410逆时针旋转数组 MT1401归并排序 c 语言实现代码 #include <stdio.h>// merge two subarrays void merge(int a…

大数据日志处理框架ELK方案

介绍应用场景大数据ELK日志框架安装部署 一&#xff0c;介绍 大数据日志处理框架ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;是一套完整的日志集中处理方案&#xff0c;以下是对其的详细介绍&#xff1a; 一、Elasticsearch&#xff08;ES&#xff09; 基本…

PHP海外矿物矿机理财投资源码-金融理财投资源码

PHP海外矿物矿机理财投资源码/金融理财投资源码 海外矿物矿机理财投资源码 测试不错,可以做其他产品理财,功能都没啥太大问题

Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)

前言&#xff1a;最近重拾Unity&#xff0c;准备做个3D的FPS小游戏&#xff0c;这里以官方FPS案例素材作为切入。 导入素材和素材理解 安装Unity新建项目新建文件夹和Scene如何去理解三维模型素材找到模型素材素材预制体结构骨骼和网格材质&#xff08;Material&#xff09;、…

php反序列化漏洞典型例题

1.靶场环境 ctfhub-技能树-pklovecloud 引用题目&#xff1a; 2021-第五空间智能安全大赛-Web-pklovecloud 2.过程 2.1源代码 启动靶场环境&#xff0c;访问靶场环境&#xff0c;显示源码&#xff1a;直接贴在下面&#xff1a; <?php include flag.php; class pks…

【flask】 flask redis的使用

目的&#xff1a;如何使用在flask web项目中连接redis&#xff0c;并简单的使用 使用的库包&#xff1a;flask-redis pip install falsk-redis下面的写法是对项目代码进行模块化拆分的写法&#xff0c;在app.py中只进行对象的初始化等操作&#xff1b;exts.py中创建对象&…

【含文档】基于ssm+jsp的房屋中介服务平台(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…

CI/CD 的原理

一、CI/CD 的概念 CI/CD是一种软件开发流程&#xff0c;旨在通过自动化和持续的集成、测试和交付实现高质量的软件产品。 CI(Continuous Integration)持续集成 目前主流的开发方式是协同开发&#xff0c;即多位开发人员同事处理同意应用不同模块或功能。 如果企业在同一时间将…

网络请求自定义header导致跨域问题

我记得我的项目之前已经解决了跨域问题。 后来在功能开发着&#xff0c;需要添加一个自定义的header&#xff0c;发现又出现跨域报错。 于是又开始一通摸索折腾。 我的项目前面端是用axios网络请求&#xff0c;通过拦截器添加header&#xff0c;代码如下&#xff1a; //添加请…

python实战项目47:Selenium采集百度股市通数据

python实战项目47:Selenium采集百度股市通数据 一、思路分析二、完整代码一、思路分析 这里以获取百度股市通股评下的投票数据为例,页面中的其他数据同理。由于此页面数据是js动态加载的,所以采用Selenium获取数据。思路很简单,通过Selenium打开页面,然后定位到“股评”选…

《使用Gin框架构建分布式应用》阅读笔记:p212-p233

《用Gin框架构建分布式应用》学习第12天&#xff0c;p212-p233总结&#xff0c;总22页。 一、技术总结 1.JavaScript知识点 (1)class、method (2)function, arrow function, (3)fetch() (4)Promise, then() 2.bootstrap 第5章主要涉及前端技术的运用&#xff0c;作为后…

nfs作业

nfs作业 服务机&#xff1a; 编写配置文件&#xff1a; [rootlocalhost ~]# vim /etc/exports 配置文件内容&#xff1a; /nfs/shared *(ro,sync) /nfs/upload 192.168.36.0/24(rw,anonuid210,anongid210,sync) /home/tom 192.168.36.132(rw) 创建目录&#xff0c;文件&am…

紫杉醇的药物代谢-文献精读73

Hydrogen-Bond-Assisted Catalysis: Hydroxylation of Paclitaxel by Human CYP2C8 氢键辅助催化&#xff1a;人类CYP2C8对紫杉醇的羟基化 摘要 紫杉醇&#xff08;PTX&#xff0c;或称Taxol&#xff09;是一种广泛用于治疗多种癌症的化疗药物&#xff0c;经过细胞色素P450酶…

使用语言模型进行文本摘要的五个级别(llm)

视频链接&#xff1a;5 Levels Of LLM Summarizing: Novice to Expert

A Simple Semi-Supervised Learning Framework for Object Detection

1. Introduction SSL的成功主要有以下两个方面&#xff1a; &#xff08;1&#xff09;一致性正则化&#xff1a;如果对一个未标记的数据应用实际的扰动, 其预测结果不应该发生显著变化, 也就是输出具有一致性&#xff0c;通过在未标记数据上构造添加扰动后的预测结果 y~​ 与…

景区客流统计合理控制游客人数,预防意外发生

随着制造业的不断发展&#xff0c;工厂的管理和安全问题日益受到关注。为了提升生产效率和保障安全&#xff0c;许多工厂开始采用客流计数器系统。这种系统通过实时监测和控制车间内的人员数量&#xff0c;确保不超过安全规定&#xff0c;预防事故发生。本文将详细介绍工厂客流…

正则表达式以及密码匹配案例手机号码脱敏案例

目录 正则表达式 什么是正则表达式 语法 定义变量 test方法 exec方法 replace方法 match方法 修饰符 元字符 边界符 单词边界 字符串边界 边界符&#xff1a;^ 边界符&#xff1a;$ 量词 * ? {n} {n,} {n,m} 字符类 []匹配字符集合 .匹配除换行符之外的…

面向对象编程中类与类之间的关系(一)

目录 1.引言 2."有一个"关系 3."是一个"关系(继承) 4.“有一个”与“是一个”的区别 5.not-a关系 6.层次结构 7.多重继承 8.混入类 1.引言 作为程序员&#xff0c;必然会遇到这样的情况&#xff1a;不同的类具有共同的特征&#xff0c;至少看起来彼…

【zotero7】茉莉花抓取文献失败解决方案

1、先安装好茉莉花 工具 ----》设置按钮–》从github上下载 xpi文件 2. 配置茉莉花 选择设置–》看到茉莉花–》红色字体 pdftk下载链接&#xff1a; https://www.pdflabs.com/tools/pdftk-server/ 3.打开插件 --》扩展插件 刷新

如何从PPT中导出600dpi的高清图

Step1. 修改PPT注册表 具体过程&#xff0c;参见如下链接&#xff1a;修改ppt注册表&#xff0c;导出高分辨率图片 Step2. 打开PPT&#xff0c;找到自己想要保存的图&#xff0c;选中图像&#xff0c;查看图像尺寸并记录 Step3. 重新新建一个PPT&#xff0c;并根据记录的图片…