数字图像线性滤波——方框、均值、高斯滤波及opencv(C++)实现示例

数字图像线性滤波——方框、均值、高斯滤波及opencv(C++)实现示例

  • 一、图像滤波概念简介
  • 二、方框滤波及opencv实现示例
    • 1、方框滤波的公式
    • 2、opencv方框滤波boxfilter()函数
      • (1)函数介绍
      • (2)opencv实现实例(C++)
      • (3)效果展示及说明
  • 三、均值滤波及opencv实现示例
    • 1、均值滤波原理
    • 2、opencv均值滤波blur()函数
      • (1)函数介绍
      • (2)opencv实现实例(C++)
      • (3)效果展示
  • 三、高斯滤波及opencv实现示例
    • 1、高斯滤波原理
    • 2、opencv高斯滤波GaussianBlur()函数
      • (1)函数介绍
      • (2)opencv实现实例(C++)
      • (3)效果展示

1、文章简单介绍数字图像滤波的概念
2、介绍方框、均值、高斯滤波的原理及公式
3、介绍opencv(C++)中如何使用方框、均值、高斯滤波以及实验效果展示

一、图像滤波概念简介

在一幅图像中,高频部分是指图像中像素值落差很大的部分,低频部分是指像素值与旁边的像素值相差不大甚至相同,图像的一些细节部分往往由高频信息来展现,图像中掺杂的噪声往往也处于高频段,这就造成了一些细节信息被噪声淹没,图像滤波可以去除这些噪声。

图像滤波,是指在尽可能保留图像细节特征的条件下对目标图像的噪声进行抑制,所以,图像滤波的目的有两个,一个是抑制噪声,另一个是保留需要的细节特征。图像滤波是图像预处理中不可缺少的操作,滤波的好坏,直接影响后续图像处理算法的性能。

数字图像滤波器,就是一个对像素及其邻域(该像素周围一定范围的点)进行加权处理(卷积操作),加权处理后的值就是这一点新的像素值。如下图所示,3*3的核和左边浅蓝色的部分卷积,最后96的像素值变成新的92。
在这里插入图片描述
opencv中,有方框滤波,均值滤波,高斯滤波三种线性滤波,以及中值滤波和双边滤波这两种非线性滤波。

二、方框滤波及opencv实现示例

1、方框滤波的公式

在这里插入图片描述
在这里插入图片描述

2、opencv方框滤波boxfilter()函数

(1)函数介绍

函数调用形式:

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

函数参数详解:
第一个参数:InputArray src表示输入图像
第二个参数:OutputArray dst表示输出图像
第三个参数:int ddepth输出图像的深度
第四个参数:Point anchor=Point(-1,-1)处理的像素点是卷积核的中心
第五个参数:boolnormalize=true表示是不是进行归一化
第六个参数:int borderType=BORDER_DEFAULT图像边界的处理方式
当阿尔法为1时,就是均值滤波。

(2)opencv实现实例(C++)

int main()
{Mat scrImage,dstImage;scrImage = imread("F:\\数字图像处理\\直方图\\5.jpg",1);imshow("原图", scrImage);boxFilter(scrImage, dstImage, -1, Size(5, 5), Point(-1, -1), 1);imshow("方框滤波后的图像",dstImage);waitKey(0);return 0;
}

(3)效果展示及说明

在这里插入图片描述
此时归一化为1,相当于均值滤波,图像变的模糊。
当归一化参数为0是,核的每一个元素都为1,此时图片的每个像素的值经过卷积之后应该都变的很大,所以图片变的很亮。
在这里插入图片描述

三、均值滤波及opencv实现示例

1、均值滤波原理

均值滤波是典型的线性滤波算法,主要方法为邻域平均法,即用一片图像区域的各个像素的均值来代替原图像中的各个像素值。

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

均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。

2、opencv均值滤波blur()函数

(1)函数介绍

第一个参数,InputArray类型的src,输入图像,任意通道的Mat。
第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。
第三个参数,Size类型的ksize,内核的大小。Size(3,3)表示3x3的核大小,Size(5,5)表示5x5的核大小
第四个参数,Point类型的anchor,表示锚点(即被平滑的那个点),注意他有默认值Point(-1,-1)。如果这个点坐标是负值的话,就表示取核的中心为锚点,所以默认值Point(-1,-1)表示这个锚点在核的中心。
第五个参数,int类型的borderType,用于推断图像外部像素的边界模式。默认值BORDER_DEFAULT。

(2)opencv实现实例(C++)

int main()
{Mat scrImage, dstImage;scrImage = imread("F:\\数字图像处理\\直方图\\5.jpg", 1);imshow("原图", scrImage);blur(scrImage, dstImage, Size(5, 5), Point(-1, -1));imshow("方框滤波后的图像", dstImage);waitKey(0);return 0;
}

(3)效果展示

在这里插入图片描述

三、高斯滤波及opencv实现示例

1、高斯滤波原理

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,。

高斯滤波也是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。

高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

二维的高斯函数如下:

其中(x,y)(x,y)为点坐标,σ是标准差。

一个高斯滤波器的模板,需要对高斯函数进行离散化,得到的高斯函数值作为模板的系数。例如:要产生一个3×3的高斯滤波器模板,以模板的中心位置为坐标原点进行取样。模板在各个位置的坐标,如下所示(x轴水平向右,y轴竖直向下)

在这里插入图片描述
这样,将各个位置的坐标带入到高斯函数中,得到的值就是模板的系数。
对于窗口模板的大小为 (2k+1)×(2k+1),模板中各个元素值的计算公式如下:

在这里插入图片描述
这样计算出来的模板有两种形式:小数和整数。
小数形式的模板,就是直接计算得到的值,没有经过任何的处理;
整数形式的,则需要进行归一化处理。

2、opencv高斯滤波GaussianBlur()函数

(1)函数介绍

InputArray src: 输入图像,任意通道的Mat。
OutputArray dst: 输出图像,与输入图像有相同的类型和尺寸。
Size ksize: 高斯内核大小,这个尺寸与前面两个滤波kernel尺寸不同,ksize.width和ksize.height可以不相同但是这两个值必须为正奇数,如果这两个值为0,他们的值将由sigma计算。
double sigmaX: 高斯核函数在X方向上的标准偏差
double sigmaY: 高斯核函数在Y方向上的标准偏差,如果sigmaY是0,则函数会自动将sigmaY的值设置为与sigmaX相同的值,如果sigmaX和sigmaY都是0,这两个值将由ksize.width和ksize.height计算而来。具体可以参考getGaussianKernel()函数查看具体细节。
int borderType=BORDER_DEFAULT: 推断图像外部像素的边界模式,有默认值BORDER_DEFAULT,如果没有特殊需要不用更改,具体可以参考borderInterpolate()函数。

(2)opencv实现实例(C++)

int main()
{// 读取图像Mat Image = imread("./image/2.png", 0);imshow("Original Image", Image);// 定义模糊核的大小Size kernel_size(5, 5);// 使用cv::GaussianBlur()函数进行高斯模糊GaussianBlur(Image.clone(), Image, kernel_size, 0);// 显示原始图像和模糊后的图像imshow("GaussianBlur Image", Image);waitKey(0);return 0;
}

(3)效果展示

在这里插入图片描述

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

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

相关文章

微信小程序案例-03翻页时钟-3

微信小程序实战系列 《微信小程序实战-01翻页时钟-1》《微信小程序实战-02翻页时钟-2》 文章目录 微信小程序实战系列前言动态翻页效果实现clock.wxmlclock.wxssclock.js运行效果 总结 前言 本文继续完成最后一个部分“动态翻页效果”。 动态翻页效果实现 clock.wxml <…

查看SQL Server的表字段类型、长度、描述以及是否可为null

文章目录 初步理解小步测试组合一下参考文章有更详细评述 继续理解得到大部分信息 本文参考&#xff1a;https://blog.csdn.net/josjiang1/article/details/80558068。 也可以直接点击这里文章链接&#xff1a; sql server查询表结构&#xff08;字段名&#xff0c;数据类型&a…

面试常见知识点--树的遍历

一、前序遍历 算法流程: 1.先申请一个栈&#xff0c;记为stk。 2&#xff0e;然后将根节点压入stk中。 3&#xff0e;每次从stk中弹出栈顶节点&#xff0c;记为cur&#xff0c;然后打印cur的值。如果cur的右子树不为空&#xff0c;将cur的右子树压入stk中。如果cur的左子树不为…

CSS 中的伪装大师:伪类和伪元素的奇妙世界

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

JavaScript中的文件下载

在JavaScript中&#xff0c;实现文件下载的功能可以通过多种方式实现&#xff0c;以下是一些常见的方法&#xff1a; 方法 1&#xff1a;使用HTML5的<a>标签 如果你已经有了一个文件的URL&#xff0c;可以简单地使用一个 <a> 标签并设置download属性。这可以通过…

双指针问题——求只包含两个元素的最长连续子序列(子数组)

一&#xff0c;题目描述 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而&#xff0c;农场的主人设定了一些严格的规矩&#xff0c;你必…

代码随想录 Leetcode203. 移除链表元素

题目&#xff1a; 代码(首刷看解析 2024年1月11日&#xff09;&#xff1a; class Solution { public:ListNode* removeElements(ListNode* head, int val) {if(headnullptr) return nullptr;ListNode* BeforeHead new ListNode(0,head);ListNode* temp BeforeHead;while(te…

【正点原子STM32连载】第三十一章 待机模式实验 摘自【正点原子】APM32E103最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子APM32E103最小系统板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第三…

逆向分析爬取网页动态

本例子以爬取人民邮电出版社网页新书的信息为例 由于页面是动态的&#xff0c;信息会不停地更新&#xff0c;所以不同时间的爬取结果会不同。

银行的压力测试如何进行?

为什么要进行压力风险测试&#xff1f; 压力风险测试的最终目的是测试银行在极度恶劣的市场环境中是否有足够的资本维持运转。 题主链接中的一级资本充足率(Tier 1 capital ratio) 亦即衡量标准&#xff0c;这个数字越大&#xff0c;表明银行资本约充裕&#xff0c;可以在停止…

Kubernetes (七) service(微服务)及Ingress-nginx

官网地址&#xff1a; 服务&#xff08;Service&#xff09; | Kuberneteshttps://v1-24.docs.kubernetes.io/zh-cn/docs/concepts/services-networking/service/ 一 . 网络通信原理 …

独立安全 | 企业选择系统定制化开发的最主要优势

随着信息化和互联网的迅猛发展&#xff0c;网络经济给企业带来了巨大的好处。越来越多的企业选择利用第三方平台来建设网店系统&#xff0c;这也导致竞争变得越来越激烈。另一方面&#xff0c;选择定制开发独立商城对企业也有很多好处。这些好处包括以下几点&#xff1a; 1.独…

2024年前端面试中JavaScript的30个高频面试题之基础知识

中级 高级知识 充分准备你的下一个JavaScript面试,增强信心! 无论你是老手还是刚进入技术行业,这份2024年必备资源都将帮助你复习核心概念,从基本语言特性到高级主题。 在本文中,我汇总了30个最关键的JavaScript面试题以及详细的答案和代码示例。 深入探索这宝贵的收藏,以确…

NAND Separate Command Address (SCA) 接口数据传输解读

在采用Separate Command Address (SCA) 接口的存储产品中&#xff0c;DQ input burst和DQ output burst又是什么样的策略呢&#xff1f; DQ Input Burst: 在读取操作期间&#xff0c;数据以一种快速并行的方式通过DQ总线传送到控制器。在SCA接口下&#xff0c;虽然命令和地址信…

关于Python里xlwings库对Excel表格的操作(三十一)

这篇小笔记主要记录如何【如何使用“Chart类”、“Api类"和“Axes函数”设置绘图区外框线型、颜色、粗细及填充颜色】。前面的小笔记已整理成目录&#xff0c;可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 &#xff08;1&#xff09;如何安…

【附源码】基于SSM+Java的题库管理系统的设计与实现

基于SSMJava的题库管理系统的设计与实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;We…

JAVA序列化

对象序列化&#xff08;object serialization&#xff09;是java支持的通用机制&#xff0c;可以将任何对象写出到流中&#xff0c;并在之后将其回读。简单来说&#xff0c;就是可以将对象数据保存为文件&#xff0c;甚至可以通过网络传输&#xff0c;在这之后或者别的主机上恢…

企业如何开展百科营销?需要创建哪些百科词条?

在营销工作实践中&#xff0c;小马识途营销顾问经常接到关于百科营销的咨询&#xff0c;现整理了最受关注的九个问题分享给热爱营销工作的小伙伴。 一、什么是百科营销&#xff1f; 百科营销是借助百科知识传播&#xff0c;可以将企业、品牌、人物所拥有的对用户有价值的信息&a…

Redis的优化

1 Redis的高可用 1.1 高可用的定义 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&…

RTSP网络视频协议

一.RTSP网络视频协议介绍 RTSP是类似HTTP的应用层协议&#xff0c;一个典型的流媒体框架网络体系可参考下图&#xff0c;其中rtsp主要用于控制命令&#xff0c;rtcp主要用于视频质量的反馈&#xff0c;rtp用于视频、音频流从传输。 1、RTSP&#xff08;Real Time Streaming P…