opencv 31-图像平滑处理-方框滤波cv2.boxFilter()

方框滤波(Box Filtering)是一种简单的图像平滑处理方法,它主要用于去除图像中的噪声和减少细节,同时保持图像的整体亮度分布。

方框滤波的原理很简单:对于图像中的每个像素,将其周围的一个固定大小的邻域内的像素值取平均,然后将这个平均值赋值给当前像素。这个邻域通常是一个正方形,称为方框或窗口。方框滤波相当于用一个均值滤波器对图像进行滤波。

与均值滤波的不同在于,方框滤波不会计算像素均值。
在均值滤波中,滤波结果的像素值是任意一个点的邻域平均值,等于各邻域像素值之和除以邻域面积。

而在方框滤波中,可以自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和

我们以 5×5 的邻域为例,在进行方框滤波时,如果计算的是邻域像素值的均值,则滤波关系如图 7-15 所示。

在这里插入图片描述

仍然以 5×5 的邻域为例,在进行方框滤波时,如果计算的是邻域像素值之和,则滤波关系
如图 7-16 所示。
在这里插入图片描述

根据上述关系,如果计算的是邻域像素值的均值,则使用的卷积核为:

在这里插入图片描述
如果计算的是邻域像素值之和,则使用的卷积核为:

在这里插入图片描述
在 OpenCV 中,实现方框滤波的函数是 cv2.boxFilter(),其语法格式为:

dst = cv2.boxFilter( src, ddepth, ksize, anchor, normalize, borderType
)

式中:
 dst 是返回值,表示进行方框滤波后得到的处理结果。

 src 是需要处理的图像,即原始图像。它能够有任意数量的通道,并能对各个通道独立处理。图像深度应该是 CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F 中的一种。

 ddepth 是处理结果图像的图像深度,一般使用-1 表示与原始图像使用相同的图像深度。

 ksize 是滤波核的大小。滤波核大小是指在滤波处理过程中所选择的邻域图像的高度和宽度。

例如,滤波核的值可以为(3,3),表示以 3×3 大小的邻域均值作为图像均值滤波处理的结果,如下式所示。

在这里插入图片描述
 anchor 是锚点,其默认值是(-1, -1),表示当前计算均值的点位于核的中心点位置。
该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。

 normalize 表示在滤波时是否进行归一化(这里指将计算结果规范化为当前像素值范围内的值)处理,该参数是一个逻辑值,可能为真(值为 1)或假(值为 0)。

 当参数 normalize=1 时,表示要进行归一化处理,要用邻域像素值的和除以面积。
 当参数 normalize=0 时,表示不需要进行归一化处理,直接使用邻域像素值的和。

通常情况下,针对方框滤波,卷积核可以表示为:
在这里插入图片描述
上述对应关系为:

在这里插入图片描述
例如,针对 5×5 邻域,当参数 normalize=1 时,要进行归一化处理,此时计算的就是均值滤波。
这种情况下,函数 cv2.boxFilter()和函数 cv2.blur()的作用是一样的。

此时,对应的卷积核为:

在这里插入图片描述
同样针对 5×5 邻域,当参数 normalize=0 时,不进行归一化处理,此时滤波计算的是邻域像素值之和,使用的卷积核是:

在这里插入图片描述
当 normalize=0 时,因为不进行归一化处理,因此滤波得到的值很可能超过当前像素值范围的最大值,从而被截断为最大值。

这样,就会得到一幅纯白色的图像。

 borderType 是边界样式,该值决定了以何种方式处理边界。

通常情况下,在使用方框滤波函数时,对于参数 anchor、normalize 和 borderType,直接采
用其默认值即可。因此,函数 cv2.boxFilter()的常用形式为:

dst = cv2.boxFilter( src, ddepth, ksize )

实验1: 针对噪声图像,对其进行方框滤波,显示滤波结果

代码如下:

import cv2
o=cv2.imread("lenaNoise.png")
r=cv2.boxFilter(o,-1,(5,5))
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:
在本例中,方框滤波函数对 normalize 参数使用了默认值。在默认情况下,该值为 1,表示要进行归一化处理。也就是说,本例中使用的是 normalize 为默认值 True 的 cv2.boxFilter()函数,
此时它和函数 cv2.blur()的滤波结果是完全相同的。如图 所示,左图是原始图像,右图是方框滤波结果图像
在这里插入图片描述

实验2:针对噪声图像,在方框滤波函数 cv2.boxFilter()内将参数 normalize 的值设置为 0,显示滤波处理结果。

代码如下:

import cv2
o=cv2.imread("lenaNoise.png")
r=cv2.boxFilter(o,-1,(5,5),normalize=0)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

在本例中,没有对图像进行归一化处理。在进行滤波时,计算的是 5×5 邻域的像素值之和,图像的像素值基本都会超过当前像素值的最大值 255。因此,最后得到的图像接近纯白色,部分点处有颜色。部分点有颜色是因为这些点周边邻域的像素值均较小,邻域像素值在相加后仍然小于 255。

此时的图像滤波结果如图所示,左图是原始图像,右图是方框滤波后得到的处理结果
在这里插入图片描述

实验3:针对噪声图像,使用方框滤波函数 cv2.boxFilter()去噪,将参数 normalize 的值设置为 0,将卷积核的大小设置为 2×2,显示滤波结果

代码如下:

import cv2
o=cv2.imread("lenaNoise.png")
r=cv2.boxFilter(o,-1,(2,2),normalize=0)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

在本例中,卷积核大小为 2×2,参数 normalize=0。因此,本例中方框滤波计算的是 2×2邻域的像素值之和,四个像素值的和不一定大于 255,因此在计算结果图像中有部分像素点不是白色。如图 所示,左图是原始图像,右图是方框滤波处理结果。
在这里插入图片描述

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

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

相关文章

vue3和typescript_组件

1 components下新建myComponent.vue 2 页面中引入组件,传入值,并且绑定事件函数。 3

【Valgrind】如何使用Valgrind监控内存

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

计算机视觉与图形学-神经渲染专题-ConsistentNeRF

摘要 Neural Radiance Fields (NeRF) 已通过密集视图图像展示了卓越的 3D 重建能力。然而,在稀疏视图设置下,其性能显着恶化。我们观察到,在这种情况下,学习不同视图之间像素的 3D 一致性对于提高重建质量至关重要。在本文中&…

【LeetCode每日一题】——766.托普利茨矩阵

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【题目进阶】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 矩阵 二【题目难度】 简单 三【题目编号】 766.托普利茨矩阵 四【题目描述…

【测试开发】Mq消息重复如何测试?

本篇文章主要讲述重复消费的原因,以及如何去测试这个场景,最后也会告诉大家,目前互联网项目关于如何避免重复消费的解决方案。 Mq为什么会有重复消费的问题? Mq 常见的缺点之一就是消息重复消费问题,产生这种问题的原因是什么呢…

16、外部配置源与外部配置文件及JSON配置

外部配置源与外部配置文件及JSON配置 application.properties application.yml 这些是配置文件, 命令行配置、环境变量配置、系统属性配置源,这些属于配置源。 外部配置源的作用: Spring Boot相当于对Spring框架进行了封装,Spri…

webrtc的回声消除延迟时间估算

叫回声消除的延迟时间估算不太合理,这里核心就是估算调用webrtc的条件边界,都知道webrtc回声消除的生效的前提就是一定要拿到远端声音的信息,然后拿近端声音和远端声音对齐,从近端声音中,结合远端声音模拟出远端声音在…

Windows用户如何安装新版本cpolar内网穿透超详细教程

Windows用户如何安装新版本cpolar内网穿透 文章目录 Windows用户如何安装新版本cpolar内网穿透 在科学技术高度发达的今天,我们身边充斥着各种电子产品,这些电子产品不仅为我们的工作带来极大的便利,也让生活变得丰富多彩。我们可以使用便携的…

[Python] Pylance 插件打开 Python 的类型检查

安装 Python 插件 2.打开一个 Python 文件 可以看到右下角有一个花括号和 Python 字样,点击花括号(不是 Python 字样)打开类型检查即可:

酷开系统 | 酷开科技,让数据变得更有价值!

身处信息时代,我们每个人时刻都在生成、传递和应用数据,数据已经成为了现代社会中宝贵的资源之一,而在人工智能领域,数据更是被称为人工智能的“燃料”。 而在AI的发展中,只有拥有高质量、多样性且充分代表性的数据集…

java 定时任务不按照规定时间执行

这里写目录标题 使用异步启动可能出现的问题排查代码中添加的定时任务步骤是否正确排查是否任务阻塞,如果定时任务出现异常阻塞后,将不会在次执行java中多个Scheduled定时器不执行为了让Scheduled效率更高,我们可以通过两种方法将定时任务变成…

vxworks文件系统分析

参考https://www.freebuf.com/articles/endpoint/335030.html 测试固件 https://service.tp-link.com.cn/detail_download_7989.html 固件提取 binwalk解压固件,在第一部分即为要分析的二进制文件,可以拖进ida分析 设置为arm小端字节序,点…

【HarmonyOS】性能优化之低代码开发加载多张轮播图

【关键字】 HarmonyOS、低代码开发、Swiper组件、性能优化、分页加载 写在前面 目前使用DevEco Studio的低代码工具开发元服务时,通过实际测试发现,Swiper组件加载多张轮播图时加载显示耗时较长(实际测试网络状态一般的情况下显示耗时达到8…

ER系列路由器多网段划分设置指南

ER系列路由器多网段划分设置指南 - TP-LINK 服务支持 TP-LINK ER系列路由器支持划分多网段,可以针对不同的LAN接口划分网段,即每一个或多个LAN接口对应一个网段;也可以通过一个LAN接口与支持划分802.1Q VLAN的交换机进行对接,实现…

Stable Diffusion:网页版 体验 / AI 绘图

一、官网地址 Stable Diffusion Online 二、Stable Diffusion AI 能做什么 Stable Diffusion AI绘图是一种基于Stable Diffusion模型的生成式AI技术,能够生成各种类型的图像,包括数字艺术、照片增强和图像修复等。以下是一些可能的应用: …

怎么设置文件夹密码?文件夹密码设置方法合集

为文件夹设置密码可以有效地保护文件夹的数据安全,那么该怎么设置文件夹密码呢?下面我们来一起了解一下。 文件夹保护3000 想要简单快捷的为文件夹设置密码,那么,文件夹保护3000就是最佳的选择。它提供了3种文件夹保护方式&#…

IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介

系列文章目录 IDEA上面书写wordcount的Scala文件具体操作 IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍 目录 系列文章目录 前言 一 准备工作 1.1 安装Maven 1.1.1 Maven安装配置步骤 1.1.2 解压相关的软件包 1.1.3 Maven 配置环境变量 1.1.4 配…

vue2 el-carousel轮播图和文字一起改变

vue项目的话 安装一下element依赖 npm i element-ui -S在main入口文件引入element包 我在app文件里边去写的 <template><div class"w"><el-carousel height"460px"><el-carousel-item v-for"item in items" :key"i…

C++之观察者模式(发布-订阅)

目录 模式简介 介绍 优点 缺点 代码实现 场景说明 实现代码 运行结果 模式简介 观察者模式&#xff08;Observer Pattern&#xff09;&#xff0c;也叫我们熟知的发布-订阅模式。 它是一种行为型模式。 介绍 观察者模式主要关注的是对象的一对多的关系&#xff0c; …

C++ 哈希的应用【布隆过滤器】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f383;操作环境&#xff1a; Visual Studio 2022 版本 17.6.5 文章目录 &#x1f307;前言&#x1f3d9;️正文1、字符串比较2、布隆过滤器的概念3、布隆过滤器的实现3.1、基本结构3.2、插入…