Opencv学习笔记(三)线性及非线性滤波

2023-11-20

大纲

1.滤波综述
2. 方框滤波
3. 均值滤波
4. 高斯滤波
5. 中值滤波
6. 双边滤波

一、滤波综述
图像的滤波指的是在尽量保证图像细节特征的的情况下对图像中的噪声进行抑制,又因为图像的能量大部分集中在低频或者中频的区域(图像大部分区域是连贯的,波动不大,频率),而高频部分则大多为边缘信息(图像变换快)或者是噪声。所以滤波器分为两种,低通滤波高通滤波,前者的作用就是保证低频区域的稳定,尽量去除噪声,但也不可避免的带来边缘信息的丧失,所以也称作“平滑”或者“模糊”;后者则着重于增强图像的边缘信息,对于噪声的抑制则较弱,所以也叫做“锐化”。本次要介绍的几个滤波器都是着重于抑制图像的噪声,可以算是低通滤波器,且都为邻域算子滤波即通过卷积核和源图像卷积,给定像素周围像素值决定此像素最终值。

二、方框滤波与均值滤波
方框滤波是将一个全为1的卷积核与源图像进行卷积,像素加权得到,而均值滤波则是在此基础进行了归一化,规避了溢出的风险。这中方法是用待求像素周围矩形区域像素的均值来代替该值(这样点上教材上是说待求点本身不介入均值运算,但网上各类代码及卷积核介绍都是将待求点也介入,倾向于后者正确),因为典型的噪声就是灰度值的急剧变化,而图像区域一般是连续的,通过这样方式就可以平滑噪声,但同时也造成了边缘信息的丧失。卷积核如下:

在这里插入图片描述
当a为1时,就是方框滤波;当a=元素数目时,就是均值滤波。
opencv中方框滤波函数原型如下:

boxFilter( InputArray src, OutputArray dst, int ddepth,Size ksize, Point anchor = Point(-1,-1),bool normalize = true,int borderType = BORDER_DEFAULT );

第一个参数为输入图像,通道数不限,滤波函数对通道都是单独处理的,但深度需要为CV_8U,CV_16U,CV_16S,CV_32F,CV_64F之一;
第二个参数为输出图像,需要和输入图像同类型同大小;
第三个参数为输出图像的深度,选填-1则为保持原深度,当输出结果可能溢出时换用其他值;
第四个参数为卷积核的大小,Size类型,一般选用奇数长正方形区域;
第五个参数为锚点,即被平滑的点(均值代替的点),默认值(-1,-1)表示为卷积核中心;
第六个参数为归一化选项,如果选1则变成了均值滤波;
第七个参数为边缘填充选项,有默认值BORDER_DEFAULT;

均值滤波函数原型:

blur( InputArray src, OutputArray dst,Size ksize, Point anchor = Point(-1,-1),int borderType = BORDER_DEFAULT );

参数介绍与方框滤波一致。

二、高斯滤波
高斯滤波也是通过卷积核与原图像卷积,像素加权得到,但与均值滤波不同的是卷积区域内像素的权值不再相同,而是满足二维正态(高斯)分布,离中心越近权值越大,离中心越远权值越小,这样可以有效抑制服从正态分布的噪声。二维高斯分布数学公式如下:
f ( x , y ) = 1 2 π ( σ x 2 + σ y 2 ) e − ( x − μ x ) 2 2 σ x 2 − ( y − μ y ) 2 2 σ y 2 f(x,y)=\frac{1}{\sqrt{2\pi(\sigma_x^2+\sigma_y^2)}}e^{-\frac{(x-\mu_x)^2}{2\sigma_x^2}-\frac{(y-\mu_y)^2}{2\sigma_y^2}} f(x,y)=2π(σx2+σy2) 1e2σx2(xμx)22σy2(yμy)2
因为后续要进行归一化所以前面的系数也不重要; μ x 、 μ y \mu_x、\mu_y μxμy均为卷积中心,最终我们用到的公式为:
f ( x , y ) = A e − ( x − μ x ) 2 2 σ x 2 − ( y − μ y ) 2 2 σ y 2 f(x,y)=Ae^{-\frac{(x-\mu_x)^2}{2\sigma_x^2}-\frac{(y-\mu_y)^2}{2\sigma_y^2}} f(x,y)=Ae2σx2(xμx)22σy2(yμy)2
通过这个公式计算出相应大小的卷积核之后再进行归一化,如设置 σ = 1.5 \sigma=1.5 σ=1.5后计算3×3卷积核为:
在这里插入图片描述
归一化之后:
在这里插入图片描述
高斯滤波函数原型为:

GaussianBlur( InputArray src, OutputArray dst, Size ksize,double sigmaX, double sigmaY = 0,int borderType = BORDER_DEFAULT );

前两个参数为输入、输出图像;
第三个参数为卷积核大小,长度宽度可以不同,但必须都是正奇数,如果都设为0的话将由后续sigma计算出来,计算方法可参见参考文献。
第四、五个参数为X,Y方向上的标准偏差,通常是不分辨X,Y方向上的区别,两个取值相同;当sigmaY=0时,sigmaY=sigmaX;当sigmaY=sigmax=0时,他们的值由卷积核大小代入下述公式确定:
σ = 0.3 × ( ( k s i z e − 1 ) × 0.5 − 1 ) + 0.8 \sigma = 0.3\times((ksize - 1)\times0.5 - 1) + 0.8 σ=0.3×((ksize1)×0.51)+0.8
第六个参数为边界填充类型
五、中值滤波
中值滤波三种滤波不同,为非线性滤波,虽然也是通过窗函数在原图上滑动得到每一个待求像素的值,但该值并不再是窗函数范围内像素的加权和了,而是像素排序之后的中位数。与均值滤波相比,它几乎不会受到噪声尤其是椒盐噪声的影响,因为这种极值很难被选为中位数,由此中值滤波的去噪效果比均值滤波要更好,同时由于矩形窗范围内存在的边缘也应该是连续的,保存边缘的效果也更好,但它也有缺点:计算时间过长,是均值滤波的5倍以上(未验证)。
opencv函数原型:

medianBlur( InputArray src, OutputArray dst, int ksize );

第一、二个参数为输入输出图像;
第三个参数为窗函数的线性尺寸,应该为正奇数,即3×3,5×5这样的方形窗。
六、双边滤波
双边滤波同样是非线性滤波,从某种意义上来说它与高斯滤波很相似,高斯滤波考虑了距离对于权重的影响,双边滤波再次基础之上考虑了像素相似程度对与权重的影响,从而在边缘附近,离得较近的点由于像素值相差过大权重小,离得较远的点距离过大权重小,从而可以较好的保留边缘信息,但也因此不能很好的滤去高频信息。数学公式如下:
g ( i , j ) = ∑ k , l f ( k , l ) ω ( i , j , k , l ) ∑ k , l ω ( i , j , k , l ) g(i,j)= {{\sum_{k,l}f(k,l)\omega(i,j,k,l)}\over{\sum_{k,l}\omega(i,j,k,l)}} g(i,j)=k,lω(i,j,k,l)k,lf(k,l)ω(i,j,k,l)
其中 f ( k , l ) f(k,l) f(k,l)为原像素值, w ( i , j , k , l ) w(i,j,k,l) w(i,j,k,l)为加权值取决于空间域核和色彩域核的乘积
空间域核:
d ( i , j , k , l ) = e − ( i − k ) 2 + ( j − l ) 2 2 σ d 2 d(i,j,k,l)=e^{-\frac{(i-k)^2+(j-l)^2}{2\sigma_d^2}} d(i,j,k,l)=e2σd2(ik)2+(jl)2
色彩域核:
r ( i , j , k , l ) = e − ∣ ∣ f ( i , j ) − f ( k , l ) ∣ ∣ 2 2 σ r 2 r(i,j,k,l)=e^{-\frac{||f(i,j)-f(k,l)||^2}{2\sigma_r^2}} r(i,j,k,l)=e2σr2f(i,j)f(k,l)2
权重:
w ( i , j , k , l ) = e − ( i − k ) 2 + ( j − l ) 2 2 σ d 2 − ∣ ∣ f ( i , j ) − f ( k , l ) ∣ ∣ 2 2 σ r 2 w(i,j,k,l)=e^{-\frac{(i-k)^2+(j-l)^2}{2\sigma_d^2}-\frac{||f(i,j)-f(k,l)||^2}{2\sigma_r^2}} w(i,j,k,l)=e2σd2(ik)2+(jl)22σr2f(i,j)f(k,l)2
opencv函数原型如下:

bilateralFilter( InputArray src, OutputArray dst, int d,double sigmaColor, double sigmaSpace,int borderType = BORDER_DEFAULT );

第一、二个参数为输出输出图像;
第三个参数为像素邻域的直径,如果这个值被设为负数,则由sigmaspace计算得出;
第四个参数为公式中的 σ r \sigma_r σr,这个值越大,表明越宽广的颜色会被混合到一起,即对颜色的区分下降;
第五个参数为公式中的 σ d \sigma_d σd,这个值越大,表明越远距离的值会介入运算,对距离的区分下降,当d大于0它确定了邻域大小且与此参数无关,否则d正比于此参数;
第六个参数为边界填充方式;

参考文献
双边滤波算法介绍与实现
中值滤波介绍与实现
高斯滤波介绍与实现
均值滤波介绍与实现
如何确定高斯滤波标准差和窗口大小

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Opencv学习笔记(三)线性及非线性滤波 的相关文章

  • 图像中土壤颗粒分水岭以外的替代分割技术

    我正在寻找一种替代方法来分割以下土壤颗粒图像中的颗粒 而不是Python中的分水岭分割 因为它可能会误导对颗粒的正确检测 此外 我正在研究边缘检测图像 使用HED算法 作为附加 我希望找到一种更好的方法来分割颗粒以进行进一步处理 因为我想获
  • 视频文件中的感兴趣区域

    这是我第一次在这里发帖 希望能得到积极的结果 因为我的研究已接近尾声 我想在我的代码中添加一个函数 该函数将仅处理视频文件的定义的感兴趣区域 我无法发布图片 因为我还没有声誉 但这里发布了同样的问题 gt http answers open
  • 使用python opencv从zip加载图像

    我能够成功地从 zip 加载图像 with zipfile ZipFile test zip r as zfile data zfile read test jpg how to open this using imread or imde
  • 从霍夫线中选择线

    I m using Hough Lines to do corner detection for this image i plan to find the intersection of the lines as the corner T
  • 使用高斯混合模型进行皮肤检测

    我正在根据以下进行皮肤检测算法本文 http www cc gatech edu rehg Papers SkinDetect IJCV lowres pdf 第 21 页有两个模型 高斯皮肤混合模型和非皮肤颜色模型 第一个皮肤检测模型效果
  • 霍夫变换的累加器填充

    我写了一段需要优化的代码 只是想与社区核实一下该代码是否确实是最佳的 它填充霍夫变换的累加器 实际上 我只是复制粘贴了 OpenCV 库中的大部分代码 谢谢 int i j n index for i 0 i
  • 正方形检测找不到正方形

    我正在使用该程序方块 c在 OpenCV 库的示例中可用 它适用于每个图像 但我真的不明白为什么它不能识别该图像中绘制的正方形 After CANNY After DILATE The RESULT图像 红色 http img267 ima
  • 从彩色背景中提取黑色对象

    人眼很容易辨别black来自其他颜色 但是计算机呢 我在普通的A4纸上打印了一些色块 由于组成彩色图像有青色 品红色和黄色三种墨水 所以我设置每个块的颜色C 20 C 30 C 40 C 50 以及其余两种颜色是 0 这是我的源图像的第一列
  • 在 OpenCV 中对 RGB 图像进行阈值处理

    我有一个彩色图像 我想在 OpenCV 中设置阈值 我想要的是 如果任何 RGB 通道低于某个值 则将所有通道中的值设置为零 即黑色 因此 我使用 opencv 阈值函数 cv Mat frame thresholded read fram
  • 如何在win32上安装OpenCV 2.0

    我需要在 Win32 上安装 OpenCV 我目前没有安装它 我下载了 OpenCV 2 0 0a win32 exe 并运行它 我现在到底该怎么办 没有 lib之类的东西 我找到了一些使用 cmake 构建版本的说明 http openc
  • 使用畸变从图像平面计算相机矢量

    我正在尝试使用相机模型来重建可以使用某些相机及其 外部 内部 参数拍摄的图像 这一点我没有任何问题 现在我想添加扭曲 正如它们中所描述的那样OpenCV https docs opencv org 4 x dc dbb tutorial p
  • 将嘈杂的硬币重塑为圆形

    我正在使用 JavaCV OpenCV 包装器 进行硬币检测 但是当硬币连接时我遇到了一些问题 如果我尝试侵蚀它们以分离这些硬币 它们就会失去圆形形状 如果我尝试计算每个硬币内部的像素 可能会出现问题 因此某些硬币可能会被误算为更大的硬币
  • 使用 OpenCV 查找重叠/复杂的圆

    我想计算红圈半径 图2 我在使用 OpenCV 的 HoughCircles 找到这些圆圈时遇到了麻烦 如图所示 2 我只能使用 HoughCircles 找到中心以黑色显示的小圆圈 original fig 2 由于我知道红色圆圈的中心
  • 如何使用requirements.txt 在 Heroku python Web 应用程序中安装 Dlib?

    我构建了一个涉及机器学习的 Python Flask Web API 但在 Heroku 上部署它时遇到了很多挫折 问题是 我的应用程序依赖于 Dlib 一个库 我似乎找不到在我的 Heroku 服务器中安装的方法 我正在试图解决这个问题
  • 收据褪色部分可以恢复吗?

    我有一些包含一些扫描收据的文件 我需要使用 OCR 从中提取文本 由于收据上打印的文字在一段时间后会褪色 导致收据上的某些文字不清晰 影响OCR结果 褪色单词的一些示例 有什么方法可以恢复褪色的部分 以便提高 OCR 结果吗 我在OpenC
  • 为什么这些双精度数的返回值为-1.#IND?

    I have double score cvMatchContourTrees CT1 CT2 CV CONTOUR TREES MATCH I1 0 0 cout lt
  • 如何在Python中使用tcp套接字发送和接收网络摄像头流?

    我正在尝试重新创建这个项目 https github com hamuchiwa AutoRCCar 我拥有的是服务器 我的电脑 和客户端 我的树莓派 我所做的与原始项目不同的是我尝试使用一个简单的网络摄像头而不是树莓派摄像头将图像从我的
  • 计算两个描述符之间的距离

    我正在尝试计算已计算的两个描述符之间的距离 欧几里得或汉明 问题是我不想使用匹配器 我只想计算两个描述符之间的距离 我正在使用 OpenCV 2 4 9 并且我的描述符存储在 Mat 类型中 Mat descriptors1 Mat des
  • opencv中矩阵的超快中值(与matlab一样快)

    我正在 openCV 中编写一些代码 想要找到一个非常大的矩阵数组 单通道灰度 浮点数 的中值 我尝试了几种方法 例如对数组进行排序 使用 std sort 和选择中间条目 但与 matlab 中的中值函数相比 它非常慢 准确地说 在 ma
  • OpenCV:视频结束后如何重新启动?

    我正在播放视频文件 但播放完毕后如何再次播放 Javier 如果您想一遍又一遍地重新启动视频 也称为循环播放 可以通过在帧数达到时使用 if 语句来实现cap get cv2 cv CV CAP PROP FRAME COUNT 然后重置帧

随机推荐

  • Linux 桌面应用程序

    调研 要在Linux下开发具有图形界面的桌面应用程序 我们有许多选择 当然 除了语言方面的考虑外 我们更多的是考虑窗口部件工具箱 以前称为控件库或组件库 的选择 这将在很大程度上影响我们的开发效率 如果考虑到跨平台应用 选择Java的Swi
  • php array_diff 二位数组,PHP比较二维数组,求大神赐教

    一个参与活动名单的二维数组 arr1 array array name gt 张三 phone gt 1354459845 address gt 一街5号 array name gt 李四 phone gt 1323439845 addre
  • eclipse导入项目,项目名出现红叉的情况

    今天用eclipse导入同事发给我的一个项目之后 项目名称上面出现红叉 但是其他地方都没有红叉 仅仅是在项目名称上面有红叉 于是上网查了查资料记下来 1 导入项目之前 请确认工作空间编码已设置为utf 8 window gt Prefere
  • 想写一个安全服务工程师的培训教材或者手册

    最近有个朋友搞了个公司 打算找人接安服项目 让我找点安全培训的教材 看了一大圈的书籍目录感觉都比较片面 或者专注一个方面 对于一些几乎0基础的应届生或实习生来说不太能够在几个月时间内上手项目 csdn 知乎和百度上其他类似网站的0基础培训思
  • 【Shell牛客刷题系列】SHELL2 打印文件的最后5行:优雅的解决方案~

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Linux 欢迎关注专栏 本文知识预告 首先学习用于查看文件尾部内容的tail命令 然后给
  • iPhone: There is no SDK with the name or path iphoneos XXX

    for ever 2010 10 25 环境 MAC OS 10 6 4 老的iPhone 项目 使用最新的 XCode 3 2进行编译 报错 iPhone There is no SDK with the name or path iph
  • vue中组件的划分(重点)

    vue中组件的划分 重点 组件的职能划分 如果要将 Vue 组件按照职能划分 我们可以将其分为两种类型 容器组件和展示组件 容器组件和展示组件的概念来自于 Redux 文档 那么首先什么是容器组件呢 顾名思义 它是一个容器性质的组件 我们可
  • 如何在ubuntu安装powershell

    在Ubuntu上安装PowerShell可以通过以下步骤来完成 1 安装依赖软件 可以使用以下命令安装所需的依赖软件 sudo apt get install curl libunwind8 gettext apt transport ht
  • 使用postman怎么都访问不到项目,也不报错

    使用postman怎么都访问不到项目 也不报错 可能问题1 本地路径没有对应你访问的访问路径 在你的C盘下面的C Windows System32 drivers etc这个路径下找到host文件 你127 0 0 1 对应的是什么路径 你
  • 设计模式(不懂)

    面试中经常问到设计模式 我才对这个东西了解了一下 才发现他是没有开发的新大陆 是oo设计的更高级别 能把设计模式搞懂 那oo你就搞的差不多了 随便看了还是很有意思的 虽然不怎么懂 百科名片 相关书籍 设计模式 Design pattern
  • 在 spawn 的子进程中保持命令行颜色

    本文首发于我的博客 转载请注明出处 https kohpoll github io blo 最近在用子进程运行 gulpfile js 的时候发现终端上的颜色全部没有了 很是奇怪 经过一些研究 最终解决了问题 同时也总结了一些相关知识 希望
  • 锋利的jQuery(五)--jQuery对表单、表格的操作及更多应用

    5 1表单应用 一个表单有3个基本组成部分 1 表单标签 包含处理表单数据所用的服务器端程序URL以及数据提交到服务器的方法 2 表单域 包含文本框 密码框 隐藏域 多行文本框 复选框 单选框 下拉选择框和文件上传框等 3 表单按钮 包括提
  • 吉林大学超星MOOC学习通高级语言程序设计 C++ 实验02 分支与循环程序设计(2021级)(2)

    5 爱因斯坦阶梯 题目编号 Exp02 Basic10 GJBook3 04 15 题目名称 爱因斯坦阶梯 问题描述 设有阶梯 不知其数 但知 每步跨2阶 最后剩1阶 每步跨3阶 最后剩2阶 每步跨5阶 最后剩4阶 每步跨7阶 正好到楼顶
  • python文件运行路径设置,python获取程序执行文件路径的方法(推荐)

    1 获取当前执行主脚本方法 sys argv 0 和 file 1 sys argv 一个传给python脚本的指令参数列表 sys argv 0 是脚本的名字 一般得到的是相对路径 用os path abspath sys argv 0
  • Dubbo 默认线程池fixed

    SPI fixed public interface ThreadPool 线程池 param url 线程参数 return 线程池 Adaptive Constants THREADPOOL KEY Executor getExecut
  • linux共享内存面试题,linux系统工程师面试题(附答案)

    1 查看Linux系统当前单个共享内存段的最大值 命令 ipcs m ipcs a 2 用什么命令查询指定IP地址的服务器端口 题意应该是 nmap 和nbtscan 命令来扫吧 3 crontab中用什么命令定义某个程序执行的优先级别 n
  • Gurobi:使用Java+Gurobi建立一个小数学模型

    Gurobi 使用Java Gurobi建立一个小数学模型 按变量进行建模 按列进行建模 模型的求解结果 现在基本上都流行python gurobi java cplex进行建模 但是由于java相较于python还是具有显著的速度优势 于
  • 后疫情时代企业云原生成本优化指南

    在本篇文章的末为还有福利 在等着大家哦 前言 近年来 公有云 混合云等技术在全球迅速发展 云的普及度越来越高 Docker Kubernetes DevOps Service Mesh等云原生技术蓬勃发展 但在 上云 之后 企业却往往发现
  • 《数据库系统内幕》笔记 —— LSM树与OceanBase

    本文为 数据库系统内幕 第7章的笔记与心得 因为看到OceanBase底层也使用LSM树的实现作为存储引擎 因此特地记下笔记 详见OceanBase文档 https www oceanbase com docs community obse
  • Opencv学习笔记(三)线性及非线性滤波

    大纲 1 滤波综述 2 方框滤波 3 均值滤波 4 高斯滤波 5 中值滤波 6 双边滤波 一 滤波综述 图像的滤波指的是在尽量保证图像细节特征的的情况下对图像中的噪声进行抑制 又因为图像的能量大部分集中在低频或者中频的区域 图像大部分区域是