opencv#30 线性滤波

均值滤波原理

均值滤波步骤

Step1:求和。

Step2:计算平均值。

     所谓均值滤波,就是求平均值的意思。我们假设在一个3*3的范围内有一个图像,其中这个图像每一个像素可能含有噪声,也可能不含噪声,我们是不知道的,因此通过均值滤波的方式,对图像中所有像素进行求和,并除以像素个数,得到的结果就是滤波后的结果,将3*3区域的中心位置更改为滤波后的平均值,这样的过程就是均值滤波。

     均值滤波和图像的卷积操作相类似,它们都是在原图像中将每一个像素分别覆盖滤波模板,也可称为滤波器,覆盖原图像后求取平均值,放入中心区域作为滤波结果,然后移动滤波器,使滤波器能够覆盖图像的每一个位置。对于上图3*3的矩阵来说,其中每一个位置都乘了1,也就是说它进行卷积的模板是一个3*3的矩阵,此矩阵中的值都为1,之后又除以了和,因此它的卷积模板(滤波器)就是一个1/9乘全为1的矩阵(3*3)。

均值滤波函数

blur()

void cv::blur(InuputArray   src,OutputArray   dst,Size          ksize,Point         anchor = Point(-1,-1),int           borderType = BORDER_DEFAULT)

·src:待均值滤波的图像,图像数据类型必须是CV_8U,CV_16U,CV_16S,CV_32F和CV_64F这五种数据类型之一。均值滤波输出的结果的数据类型与输入图像的数据类型保持一致。

·dst:均值滤波后的图像,与输入图像具有相同的尺寸和数据类型。

·ksize:卷积核尺寸(滤波器尺寸:常用的是奇数正方形)。因为均值滤波中,滤波器中的每一位参数值是恒定的,因此这里面我们只需给出其尺寸即可。

·anchor:内核的基准点(锚点),其默认值为(-1,-1)代表内核基准点位于kernel的中心位置。·borderType:像素外推法选择标志。

方框滤波函数

boxFilter()

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

     方框滤波函数与均值滤波其实是等价的,只不过方框滤波运行滤波器不进行归一化,但是在均值滤波中是强制进行归一化的。 由于方框滤波是一个求和的参数,可能会出现255+255+255+....很多个255相加,最终超出255范围的情况,因此第三个参数运行用户设定输出图像的数据类型,也就是输出图像的数据类型可以与输入图像不同,但是尺寸和通道数是一致的。

·src:输入图像。

·dst:输出图像,与输入图像具有相同的尺寸和通道数。

·ddepth:输出图像的数据类型(深度),根据输入图像的数据类型不同拥有不同的取值范围。

·ksize:卷积核尺寸。

·anchor:内核的基准点(锚点),其默认值为(-1,-1)代表内核基准点位于kernel的中心位置。

·normalize:是否将卷积核进行归一化的标志,默认参数为true,表示进行归一化(在矩阵前面乘所有数值之和)。

·borderType:像素外推法选择标志。

高斯滤波原理

     高斯滤波也就是滤波器是一个高斯分布的形式,如上图所示,滤波器中中间的像素值较大,而四周像素值较小的情况,是一个中心对称的滤波器。若以这样的滤波器作为卷积核与原图像进行卷积操作的时候,得到的就是一个高斯滤波之后的结果 。

高斯滤波函数

GaussianBlur()

void cv::GaussianBlur(InputArray    src,OutputArray   dst,Size          xsize,double        sigmaX,double        sigmaY = 0,int           borderType = BORDER_DEFAULT)

·src:待高斯滤波图像,数据类型必须为CV_8U,CV_16U,CV_16S,CV_32F或CV_64F。

·dst:输出图像,与输入图像src具有相同的尺寸,通道数和数据类型。

·ksize:高斯滤波器的尺寸,滤波器可以不为正方形,但是必须是正奇数。如果尺寸为0,则由标准偏差计算尺寸。高斯滤波器不需要人为的输入,因为高斯滤波器的高斯函数分布形式是固定的,只需给出滤波器尺寸即可。

·sigmaX:X方向的高斯滤波器标准偏差。

·sigmaY:Y方向的高斯滤波器标准偏差。如果输入量为0,则将其设置为等于sigmaX,如果两个轴的标准差均为0,则根据输入的高斯滤波器尺寸计算标准差。

ksize ,sigmaX,sigmaY不允许同时为0,若某个参数为0,可以根据对应关系计算出参数。

·borderType:像素外推法选择标志。

示例
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv; //opencv的命名空间
using namespace std;//主函数
int main()
{Mat lenaGray = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/lenaGray.png");Mat equalLena_Salt = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/equalLena_S.png");Mat equalLena_Gauss = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/equalLena_G.png");if (lenaGray.empty() || equalLena_Salt.empty() || equalLena_Gauss.empty()){cout << "请确认图像名称是否正确" << endl;return -1;}Mat result_3, result_9; //存放不含噪声滤波结果,后面的数字代表滤波器尺寸Mat result_3gauss, result_9gauss; //存放含有高斯噪声滤波结果,后面数字代表滤波器尺寸Mat result_3salt, result_9salt; //存放含有椒盐噪声滤波结果,后面的数字代表滤波器尺寸//调用均值滤波函数blur()进行滤波blur(lenaGray, result_3, Size(3, 3));blur(lenaGray, result_9, Size(9, 9));blur(equalLena_Salt, result_3salt, Size(3, 3));blur(equalLena_Salt, result_9salt, Size(9, 9));blur(equalLena_Gauss, result_3gauss, Size(3, 3));blur(equalLena_Gauss, result_9gauss, Size(9, 9));//显示不含噪声图像imshow("lenaGray", lenaGray);imshow("result_3", result_3);imshow("result_9", result_9);//显示不含噪声图像imshow("equalLena_Salt", equalLena_Salt);imshow("result_3salt", result_3salt);imshow("result_9salt", result_9salt);//显示不含噪声图像imshow("equalLena_Gauss", equalLena_Gauss);imshow("result_3gauss", result_3gauss);imshow("result_9gauss", result_9gauss);cout << "下面是方框滤波" << endl;waitKey(0);//等待函数用于显示图像,按下键盘任意键后退出Mat resultNorm, result;//方框滤波boxFilter()和sqrBoxFilter()boxFilter(lenaGray, resultNorm, -1, Size(3, 3), Point(-1, -1), true); //进行归一化boxFilter(lenaGray, result, -1, Size(3, 3), Point(-1, -1), false); //进行归一化//显示处理结果imshow("resultNorm", resultNorm);imshow("result", result);cout << "下面是高斯滤波" << endl;waitKey(0);//等待函数用于显示图像,按下键盘任意键后退出Mat result_5_G, result_9_G;//存放不含噪声滤结果,后面数字代表滤波器尺寸Mat result_5Gauss_G, result_9Gauss_G;//存放含高斯噪声滤结果,后面数字代表滤波器尺寸Mat result_5Salt_G, result_9Salt_G;//存放含椒盐噪声滤结果,后面数字代表滤波器尺寸GaussianBlur(lenaGray, result_5_G, Size(5, 5), 10, 20);GaussianBlur(lenaGray, result_5_G, Size(5, 5), 10, 20);GaussianBlur(equalLena_Gauss, result_5Gauss_G, Size(5, 5), 10, 20);GaussianBlur(equalLena_Gauss, result_9Gauss_G, Size(9, 9), 10, 20);GaussianBlur(equalLena_Salt, result_5Salt_G, Size(5, 5), 10, 20);GaussianBlur(equalLena_Salt, result_9Salt_G, Size(9, 9), 10, 20);//显示不含噪声图像imshow("lenaGray", lenaGray);imshow("result_5_G", result_5_G);imshow("result_9_G", result_9_G);//显示不含噪声图像imshow("equalLena_Salt", equalLena_Salt);imshow("result_5Gauss_G", result_5Gauss_G);imshow("result_9Gauss_G", result_9Gauss_G);//显示不含噪声图像imshow("equalLena_Gauss", equalLena_Gauss);imshow("result_5Salt_G", result_5Salt_G);imshow("result_9Salt_G", result_9Salt_G);waitKey(0);//等待函数用于显示图像,按下键盘任意键后退出return 0;}

滤波完成后:

在均值滤波中:对于椒盐噪声和高斯噪声的滤波结果,尺寸越大的滤波器,对于图像来说,滤波后的结果也越模糊,噪声产生的影响变小。如果想最大程度的去除噪声,采用均值滤波的形式的话,那么需要一个很大的尺寸,同时对图像的整体质量有较大的影响。

对椒盐噪声,由于我们的均值滤波是每一个像素值都贡献了相同作用,所以对于椒盐噪声来说,仍然可以看出图像中含有椒盐噪声,只不过椒盐噪声的颗粒没有那么亮,没有那么明显,但是椒盐噪声的颗粒变得更粗了。

在方框滤波中:方框滤波中如果进行归一化操作,所得到的结果与均值滤波的结果一致,若不进行归一化操作,那么有可能出现图像中数值远远大于255,但是在opencv中,会强制为255,所以导致整个图像中,较大的区域都为白色,而有纹理的恰恰是原图像中较暗的区域。

在高斯滤波中:顾名思义对高斯噪声的滤波更为理想。结果也会变得模糊,但是处理结果也较好。若图像中含有椒盐噪声,采用线性滤波的方式得到的结果不太理想。

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

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

相关文章

持续集成工具Jenkins的使用之配置篇(二)

上一篇 &#xff1a;持续集成工具Jenkins的安装配置之安装篇(一)-CSDN博客 接上文 三.Jenkins配置 Jenkins配置主要是针对创建构建任务前做的一些基本配置&#xff0c;这些配置有些是必须的&#xff0c;有些是可以帮我们提高效率的&#xff0c;总之都是Jenkins管理员都要会的…

从物联网看智慧文旅的未来:技术与实践的完美结合,重塑旅游体验的新篇章

一、物联网技术&#xff1a;智慧文旅的基石 随着科技的飞速发展&#xff0c;物联网技术已经深入到我们生活的方方面面&#xff0c;尤其在智慧文旅领域&#xff0c;物联网技术更是起到了不可或缺的作用。它如同智慧文旅的基石&#xff0c;为旅游行业带来了前所未有的创新和变革…

VRRP6协议--负载均衡配置

VRRP6负载均衡 VRRP6负载均衡指的是创建多个备份组,多个备份组同时承担数据转发的任务,对于每一个备份组,都有自己的Master和若干Backup设备。 VRRP6负载分担与VRRP6主备备份的基本原理和报文协商过程都是相同的。同样对于每一个VRRP6备份组,都包含一个Master设备和若干Ba…

统计中集中趋势的衡量标准

一、说明 统计中的中心趋势是用于表示大量数值数据的中间值或中心值的数值。这些获得的数值在统计学中称为中心值或平均值。 任何统计数据或序列的中心值或平均值是代表整个数据或其相关频率分布的变量的值。这样的值具有重要意义&#xff0c;因为它描绘了整个数据的性质或特征…

针对特定领域较小的语言模型是否与较大的模型同样有效?

经过2023年的发展&#xff0c;大语言模型展示出了非常大的潜力&#xff0c;训练越来越大的模型成为有效性评估的一个关键指标&#xff0c;论文《A Comparative Analysis of Fine-Tuned LLMs and Few-Shot Learning of LLMs for Financial Sentiment Analysis》中&#xff0c;作…

阿里云 SAE 2.0 正式商用:极简易用、百毫秒弹性效率,降本 40%

作者&#xff1a;黛忻 本文主要介绍阿里云 Serverless 应用引擎&#xff08;以下简称 SAE &#xff09;如何帮助企业跨越技术鸿沟&#xff0c;从传统应用架构无感升级到 Serverless 架构&#xff0c;以更高效、更经济的方式进行转型&#xff0c;快速进入云原生快车道&#xff0…

【Android】TypedArray的使用

介绍 看电池电量组件BatteryMeterView的时候看到的。 Array是个数组&#xff0c;所有TypedArray也是个容器&#xff0c;基本是用于自定义View里面的&#xff08;至少我目前见过的全部都在自定义View里面&#xff09;。 使用 1.自定义View public class RoundSeekbarView e…

【深度学习】BasicSR训练过程记录,如何使用BasicSR训练GAN

文章目录 两种灵活的使用场景项目结构概览简化的使用方式 项目结构解读1. 代码的入口和训练的准备工作2. data和model的创建2.1 dataloader创建2.2 model的创建 3. 训练过程 动态实例化的历史演进1. If-else判断2. 动态实例化3. REGISTER注册机制 REGISTER注册机制的实现1. DAT…

嵌入式基础知识-测试基础概念

本篇来介绍嵌入式项目开发中&#xff0c;软件测试的相关基础知识。 1 测试基础知识 测试是指&#xff1a;在规定的条件下对程序进行操作&#xff0c;以发现错误&#xff0c;对软件质量进行评估 测试的对象包括程序、数据和文档 对于测试&#xff0c;并不是只有测试人员才需…

读AI3.0笔记04_视觉识别

1. 两次飞跃 1.1. ConvNets是当今计算机视觉领域深度学习革命的驱动力 1.1.1. 20世纪80年代便由法国计算机科学家杨立昆提出&#xff0c;而他则是受到了福岛邦彦提出的神经认知机&#xff08;Neocognitron&#xff09;的启发 1.2. ImageNet竞赛被看作计算机视觉和人工智能进…

Docker 配置 Gitea + Drone 搭建 CI/CD 平台

Docker 配置 Gitea Drone 搭建 CI/CD 平台 配置 Gitea 服务器来管理项目版本 本文的IP地址是为了方便理解随便打的&#xff0c;不要乱点 首先使用 docker 搭建 Gitea 服务器&#xff0c;用于管理代码版本&#xff0c;数据库选择mysql Gitea 服务器的 docker-compose.yml 配…

Kubernetes(K8S)拉取本地镜像部署Pod 实现类似函数/微服务功能(可设置参数并实时调用)

以两数相加求和为例&#xff0c;在kubernetes集群拉取本地的镜像&#xff0c;实现如下效果&#xff1a; 1.实现两数相加求和 2.可以通过curl实时调用&#xff0c;参数以GET方式提供&#xff0c;并得到结果。&#xff08;类似调用函数&#xff09; 一、实现思路 需要准备如下的…

分布式websocket IM聊天系统相关问题问答【第九期】

前言 上期视频讲解了自己关于聊天系统的设计的时候出现了一些不一样的声音。不了解情况的可以看上上期视频。这期主要是讨论。IM聊天系统设计方案多。我的先说明一下自己的技术背景互相之间才能更好的理解。 本期对应视频 目前已经写的文章有。并且有对应视频版本。 git项目地…

FPGA中跨时钟域传数据——(1)单bit脉冲

FPGA中跨时钟域传数据——&#xff08;1&#xff09;单bit脉冲 亚稳态模型由快时钟传到慢时钟由慢时钟传到快时钟 亚稳态模型 必须在建立时间和保持时间内&#xff0c;数据不变化&#xff0c;否则会产生亚稳态。 由快时钟传到慢时钟 在快时钟里面进行数据展宽&#xff08;…

牛客周赛 Round 20 解题报告 | 珂学家 | 状压DP/矩阵幂优化 + 前缀和的前缀和

前言 整体评价 这场比赛很特别&#xff0c;是牛客周赛的第20场&#xff0c;后两题难度直线飙升了。 前四题相对简单&#xff0c;E题是道状压题&#xff0c;历来状压题都难&#xff0c;F题压轴难题了&#xff0c;感觉学到了不少。 A. 赝品 先求的最大值 然后统计非最大值的个…

位置无关码PIC详解:原理、动态链接库、代码重定位

静态链接库将代码和数据在编译时整合到可执行文件&#xff0c;使程序独立运行。动态链接库允许在程序运行时加载&#xff0c;而不是在编译时将库的代码和数据静态地合并到可执行文件中。这允许多个程序共享同一份库&#xff0c;减小程序体积。由于动态链接库在编译时并未确定其…

【Electron】Electron是什么

1. Electron是什么 Electron是使用JavaScript、HTML和CSS构建跨平台&#xff08;Windows、MacOs、Linux&#xff09;的桌面应用。Electron其实就是一个可以展示网页内容的壳子&#xff0c;相当于一个独立的浏览器&#xff0c;可以提供给你一些接口&#xff0c;去调用系统的资源…

微软 Power Apps model drven app 模型驱动应用使用Plugin插件实现业务流程跳转阶段功能

微软 Power Apps model drven app 模型驱动应用使用Plugin插件实现业务流程跳转阶段功能 模型驱动应用使用插件实现跳转业务流程阶段跳转功能 在实际操作中总会遇到使用业务流程的需求&#xff0c;那么如何使用plugin实现跳转阶段的功能呢 需求背景是主表上有业务流程&#x…

在Python环境中运行R语言的配环境实用教程

前情提要 在做一些生物信息与医学统计的工作&#xff0c;本来偷懒希望只靠python完成的&#xff0c;结果还是需要用R语言&#xff0c;倒腾了一会儿&#xff0c;调成功了&#xff0c;就记录一下这个过程。 我的环境&#xff1a; win10, pycharm, R-4.3.2 首先&#xff0c;我们…

Redis 面试题 | 05.精选Redis高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…