OpenCV学习(4.4) 平滑图像

1.目的

在本教程中将学习:

  • 用各种低通滤波器模糊图像。
  • 对图像应用自定义过滤器(二维卷积)。

在图像处理中,平滑图像是一种去噪和模糊技术,用于减少图像中的噪声和细节,使得图像看起来更加平滑。平滑处理可以用于预处理步骤,以改善后续图像分析或识别任务的效果。

以下是一些常用的图像平滑技术:
1. 均值滤波器(Mean filter):
   均值滤波器是最简单的平滑技术之一。它通过用像素周围的平均值替换每个像素的值来减少噪声。这种滤波器会降低图像的锐度和细节。
2. 中值滤波器(Median filter):
   中值滤波器是一种非线性的平滑技术,它用像素周围的中值替换每个像素的值。中值滤波器特别有效于去除椒盐噪声,同时比均值滤波器更好地保留边缘信息。
3. 高斯滤波器(Gaussian filter):
   高斯滤波器使用高斯函数作为权重,对像素及其周围的像素进行加权平均。这种滤波器可以有效地去除高斯噪声,同时保留更多的图像细节。
4. 双边滤波器(Bilateral filter):
   双边滤波器是一种非线性的、边缘保持的平滑技术。它考虑了像素之间的空间邻近性和像素值的相似性,因此在平滑图像的同时能够较好地保持边缘。
5. 同态滤波(Homomorphic filtering):
   同态滤波是一种增强图像对比度的方法,它通过对图像进行对数变换和频率域滤波,然后再进行指数逆变换,来实现图像的平滑和亮度调整。
这些平滑技术可以根据具体的应用场景和需求来选择。例如,如果图像中存在大量的椒盐噪声,中值滤波器可能是最佳选择。如果需要去除高斯噪声同时保持图像的清晰度,高斯滤波器或双边滤波器可能更合适。在实际应用中,可能需要尝试不同的平滑方法,以找到最适合特定图像的平滑技术。

2.二维卷积(图像滤波)

与一维信号一样,图像也可以通过各种低通滤波器(LPF)、高通滤波器(HPF)等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。

opencv 提供了函数 **cv.filter2D()**,用于将内核与图像卷积起来。作为一个例子,我们将尝试对图像进行均值滤波操作。5x5 均值滤波卷积核如下:

操作如下:将该内核中心与一个像素对齐,然后将该内核下面的所有 25 个像素相加,取其平均值,并用新的平均值替换这个25x25窗口的中心像素。它继续对图像中的所有像素执行此操作。试试下面这段代码并观察结果: 

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('opencv_logo.png')
kernel = np.ones((5,5),np.float32)/25
dst = cv.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()
2.1 均值模糊

这是通过用一个归一化的滤波器内核与图像卷积来完成的。它只需取内核区域下所有像素的平均值并替换中心元素。这是通过函数 **cv.blur()**或 **cv.boxFilter()**完成的。有关内核的更多详细信息,请查看文档。我们应该指定滤波器内核的宽度和高度。

3x3 标准化框滤波器如下所示:

5x5 核的简单应用如下所示:

mport cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('opencv-logo-white.png')
blur = cv.blur(img,(5,5))
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()

2.2 高斯模糊

在这种情况下,使用高斯核代替了核滤波器。它是通过函数 **cv.GaussianBlur()**完成的。我们应该指定内核的宽度和高度,它应该是正数并且是奇数(奇数才有一个中位数)。我们还应该分别指定 x 和 y 方向的标准偏差、sigmax 和 sigmay。如果只指定 sigmax,则 sigmay 与 sigmax 相同。如果这两个值都是 0,那么它们是根据内核大小计算出来的。高斯模糊是消除图像高斯噪声的有效方法。

如果需要,可以使用函数 **cv.getGaussianKernel()**创建高斯内核。

上述代码可以修改为高斯模糊:

blur = cv.GaussianBlur(img,(5,5),0)

结果:

2.3 中值滤波 

在这里,函数 **cv.medianBlur()**取内核区域下所有像素的中值,将中央元素替换为该中值。这对图像中的椒盐噪声非常有效。有趣的是,在上面的过滤器中,中心元素是一个新计算的值,它可能是图像中的像素值,也可能是一个新值。但在中值模糊中,中心元素总是被图像中的一些像素值所取代,可以有效降低噪音。它的内核大小应该是一个正的奇数整数。

在这个演示中,我在原始图像中添加了 50%的噪声,并应用了中间模糊。结果如下:

median = cv.medianBlur(img,5)

结果:

2.4 双边滤波 

**cv.bilateralFilter()**在保持边缘锐利的同时,对噪声去除非常有效。但与其他过滤器相比,操作速度较慢。我们已经看到高斯滤波器取像素周围的邻域并找到其高斯加权平均值。该高斯滤波器是一个空间函数,即在滤波时考虑相邻像素。但是它不考虑像素是否具有几乎相同的强度,也不考虑像素是否是边缘像素。所以它也会模糊边缘,这是我们不想做的。

双边滤波器在空间上也采用高斯滤波器,而另一个高斯滤波器则是像素差的函数。空间的高斯函数确保模糊只考虑邻近像素,而强度差的高斯函数确保模糊只考虑与中心像素强度相似的像素。所以它保留了边缘,因为边缘的像素会有很大的强度变化。

下面的示例显示使用双边滤波(有关参数的详细信息,请访问文档)。

blur = cv.bilateralFilter(img,9,75,75)

结果: 

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

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

相关文章

Java核心: 为图片生成水印

今天干了一件特别不务正业的事,做了一个小程序用来给图片添加水印。事情的起因是需要将自己的身份证照片分享给别人,手边并没有一个趁手的工具来生成图片水印。很多APP提供了水印的功能,但会把我的图片上传到他们的服务器,身份证太…

OpenCV的“画笔”功能

类似于画图软件的自由笔刷功能,当按住鼠标左键,在屏幕上画出连续的线条。 定义函数: import cv2 import numpy as np# 初始化参数 drawing False # 鼠标左键按下时为True ix, iy -1, -1 # 鼠标初始位置# 鼠标回调函数 def mouse_paint(…

冯喜运:6.7今日外汇黄金原油走势分析及日内操作策略

【黄金消息面分析】:美国初请失业金人数超预期,市场对美联储9月降息预期升温,全球降息潮起,黄金市场受支撑。北京时间本周四,美国劳工部公布的数据显示,截至6月1日当周初请失业金人数增加至22.9万人&#x…

docker-compose 最新详细安装教程

方法1.安装Compose单机版 此方法是网上大部分教程的办法,官方不提倡这种方法安装: curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose sudo chmod x /usr/local/…

Diffusers代码学习: IP-Adapter

从操作的角度来看,IP-Adapter和图生图是很相似的,都是有一个原始的图片,加上提示词,生成目标图片。但它们的底层实现方式是完全不一样的,我们通过源码解读来看一下。以下是ip adapter的实现方式 # 以下代码为程序运行…

BGP基础实验

BGP协议中的建邻,与宣告路由分开的 在任何一台BGP路由上,均可宣告本地路由表中通过任何形势获取的路由条目,将其共享给其他BGP邻居; 然后display ip rou查看 *>代表状态 *的意思是可用 >代表优 i和*>无关&#x…

【面试题-004】ArrayList 和 LinkList区别

文章目录 List和setArrayList扩容机制HashMap扩容机制HashMap初始容量(Initial Capacity)和负载因子(Load Factor)HashMap与HashTable区别 ?HashMap底层数据结构?ConcurrentHashMap底层数据结构&#xff1f…

顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-同振与顺振的用法

文章目录 前言联系我们实现步骤同振顺振 前言 什么是同振、顺振? 同振 :同振是指多个终端同时振铃顺振:顺振是指多个终端顺序振铃 联系我们 有意向了解呼叫中心中间件的用户,可以点击该链接添加工作人员的微信:顶顶…

Hi3519DV500 学习摘录

文章目录 一、问题1、open-vm-tools 安装2、pushd: not found3、autoreconf4、编译util-linux源码时报错 ERROR: You must have autopoint installed to 二、NFS1、服务器搭建2、u-boot常用命令3、配置4、问题 三、补缺1、make 一、问题 1、open-vm-tools 安装 open-vm-tools…

【51单片机】智能百叶窗项目

文章目录 功能演示:前置要求:主要功能:主要模块:主函数代码: 具体的仿真程序和代码程序已经免费放置在资源中,如有需要,可以下载进行操作。 功能演示: 前置要求: 编译软…

Visual Studio 2022创建dll并调用

需求: 创建A项目,有函数和类,将A项目生成DLL动态链接库 创建B项目,使用A项目生成的dll和lib相关文件 正常项目开发.h用于函数声明,.cpp用于函数实现,但是项目开发往往不喜欢将.cpp函数实现的代码发给别人&…

30天收入500万美金!揭秘超休闲手游《Royal Match》吸金秘诀!

据AppMagic发布的收入榜中,超休闲手游《Royal Match》成绩斐然,不仅在三消赛道排名第一,更是冲上了应用畅销榜第四名,30天内增收超500万美元! 来源:AppMagic 6月畅销榜 三消解谜,作为全球范围内…

新品发布 | 飞凌嵌入式RK3562J核心板,智能工业时代的国产智慧引擎

飞凌嵌入式推出FET3562J-C全国产核心板,专为工业自动化及消费类电子设备设计,打造智能工业时代的国产智慧新引擎。 FET3562J-C核心板基于Rockchip RK3562J处理器开发设计,该处理器采用22nm先进制程工艺,集成了4个ARM Cortex-A53高…

如何调用地方天地图?

我们在《如何申请自己的专属天地图?》一文中,为大家分享了如果申请专属天地图,并在水经微图(以下简称“微图”)中加载的具体方法。 于是,就有朋友问如何调地方用天地图。 现在,我们就以四川地…

【重磅开源】MapleBoot权限控制使用介绍(菜单权限、按钮权限、数据权限)

基于SpringBootVue3开发的轻量级快速开发脚手架 ## 🍁项目简介 一个通用的前、后端项目模板 一个快速开发管理系统的项目 一个可以生成SpringBootVue代码的项目 一个持续迭代的开源项目 一个程序员的心血合集 度过严寒,终有春日&#…

蓝桥杯物联网竞赛_STM32L071_19_输出方波信号(PWM)

国赛考了一个方波,第一次考这个,连个示波器都没有 CUBMX配置: 按上述配置刚好是32MHZ / 32 / 100 10KHZ 理论: 频率:就是一秒钟能产生多少个脉冲,如下图: 这算是一个脉冲,1KHZ说明一秒钟产生…

Facechain系列: constants.py文件解读

在根目录下还有个facechain目录,其中的constants.py文件中定义了代码控制的重要参数。 1.姿态控制 在应用代码进行推理(见这里Facechain系列: 通过代码进行推理)中,如果将以下代码 use_pose_model False 修改为 use_pose_mo…

hot100_62不同路径

不同路径 题目思路、代码1.排列组合2.动态规划 题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” &#xff0…

ubuntu-server(22.04)安装

准备工作 首先我们先从网上获取ubuntu的iso镜像文件 Index of /ubuntu-releases/22.04/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 我们安装这个最小包即可 找到我们ubuntu安装完成后所需要下载安装源的网址(常用是阿里云) ubuntu安装…

TPM仿真环境搭建

文章目录 背景及注意事项一、CMake二、m4三、GNU MP Library四、TPM_Emulator五、TSS协议栈(trousers-0.3.14.tar.gz)六、 tpm-tools七、查看是否安装成功八、测试 TPM环境(需要开三个终端分别运行)8.1 启动TPM (第一个…