数字图像线性滤波——方框、均值、高斯滤波及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,一经查实,立即删除!

相关文章

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

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

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

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

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

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

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

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

逆向分析爬取网页动态

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

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

官网地址: 服务(Service) | Kuberneteshttps://v1-24.docs.kubernetes.io/zh-cn/docs/concepts/services-networking/service/ 一 . 网络通信原理 …

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

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

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

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

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

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

Redis的优化

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

RTSP网络视频协议

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

【群晖NAS】记一次FRP报错:login to server failed: connection write timeout

报错如下: rongfuDS224plus:~/fff/frp$ ./frpc -c ./frpc.toml 2024/01/12 23:08:31 [I] [root.go:139] start frpc service for config file [./frpc.toml] 2024/01/12 23:08:41 [W] [service.go:131] login to server failed: i/o deadline reached 2024/01/12 2…

人工智能:未来智慧城市建设的“智慧大脑”与核心价值

目录 一、引言 二、人工智能在智慧城市中的应用实例 三、人工智能对智慧城市建设的核心价值 四、面临的挑战与未来展望 五、结语 六、附:智慧城市全套解决方案大合集 - 下载 一、引言 随着科技的飞速发展,智慧城市的概念逐渐深入人心。智慧城市利…

python爬虫实战(10)--获取本站热榜

1. 需要的类库 import requests import pandas as pd2. 分析 通过分析,本站的热榜数据可以直接通过接口拿到,故不需要解析标签,请求热榜数据接口 url "https://xxxt/xxxx/web/blog/hot-rank?page0&pageSize25&type" #本…

最全Linux驱动开发全流程详细解析(持续更新)

Linux驱动开发详细解析 一、驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁。 具体任务 读写设备寄存器(实现控制的方式)完成设备的轮询、中断处理、DMA通信(CPU与外设通信的方式)进行物理内存…

linux创建文件并分配权限

linux中对文件的定义 在Linux中,文件是一个具有符号名字的一组相关联元素的有序序列。文件可以包含的内容十分广泛,操作系统和用户都可以将具有一定独立功能的一个程序模块、一组数据或一组文字命名为一个文件。文件名是数据有序序列集合(文…

聚焦老年生活与健康,“老有所依·情暖夕阳”元岗街社区微型养老博览会顺利开展

尊老敬老是中华民族的传统美德, 爱老助老是全社会的共同责任。 家有一老,如有一宝, 长者的生活情况是一个家庭的头等大事, 做好长者服务是街道和社区的重要工作。 2024年1月6日,由元岗街道党工委、元岗街道办事处、…

开源C语言库Melon:红黑树

本文对Melon库中的红黑树进行介绍,关于Melon库,这是一个开源的C语言库,它具有:开箱即用、无第三方依赖、安装部署简单、中英文文档齐全等优势。 Github repo 简介 红黑树是一种被应用的非常广泛的数据结构,用于快速搜…

Veeam Backup12安装备份恢复ESXI7.0 U3虚拟机

介绍 只需单个平台即可保护并管理所有工作负载、应用及数据:云端、虚拟、物理、SaaS、Kubernetes、VMware、Hyper-V、Windows、Linux、UNIX、NAS、AWS、Azure、企业应用等。 个人主要用于备份ESXi上的虚拟机,可以实现单次完整备份,和定时的…

Vue3 的基本开发+新特性

Vue3 1.Vue3 1. Vue2 选项式 API vs Vue3 组合式API <script> export default {data(){return {count:0}},methods:{addCount(){this.count}} } </script> <script setup> import { ref } from vue const count ref(0) const addCount ()> count.val…