数字图像线性滤波——方框、均值、高斯滤波及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.mfbz.cn/a/313557.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

怎样创建vue项目(分别基于vue-cli和vite两种的创建方式)

一、基于vue-cli脚手架创建 1、安装node.js 1、首先需要安装node.js,推荐下载地址:Node.js 2、检查是否安装成功,使用打开黑窗口的快捷键windowR,输入cmd,在黑窗口输入node -v,如果输出版本号&#xff0…

LeNet-5(用于手写体字符识别)

结构:输入的二维图像,先经过两次卷积层到池化层,再经过全连接层,最后使用softmax分类作为输出层 每层有多个Feature Map(每个Feature Map有多个神经元) Feature Map通过一种卷积滤波器提取输入的一种特征 …

19. 从零用Rust编写正反向代理, 配置数据的热更新原理及实现

wmproxy wmproxy是由Rust编写,已实现http/https代理,socks5代理, 反向代理,静态文件服务器,内网穿透,配置热更新等, 后续将实现websocket代理等,同时会将实现过程分享出来&#xff…

vue3.2引用unplugin-vue-components插入,解放开发中import组件

目录 前言引用unplugin-vue-components插件的优缺点优点缺点 unplugin-vue-components插件引入安装插件配置vite配置更新TypeScript配置使用代码位置 总结Q&A 前言 unplugin-vue-components是一个用于Vue.js项目的插件,特别适用于Vite和Webpack构建工具。它的主…

区块链是怎么存储数据的?

每个块都是有大小限制的新的数据存储单元,当前数据不到上限,那么都可以添加进块。当前数据达到了上限,那么就得分表/分块,超限的那部分数据就需要等待下个区块存储 存储的数据:和mysql一样,文本数据直接存储…

【ceph】在虚拟环境中需要给osd所在的虚拟盘扩容操作

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

CAD点划线如何绘制?

CAD作为一款专业的制图软件,应用范围非常广泛,在所有需要精准数据的行业都会用到它。其中,公路交通工程等行业应用CAD软件是最多的,而且在这些行业中CAD软件中的线段应用也是最广泛的,其中的点划线在公路设计中用的是最…

MySQL一主一从读写分离

​ MySQL主从复制 一、主从复制概念 主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从服务器中,然后在从服务器上对这些日志重新执行也叫重做,从而使得从数据库和主库的数据保持同步。 MySQL支持一台主库同时向多台从库进行赋值,从…

恒通未来-大数据传输中的WDM解决方案

DWDM的出现是光纤传输技术发展中最新的重要现象之一。本教程将介绍DWDM技术的基本原理,如组件、DWDM系统中使用的光放大器等。 组件和操作: DWDM是光传输网络中的一种核心技术。DWDM的基本组件可以根据其在系统中的位置进行分类。在发射方面&#xff0…

ChatGPT:人工智能与人类交流的桥梁

在人工智能的浪潮中,ChatGPT以其独特的交流能力成为了一个亮点。作为一个基于强大的GPT-4模型的聊天机器人,ChatGPT不仅仅是技术的展示,它更是人工智能与人类交流的桥梁。 人工智能的语言理解革命 ChatGPT的出现标志着人工智能在语言理解和…

ADI官方例程HDL和No-OS生成Vivado工程

源码下载 1、HDL(hdl-hdl_2019_r2.zip):https://github.com/analogdevicesinc/hdl/tree/main 2、No-OS(no-OS-2019_R2.zip):https://github.com/analogdevicesinc/no-OS/tree/main 软件工具 序号名称说明1Vivado 2019.12Cygwin Cygwin安装 1.安装步…

学生服务器是什么?推荐几款学生专享便宜服务器

随着科技的飞速发展,互联网已经成为我们生活中不可或缺的一部分。对于学生来说,拥有一个自己的服务器,不仅可以提供稳定、高效的网络服务,更可以成为探索和学习云计算、大数据等前沿技术的平台。本文将为学生朋友们推荐几款专享的…

好习惯修炼法则-1

2024年1月12日--读书笔记--好习惯修炼法则:《好习惯修炼法则:用3分钟改善你的生活习惯》([日]桦泽紫苑)【摘要 书评 试读】- 京东图书 (jd.com) 养成好的睡眠习惯,不仅可以提升免疫力,而且可以提高工作效率!当有工作任…

vue前端开发自学,插槽练习第二次,name属性的使用

vue前端开发自学,插槽练习第二次,name属性的使用!可以使用name属性,来自定义一个名字,这样,就可以在一个组件内同时出现多个插槽的内容了。在子组件内接收的时候,很简答,只需要在slot标签里面加上name“mz”&#xff1…

云服务器十大服务商——云服务器哪家好用

云服务器哪家便宜?2024最新整理你要的都在这!头部云厂商阿里云、腾讯云、华为云、京东云、UCloud等都在降价,阿腾云atengyun.com分享2024年云服务器租用价格给你惊喜! 便宜云服务器阿里云腾讯云华为云 2024年便宜云服务器汇总&…

ssm基于Javaweb的网上花店系统的设计与实现论文

摘 要 进入21世纪网络和计算机得到了飞速发展,并和生活进行了紧密的结合。目前,网络的运行速度以达到了千兆,覆盖范围更是深入到生活中的角角落落。这就促使网上购物系统的发展。网上购物可以实现远程购物,远程选择喜欢的商品和随…

3万字数据结构与算法学习笔记+知识点总结

文章目录 数据结构与算法排序排序算法常见排序算法复杂度冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)希尔排序(Shell Sort)堆排序(Heap Sor…

协作共生:数字孪生与智慧城市的共赢之路

引言 随着科技的飞速发展,数字孪生和智慧城市的概念逐渐融入现代城市的规划和建设中。数字孪生技术为智慧城市的建设提供了强大的支持,而智慧城市则为数字孪生的应用提供了广阔的舞台。本文将深入探讨数字孪生与智慧城市之间的相互影响与协作&#xff0…

【QT】标准对话框

目录 1 概述 2 QFileDialog对话框 1.选择打开一个文件 2.选择打开多个文件 3.选择已有目录 4.选择保存文件名 3 QColorDialog对话框 4 QFontDialog对话框 5 QInputDialog标准输入对话框 1.输入文字 2.输入整数 3.输入…

Sublime Text 3配置 Python 开发环境

Sublime Text 3配置 Python 开发环境 一、引言二、主要内容1. 初识 Sublime Text 32. 初识 Python2. 接入 Python2.1 下载2.2 安装和使用 python2.2 环境变量配置 3. 配置 Python 开发环境4. 编写 Python 代码5. 运行 Python 代码 三、总结 一、引言 Python 是一种简洁但功能强…
最新文章