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

肆[4],滤波

1,简介

1.1,Opencv提供滤波处理函数

方框滤波,BoxBlur函数

均值滤波(领域平均滤波),Blur函数

高斯滤波,GaussianBlur函数

中值滤波,medianBlur函数

双边滤波,bilateralFilter函数

1.2,常见线性滤波器

低通滤波器:允许低频率通过。

高通滤波器:允许高频率通过。

带通滤波器:允许一定范围频率通过。

带阻滤波器:阻止一定范围频率通过并且允许其他频率通过。

全通滤波器:允许所有频率通过,仅仅改变相位关系。

陷波滤波器(Band-StopFilter):阻止-个狭窄频率范围通过,是一种特殊带阻滤波器。

2,目的

2.1,对噪声进行抑制

2.2,抽出对象的特征

3,均值滤波

线性滤波

CV_EXPORTS_W void blur( InputArray src, OutputArray dst,Size ksize, Point anchor = Point(-1,-1),int borderType = BORDER_DEFAULT );//参数1(src):原图
//参数2(dst):处理后的图像
//参数3(ksize):核的尺寸,正奇数
//参数4(anchor):锚点,默认值 Point(-l-l)表示这个锚点在核的中心
//参数5(borderType):边框类型

原理:

在图像上对目标像素给出一个内核,该内核包括了其周围的临近像素(比如以目标像素为中心的周围8(3x3-1)个像素,构成一个滤波内核,去掉目标像素本身)。再用内核中的全体像素的平均值来代替原来像素值。

缺陷:

不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点

4,方框滤波

线性滤波

CV_EXPORTS_W void boxFilter( InputArray src, OutputArray dst, int ddepth,Size ksize, Point anchor = Point(-1,-1),bool normalize = true,int borderType = BORDER_DEFAULT );//参数1(src):原图
//参数2(dst):处理后的图像
//参数3(ddepth):处理后图像深度,-1代表使用原图深度
//参数4(ksize):核的尺寸,正奇数
//参数5(anchor):锚点,默认值 Point(-l-l)表示这个锚点在核的中心
//参数6(normalize):归一化处理
//参数7(borderType):边框类型

当normalize = true,结果等于均值滤波=内核像素的和 / (内核大小-1)

当normalize = false,结果计算图元像素=内核像素的和,导致像素值容易超出最大值255,截断变为255,白色图像

5,高斯滤波

线性滤波

CV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,double sigmaX, double sigmaY = 0,int borderType = BORDER_DEFAULT );//参数1(src):原图
//参数2(dst):处理后图像
//参数3(ksize):内核大小,正奇数
//参数4(sigmaX):X方向上的高斯核标准偏差
//参数5(sigmaY):Y方向上的高斯核标准偏差
//参数6(borderType ):边框类型

高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波具体操作是:用一个内核(或称卷积、掩模)扫描图像中的每一个像素,用内核确定的邻域内像素的加权平均灰度值去替代内核中心像素点的值。

效果:类似经过一个半透明屏幕在观察图像

6,中值滤波

非线性滤波

CV_EXPORTS_W void medianBlur( InputArray src, OutputArray dst, int ksize );//参数1(src):原图
//参数2(dst):处理后图像
//参数3(ksize):内核大小,正奇数

用像素点邻域灰度值的中值来代替该像素点的灰度值,该方法在去除脉冲噪声、椒盐噪声、斑点噪声的同时又能保留图像的边缘细节。

与均值滤波相比:中值滤波无论是在消除l噪声还是保存边缘方面都是一个不错的方法,但是耗时是均值滤波5倍以上。耗时长

7,双边滤波

非线性滤波

CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,double sigmaColor, double sigmaSpace,int borderType = BORDER_DEFAULT );//参数1(src):原图
//参数2(dst):处理后图像
//参数3(d):表示在过滤过程中每个像素邻域的直径
//参数4(sigmaColor):颜色空间滤波器的sigma值。这个参数的值越大,就表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域
//参数5(sigmaSpace):坐标空间中滤波器的sigma值,坐标空间的标注方差。它的数值越大,意味着越远的像素会相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当 d>0时, d指定了邻域大小且与sigmaSpace无关。否则, d正比于sigmaSpace
//参数6(borderType):边框类型

双边滤波(Bilateralfil忧r)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的,具有简单、非法代、局部的特点。

双边滤波器的好处是可以做边缘保存。耗时长

8,形态学滤波

简单来讲,形态学操作就是基于形状的一系列图像处理操作(腐蚀/膨胀等等)。腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。膨胀是图像中的高亮部分进行膨胀,类似于"领域扩张",效果图拥有比原图更大的高亮区域。腐蚀是原图中的高亮部分被腐蚀,类似于"领域被蚕食",效果图拥有比原图更小的高亮区域

8.1,膨胀

求局部最大值的操作

CV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel,Point anchor = Point(-1,-1), int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );//参数1(src):原图
//参数2(dst):处理后图像
//参数3(kernel):内核,可以是正方向或者矩形,可以通过cv2.getStructuringElement()函数创建
//参数4(anchor ):锚点
//参数5(iterations):迭代次数,如连续膨胀几次
//参数6(borderType ):边框类型
//参数7(borderValue ):边界值

获取内核

CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));//参数1(shape):设定卷积核的形状,有三个可选值:MORPH_RECT(返回矩形卷积核)、MORPH_CROSS(返回十字形卷积核)和MORPH_ELLIPSE(返回椭圆形卷积核)
//参数2(ksize):表示卷积核有x行,y列
//参数3(anchor ):设定锚点的位置,一般设为(-1,-1),表示锚点位于核中心。

注:参数1(shape)枚举定义

enum MorphShapes {MORPH_RECT    = 0, MORPH_CROSS   = 1, MORPH_ELLIPSE = 2 
};

8.2,腐蚀

求局部最小值的操作

CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,Point anchor = Point(-1,-1), int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );//参数1(src):原图
//参数2(dst):处理后图像
//参数3(kernel):内核,可以是正方向或者矩形,可以通过cv2.getStructuringElement()函数创建
//参数4(anchor ):锚点
//参数5(iterations):迭代次数,如连续腐蚀几次
//参数6(borderType ):边框类型
//参数7(borderValue ):边界值

8.3,开运算

先腐蚀后膨胀。

开运算可以用来消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积。

CV_EXPORTS_W void morphologyEx( InputArray src, OutputArray dst,int op, InputArray kernel,Point anchor = Point(-1,-1), int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );//参数1(src):原图
//参数2(dst):处理后图像
//参数3(op):形态学操作的类型,可以是腐蚀、膨胀、开运算、闭运算、顶帽、黑帽等
//参数4(kernel):内核,可以是正方向或者矩形,可以通过cv2.getStructuringElement()函数创建
//参数5(anchor ):锚点
//参数6(iterations):迭代次数
//参数7(borderType ):边框类型
//参数8(borderValue ):边界值

注:参数3(op)枚举定义

enum MorphTypes{MORPH_ERODE    = 0, MORPH_DILATE   = 1, MORPH_OPEN     = 2, MORPH_CLOSE    = 3, MORPH_GRADIENT = 4, MORPH_TOPHAT   = 5, MORPH_BLACKHAT = 6, MORPH_HITMISS  = 7  
};/*MORPH_ERODE    //腐蚀MORPH_DILATE   //膨胀MORPH_OPEN     //开运算MORPH_CLOSE    //闭运算MORPH_GRADIENT //梯度MORPH_TOPHAT   //顶帽MORPH_BLACKHAT //黑帽MORPH_HITMISS  //Hit-or-Miss 运算,是一种特殊的形态学运算,通常用于检测满足特定形状的物体
*/

8.4,闭运算

先膨胀后腐蚀。

能够排除小型黑洞(黑色区域)。

8.5,梯度

膨胀图与腐蚀图之差。

对二值图像进行这一操作可以将团块(blob)的边缘突出出来。我们可以用形态学梯度来保留物体的边缘轮廓。

8.6,梯度

膨胀图与腐蚀图之差。

对二值图像进行这一操作可以将团块(blob)的边缘突出出来。我们可以用形态学梯度来保留物体的边缘轮廓。

8.7,顶帽

原图与开运算的结果图之差。(原图 - 开运算)

开运算带来的结果是放大了裂缝或者局部低亮度的区域,因此从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作与选择的核的大小相关。

运算往往用来分离比邻近点亮一些的斑块。

在一副图像具有大幅的背景,而做小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。

8.8,黑帽

闭运算的结果图与原图之差。(闭运算 - 原图)

黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和|选择的核的大小相关。

黑帽运算用来分离比邻近点暗一些的斑块,效果图有着非常完美的轮廓。

相关文章:

肆[4],滤波

1,简介 1.1,Opencv提供滤波处理函数 方框滤波,BoxBlur函数 均值滤波(领域平均滤波),Blur函数 高斯滤波,GaussianBlur函数 中值滤波,medianBlur函数 双边滤波,bilateralFilter函数 1.2&…...

Python 包管理器入门指南

什么是 PIP? PIP 是 Python 包管理器,用于管理 Python 包或模块。注意:如果您的 Python 版本是 3.4 或更高,PIP 已经默认安装了。 什么是包? 一个包包含了一个模块所需的所有文件。模块是您可以包含在项目中的 Pyth…...

2022年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 如下所示的2行代码,最后print()函数打印出来的结果是?( ) c [[赵大,…...

配置Raspberry自动连接WIFI,在无法查看路由器的校园网情况下使用自己电脑热点

1、开启电脑热点,并共享电脑WLAN2 打开控制面板->网络和Internet->网络连接 选择自己的校园网,我这里是WLAN2,右键属性,如下操作: 如果没有看到 本地连接*10类似的图标 则按如下操作:winx键&#x…...

#stm32整理(一)flash读写

以这篇未开始我将进行stm32学习整理为期一个月左右完成stm32知识学习整理内容顺序没有一定之规写到哪想到哪想到哪写到哪,主要是扫除自己知识上的盲区完成一些基本外设操作。 以stm32f07为例子进行flash读写操作 stm32flash简介 参考资料正点原子和野火开发手册 …...

windows10编译高版本openssl

参考文章 参考文章中的windows编译为低版本,在高版本的openssl编译中已经没有:“ms\do_ms.bat”这个脚本了,现记录下编译过程 1、准备工作 安装ActivePerl,安装后会自动写入环境变量,参照参考文章测试安装成功与否&a…...

Mac之NVM|通过brew安装、更新、卸载、重新安装nvm

文章目录 导文通过brew安装NVM通过brew更新NVM通过brew卸载NVM通过brew重新安装NVM 导文 Mac之NVM 通过brew安装、更新、卸载、重新安装 通过brew安装NVM brew install nvm通过brew更新NVM brew upgrade nvm通过brew卸载NVM brew uninstall nvm通过brew重新安装NVM brew re…...

react的状态管理有哪些方法?

在React中,有多种方法可以进行状态管理,以下是其中一些常见的方法: 1:使用React的内置状态(State): React组件可以通过使用 useState 钩子来管理内部的状态。它允许你在函数组件中定义和更新状态。例如: import React, { useState } from react;function MyComponent…...

AST注入-从原型链污染到RCE

文章目录 概念漏洞Handlebarspug 例题 [湖湘杯 2021 final]vote 概念 什么是AST注入 在NodeJS中,AST经常被在JS中使用,作为template engines(引擎模版)和typescript等。对于引擎模版,结构如下图所示。 如果在JS应用中存在原型污染漏洞&…...

【开题报告】基于uniapp的在线考试小程序的设计与实现

1.研究背景 随着社会的发展和科技的进步,网络技术被广泛应用于教育领域。在线教育已成为当今发展趋势之一,其中在线考试更是具有重要的意义。传统的考试方式不仅耗费大量人力物力,而且存在考试成果的保密问题。而在线考试可以使考试过程更加…...

使用pdf2image pdf转图片

安装poppler https://wenku.csdn.net/answer/1zxh8ckp6i from pdf2image import convert_from_path, convert_from_bytes import os# https://github.com/Belval/pdf2imageoutput_folder ./ dpi_value 600 pdf_start_page 1 # pdf显示的第一页 start_page 237 # 真实页码 p…...

非关系型数据库Redis的安装【Linux】及常用命令

前言 Redis(Remote Dictionary Server)是一种开源的内存数据库管理系统,它以键值存储方式来存储数据,并且支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。Redis最初由Salvatore Sanfilippo开发&#xff0c…...

【React】02.create-react-app基础操作

文章目录 当前以及未来的开发,一定是:组件化开发如何划分组件React的工程化/组件化开发create-react-app基础运用运用react常用版本一个React项目中,默认会安装 2023年最新珠峰React全家桶【react基础-进阶-项目-源码-淘系-面试题】 当前以及…...

gcc -static 在centos stream8 和centos stream9中运行报错的解决办法

gcc -static 在centos stream8 和centos stream9中运行报错的解决办法: 报/usr/bin/ld: cannot find -lc 我们下载glibc-static: 选择x86_64的。 还有一个是libxcrypt-static,依旧在这个网站里搜。 rpm -ivh glibc-static-2.28-239.el8.x…...

【UE5 Cesium】actor随着视角远近来变化其本身大小

效果 步骤 1. 首先我将“DynamicPawn”设置为默认的pawn类 2. 新建一个父类为actor的蓝图,添加一个静态网格体组件 当事件开始运行后添加一个定时器,委托给一个自定义事件,每2s执行一次,该事件每2s获取一下“DynamicPawn”和acto…...

vue-render函数的三个参数

第一个参数(必须) - {String | Object | Function} Vue.component(elem, {render: function(createElement) {return createElement(div);//一个HTML标签字符/*return createElement({template: <div></div>//组件选项对象});*//*var func function() {return {t…...

数据结构与算法(Java版) | 排序算法的介绍与分类

各位朋友&#xff0c;现在我们即将要进入数据结构与算法&#xff08;Java版&#xff09;这一系列教程中的排序算法这一章节内容的学习中了&#xff0c;所以还请大家系好安全带&#xff0c;跟随我准备出发吧&#xff01; 相信诸位应该都知道排序算法有很多种吧&#xff01;就算没…...

Java 实现uniapp本机手机号一键登录

这里简单的贴一下后端的解析代码 其他配置项参照uniapp的官方文档配置就好了 这里的accessToken和openid是前端请求uCloud获取的 Data public class UniAppLoginVO {private Integer code;private String message;private ResultDataVO data;private Boolean success;private R…...

树莓派使用Nginx搭建web网站内存利用太低了?高效远程访问试试结合内网穿透进行

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《Linux深造日志》《C干货基地》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 一. Nginx安装步骤1.安装更新2.更新完成后安装Nginx 包3. 启动Nginx 二. 安装cpolar内网穿透工具1. 使用cpolar一…...

基于SSM的搬家预约系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...