《数字图像处理-OpenCV/Python》连载:空间滤波之高斯滤波器

《数字图像处理-OpenCV/Python》连载:空间滤波之高斯滤波器


本书京东 优惠购书链接 https://item.jd.com/14098452.html
本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html

在这里插入图片描述


第 10 章 图像卷积与空间滤波


图像滤波是指在尽可能保留图像细节特征的条件下对目标图像的噪声进行抑制,是常用的图像处理方法。
空间滤波也称空间域滤波,滤波器规定了邻域形状与邻域像素的处理方法。线性滤波通过图像与滤波器核进行卷积计算,非线性滤波则包含了绝对值、置零和统计等非线性运算,通过逻辑运算实现图像滤波。


本章内容概要

  • 学习图像的卷积运算,介绍可分离卷积核与图像的边界扩充。
  • 学习典型的空间滤波器,包括盒式滤波器和高斯滤波器。
  • 介绍常用的非线性滤波器,包括统计排序滤波器、自适应滤波器和双边滤波器。
  • 学习常用的梯度算子,包括Laplacian算子、Sobel算子和Scharr算子。
  • 介绍图像金字塔,包括高斯金字塔和拉普拉斯金字塔。

10.3 空间滤波之高斯滤波器

高斯滤波器(Gaussian Filter)是以高斯核函数为权函数的滤波器,在信号和图像处理领域的应用非常广泛。

高斯核函数的数学描述如下。

w ( s , t ) = G ( s , t ) = 1 2 π σ 2 e − r 2 / 2 σ 2 w(s,t) = G(s,t) =\frac{1}{2\pi\sigma^2} e^{-r^2/2\sigma^2} w(s,t)=G(s,t)=2πσ21er2/2σ2

式中, σ \sigma σ 是高斯核的标准差(尺度因子);r 表示任意点到中心点的距离。

高斯卷积核有很多重要的性质。
(1) 高斯卷积核是圆对称(各向同性)的,中心点的权重最大,离中心点越远,权重越小。
(2) 高斯卷积核是可分离卷积核,可以通过水平卷积核和垂直卷积核实现对图像的卷积。
(3) 高斯卷积核的有效尺寸为 ( 6 σ + 1 ) ( 6 σ + 1 ) (6\sigma+1) (6\sigma+1) 6σ+1)6σ+1) ,尺寸越大,平滑程度越高。

OpenCV中的函数cv.GaussianBlur用于实现高斯低通滤波,函数cv.getGaussianKernel用于计算一维高斯滤波器的系数。

函数原型

cv.GaussianBlur(src, ksize, sigmaX[, dst, sigmaY, borderType]) → dst
cv.getGaussianKernel(ksize, sigma[, ktype]) → retval

参数说明

  • src:输入图像,是多维Numpy数组,允许为单通道图像或多通道图像。
  • dst:输出图像,大小和通道数与src相同。
  • ksize:高斯滤波器核的尺寸,格式为元组(w,h),0表示由sigma计算。
  • sigmaX:x轴方向的高斯核标准差。
  • sigmaY:y轴方向的高斯核标准差,可选项,默认值为0。
  • sigma:高斯核的标准差,是浮点型数据。
  • borderType:边界扩充类型,可选项,不支持BORDER_WRAP。
  • ktype:高斯核的数据类型,可选项,默认值为CV_64F,可选CV_32F。
  • retval:返回值,是一维高斯核的系数,形状为(ksize,1)的Numpy数组。

注意问题

  • (1) 高斯核标准差sigmaX不能省略,sigmaY可以省略,缺省时,表示sigmaY=sigmaX。
  • (2) 如果sigmaX=sigmaY=0,则由ksize计算:sigma=0.3*[(ksize-1)/2-1]+0.8 。
  • (3) 如果 ksize=0,则由 sigma 自动计算 ksize。
  • (4) ksize 的宽度 w 与高度 h 必须是奇数。
  • (5) 注意在函数cv.GaussianBlur中,ksize的格式为元组 (w,h),表示滤波器的尺寸;而在函数cv.getGaussianKernel中,ksize的格式为数值,表示滤波器的孔径。
  • (6) 使用函数 cv.GaussianBlur时,推荐对ksize、sigmaX、sigmaY都进行赋值。
  • (7) 函数cv.getGaussianKernel能返回一维高斯滤波器的系数,形状为(ksize,1)。

【例程1003】空间滤波之高斯滤波器

本例程介绍高斯滤波器的使用。


# 【1003】空间滤波之高斯低通滤波器
import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltif __name__ == '__main__':img = cv.imread("../images/Fig1001.png", flags=0)  # 读取灰度图像# (1) 计算高斯核kernX = cv.getGaussianKernel(5, 0)  # 一维高斯核kernel = kernX * kernX.T  # 二维高斯核print("1D kernel of Gaussian:{}".format(kernX.shape))print(kernX.T.round(4))print("2D kernel of Gaussian:{}".format(kernel.shape))print(kernel.round(4))# (2) 高斯低通滤波核ksize = (11, 11)  # 高斯滤波器核的尺寸GaussBlur11 = cv.GaussianBlur(img, ksize, 0)  # sigma 由 ksize 计算ksize = (43, 43)GaussBlur43 = cv.GaussianBlur(img, ksize, 0)plt.figure(figsize=(9, 3.2))plt.subplot(131), plt.axis('off'), plt.title("1. Original")plt.imshow(img, cmap='gray', vmin=0, vmax=255)plt.subplot(132), plt.axis('off'), plt.title("2. GaussianFilter (k=11)")plt.imshow(GaussBlur11, cmap='gray', vmin=0, vmax=255)plt.subplot(133), plt.axis('off'), plt.title("3. GaussianFilter (k=43)")plt.imshow(GaussBlur43, cmap='gray', vmin=0, vmax=255)plt.tight_layout()plt.show()

运行结果:

1D kernel of Gaussian:(5, 1)[[0.0625 0.25   0.375  0.25   0.0625]]
2D kernel of Gaussian:(5, 5)[[0.0039 0.0156 0.0234 0.0156 0.0039][0.0156 0.0625 0.0938 0.0625 0.0156][0.0234 0.0938 0.1406 0.0938 0.0234][0.0156 0.0625 0.0938 0.0625 0.0156][0.0039 0.0156 0.0234 0.0156 0.0039]]

程序说明:

(1) 函数cv.getGaussianKernel能返回一维高斯滤波器的系数,可以由此计算并得到二维高斯滤波器的系数。
(2) 运行结果,高斯低通滤波器的滤波图像如图10-3所示。图10-3(2)和图10-3(3)所示为使用不同滤波器尺寸的平滑图像。高斯核的标准差sigma越大,高斯滤波器核的尺寸ksize越大,滤波图像越模糊。


在这里插入图片描述

图10-3 高斯低通滤波器的滤波图像


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/135370696)
Copyright 2024 youcans, XUPT
Crated:2024-01-03

《数字图像处理-OpenCV/Python》 独家连载专栏 : https://blog.csdn.net/youcans/category_12418787.html

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

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

相关文章

UOS下通过SSH隧道访问云端内网windows桌面

1 用户痛点 随着时代的发展,众多企业的服务器慢慢走向云端。大量云端服务器节省企业成本的同时,也带来了安全性问题。例如:管理云端的服务器,特别是windows桌面服务器,往往需要给这个服务器分配一个公网IP地址&#x…

面向对象综合训练综合练习(文字版格斗游戏,对象数组,复杂的对象数组操作)

文章目录 练习一:文字版格斗游戏练习二:文字版格斗游戏进阶练习三:对象数组(商品)练习四:对象数组(汽车)练习五:对象数组(手机)练习六&#xff1a…

Java 第23章 反射 本章作业

文章目录 反射修改私有成员变量反射和File 反射修改私有成员变量 public class Homework01 {public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchFieldException, NoSuchMethodException, InvocationTargetException {/***…

Large Language Models Paper 分享

论文1: ChatGPTs One-year Anniversary: Are Open-Source Large Language Models Catching up? 简介 2022年11月,OpenAI发布了ChatGPT,这一事件在AI社区甚至全世界引起了轰动。首次,一个基于应用的AI聊天机器人能够提供有帮助、…

Docker 入门 ------容器互通以及Dockerfile

1. 端口映射以及容器互联 Docker 除了通过网络访问,还提供了两种很方便的功能来满足服务访问的基本需求: 允许映射容器内应用的服务端口到本地宿主主机互联机制实现多个容器间通过容器名来快速访问 1.1 容器映射实现访问容器 1.1.1 从外部访问容器应…

【elfboard linux开发板】4. 文件点灯与创建多进程

ps:提升效率的小tips: 灵活运用vim操作命令,gg快速跳转到文件开头,G跳转到结尾 多行操作 ctrl V shift i 插入修改内容 esc退出编辑 sudo vi /etc/vim/vimrc 在文件中添加如下内容省略重复工作: autocmd BufNewFile …

分布式(8)

目录 36.什么是TCC? 37.分布式系统中常用的缓存方案有哪些? 38.分布式系统缓存的更新模式? 39.分布式缓存的淘汰策略? 40.Java中定时任务有哪些?如何演化的? 36.什么是TCC? TCC&#xff08…

数据库云平台新数科技完成B轮融资,打造全链路智能化数据库云平台

数据库云平台软件厂商「北京新数科技有限公司」(以下简称「新数科技」)已于2023年完成B1轮和B2轮融资,分别由渤海创富和彬复资本投资;义柏资本担任本轮融资独家财务顾问。 新数科技成立于2014年,当前产品矩阵包括数据库…

使用宝塔在Linux面板搭建网站,并实现公网远程访问

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows系统,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

【MPC学习笔记】01:MPC简介(Lecture 1_1 Unconstrained MPC)

本笔记来自北航诸兵老师的课程 课程地址:模型预测控制(2022春)lecture 1-1 Unconstrained MPC 文章目录 0 MPC 简介0.1 案例引入0.2 系统模型0.3 MPC的优点0.4 MPC的缺点0.5 MPC的未来 1 详细介绍 0 MPC 简介 0.1 案例引入 MPC(…

Linux进程以及计划任务

一.程序和进程以及线程 内核功用:进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等 对于所有的操作系统,都有基本的功能 1.程序 保存在硬盘、光盘等介质中的可执行代码和数据(硬盘上躺着) 静态保存的代码 执行…

x-cmd-pkg | JavaScript 运行时环境:node

目录 介绍首次用户技术特点竞品进一步阅读 介绍 Node.js 是一个开源、跨平台、异步事件驱动,基于 V8 引擎的 JavaScript 运行时环境,于 2009 年由 Ryan Dahl 创造,目的是为了实现高性能的网络应用开发。 性能表现良好:使用事件驱…