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

news2024/11/15 13:41:52

《数字图像处理-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 plt

if __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.coloradmin.cn/o/1353219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9.X形图案

题目 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextInt()) { // 注意 while 处…

CCNP课程实验-04-BGP_CFG

目录 实验条件网络拓朴 基础配置需求实现IGP部分1. 按照图示配置OSPF区域,RID为Loopback 0地址。其中Area 146要配置为OSPF的特殊区域。2. 配置其它路由协议,重分布使得路由互相注入,实现全网互通。3. R1配置策略路由,使得R2经R1去…

react-hooks-kit v1 正式发布

evanpatchouli/react-hooks-kit - (npmjs.com) v1.0.0 正式发布! 下载安装 npm i evanpatchouli/react-hooks-it -S官方文档 在 Gitee 阅读在 Github 阅读 概览 这是一个无依赖的轻量级 React Hooks 库,总共有 60 hooks。 它包含了一系列易于使用…

linux 内核链表操作

操作系统内核, 如同其他程序, 常常需要维护数据结构的列表. 有时, Linux 内核已经同 时有几个列表实现. 为减少复制代码的数量, 内核开发者已经创建了一个标准环形的, 双 链表; 鼓励需要操作列表的人使用这个设施. 当使用链表接口时, 你应当一直记住列表函数不做加锁. 如果你的…

小妙招:教你如何查询获取企业工商数据

在行业互联网领域,工商数据的运用场景多种多样。无论是对产业链的上下游企业,还是为企业背景调查、客户获取、财税服务、知识产权服务,乃至于外贸企业,商品批发等业务,TO B服务型企业都离不开工商数据的支持。这些五花…

主动IRS(Active IRS)模型总结

文章目录 A Framework for Transmission Design for Active RIS-Aided Communication with Partial CSIHybrid active and passive IRS从已有passive IRS算法拓展到active IRS算法 active IRS 与 passive IRS模型的区别 A Framework for Transmission Design for Active RIS-Ai…

centos7 ping不通域名

如果ip能ping通,ping不通域名可以试试以下操作: 1.编辑resolv.conf文件 vi /etc/resolv.conf 添加 nameserver 8.8.8.8 2.编辑nsswitch.conf vi /etc/nsswitch.conf 改成下图所示: 3.编辑sysctl.conf vi /etc/sysctl.conf 加上两行内…

爬虫如何获取免费代理IP(二)

89ip代理爬取代码实现 一、代码实现 import requests import time import random from fake_useragent import UserAgent from lxml import etree import os import csv""" 89ip代理爬取 """class IPSipder(object):def __init__(self):self.u…

rime中州韵小狼毫 inputShow lua Translator 输入字符透传翻译器

在 rime中州韵小狼毫 help lua Translator 中我们分享了如何使用 lua 脚本定义一个 translator,并以 五笔・拼音 为例引用了该 translator,并且达到了预期的效果。 今天,我们继续通过 lua 脚本为 rime中州韵/小狼毫 输入法打造一个 translat…

【Linux Shell】1. Shell 简述

文章目录 【 1. Shell 解释器、Shell语言、Shell脚本 】【 2. Shell 环境 】【 3. 一个简单的 Shell 脚本 】3.1 Shell 脚本的编写3.2 Shell 脚本的运行3.2.1 作为可执行程序运行 Shell 脚本3.2.2 作为解释器参数运行 Shell 脚本 【 1. Shell 解释器、Shell语言、Shell脚本 】 …

C++学习(二)

我们是在学习过了C语言,基础上来看这篇文章的,如果你是直接学C,这篇文章不太适合你的,因为这里只讲C基础中与C语言不同之处。 一.main函数区别 在C语言中,我们写main函数是不是可以省略前面的int,但是在C中&#xff…

React(2): 使用 html2canvas 生成图片

使用 html2canvas 生成图片 需求 将所需的内容生成图片div 中包括 svg 等 前置准备 "react": "^18.2.0","react-dom": "^18.2.0","html2canvas": "^1.4.1",实现 <div ref{payRef}></div>const pa…

Character Controller Smooth

流畅的角色控制器 Unity的FPS解决方案&#xff01; 它是一种具有非常平滑运动和多种设置的解决方案&#xff1a; - 移动和跳跃 - 坐的能力 - 侧翻角度 - 不平整表面的处理 - 惯性守恒 - 重力 - 与物理物体的碰撞。 - 支持没有家长控制的平台 此解决方案适用于那些需要角色控制器…

Spring Boot 整合 MinIO自建对象存储服务

GitHub 地址&#xff1a;GitHub - minio/minio: The Object Store for AI Data Infrastructure 另外&#xff0c;MinIO 可以用来作为云原生应用的主要存储服务&#xff0c;因为云原生应用往往需要更高的吞吐量和更低的延迟&#xff0c;而这些都是 MinIO 的优势。安装过程跳过。…

(七)独立按键

文章目录 独立按键原理图三行代码法简单概述代码书写键码推算如何使用短按键长按键 状态机法简单概述代码书写键码推算如何使用短按键长按键 现象 独立按键原理图 三行代码法 简单概述 代码书写 u8 Trg 0x00;//短按键 u8 Cont 0x00;//长按键 void BtnThree(void) {u8 reada…

李沐机器学习系列2--- mlp

1 Introduction LP中有一个很强的假设&#xff0c;输入和输出是线性关系&#xff0c;这一般是不符合事实的。 通过几何的方式去对信息进行理解和压缩是比较高效的&#xff0c;MLP可以表示成下面的形式。 1.1 从线性到非线性 X ∈ R n d X \in R^{n \times d} X∈Rnd表示输入…

2023-12-26分割回文串和子集以及子集II

131. 分割回文串 思想&#xff1a;回溯三步骤&#xff01;① 传入参数 ② 回溯结束条件 ③ 单层搜索逻辑&#xff01;抽象成回溯树&#xff0c;树枝上是每次从头部穷举切分出的子串&#xff0c;节点上是待切分的剩余字符串【从头开始每次往后加一】 class Solution:def partiti…

基于混合蛙跳算法优化的Elman神经网络数据预测 - 附代码

基于混合蛙跳算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于混合蛙跳算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于混合蛙跳优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

ChatGPT持续火热,OpenAI年收入突破16亿美元

著名科技媒体The Information消息&#xff0c;由于OpenAI的ChatGPT等产品实现强劲增长&#xff0c;其年收入将突破16亿美元。 这主要得益于OpenAI在2023年发布了一系列重磅产品&#xff0c;包括GPT-4、ChatGPT企业版、GPT-4 Turbo、DALLE 3、苹果/安卓应用、自定义GPTs、Assis…

测试人必看,看完必会的fiddler抓包,抓包抓的好........

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…