图像数据处理13

三、空域滤波

3.1滤波器的基本概念

什么是滤波?

简单来说就是从干扰信号中提取出有用的信号

3.1.1空域滤波(Spatial Domain Filtering)

空域滤波适用于简单的滤波任务,直接对图像的像素空间进行操作。它通过对图像中的每个像素点及其邻域像素进行运算,生成新的像素值来实现滤波效果。常见的空域滤波包括均值滤波、高斯滤波、中值滤波等。

3.1.2频域滤波(Frequency Domain Filtering)

频域滤波基于图像的频谱信息进行操作。它通过将图像转换到频率域,对频谱信息进行滤波处理,然后再将处理后的频谱反变换回空间域得到最终图像。

3.1.3线性滤波

线性滤波输出图像上每个像素点的值都是由输入图像各像素点值加权求和的结果。常见的线性滤波器有均值滤波器、高斯滤波器等。

3.1.4非线性滤波

非线性滤波通过非线性操作处理图像,其的算子中包含了取绝对值、置零等非线性运算。常见的非线性滤波器有中值滤波器、双边滤波器等。

3.1.5图像平滑

可以近似理解成图像模糊操作,通过图像平滑操作可以保留图像的低频成分,抑制高频成分,从而减少噪声的干扰。

3.1.6图像锐化

与图像平滑相反,保留图像的高频成分,抑制低频成分,从而使图像的细节更加清晰可加。

图像平化与图像锐化的区别

图像平滑图像锐化
原理保留图像的低频成分,抑制高频成分保留图像的高频成分,抑制低频成分
作用通过模糊细节去除图像噪声,减少不必要成分的干扰突出图像中的边缘部分,使物体的轮廓更加清晰。

3.2线性滤波器

3.2.1线性空域滤波器的计算流程

首先根据滤波区域的形状、大小等,设计出滤波器;随后根据每个像素的坐标、滤波器的作用区域,计算出每个像素邻域中参与计算的像素及坐标;随后用参与运算的像素灰度值×设计的与其对应的滤波器系数,再依次累加。(学到这,我发现这好像和卷积很像)

设 I(x,y) 为原始图像在坐标 (x,y) 处的像素值,F(x,y) 为滤波器在坐标 (x,y) 处的系数,G(x,y) 为滤波后图像在坐标 (x,y) 处的像素值。则滤波操作可以表示为:

s 的取值范围是从 -a 到 a,这表示滤波器在垂直方向( x 方向)上的大小是 2a+1

t 的取值范围是从 -b 到 b,这表示滤波器在水平方向( y 方向)上的大小是 2b+1

滤波器系数数组

通常是一个长和宽均为奇数的系数矩阵。计算过程可以看上面提到的计算流程。

图像边界的处理

原因:在边缘处,滤波器会有一部分元素处于图像边界外,进而无法进行运算。

最常用的方法就是图像的边缘扩充,往往采用0来填充边界,因为0乘任何数的值都为零,所以不会影响计算结果。

import cv2
import numpy as np

# 读取图像
image = cv2.imread('slpn.jpg')

# 检查图像是否成功加载
if image is None:
    print("Error: Image not found.")
    exit()

# 定义一个简单的3x3平均滤波器
kernel = np.ones((3, 3), np.float32) / 9

# 为图像添加2个像素的边缘,用0来填充,确保在应用滤波器时边缘信息不会丢失
bordered_image = cv2.copyMakeBorder(image, 2, 2, 2, 2, cv2.BORDER_CONSTANT, value=[0, 0, 0])

# 使用filter2D函数应用滤波器
dst = cv2.filter2D(bordered_image, -1, kernel)

# 裁剪图像,去除之前添加的边缘
dst = dst[2:-2, 2:-2]  # 注意这里裁剪的尺寸是2,因为我们之前添加了2个像素的边缘

# 使用numpy的水平堆叠来将两个图像并排显示
combined_image = np.hstack((image, dst))

# 将图像缩小至原来的一半
resized_image = cv2.resize(combined_image, (0, 0), fx=0.5, fy=0.5)

# 展示原始图像和处理后的图像
cv2.imshow('Original and Filtered (Halved Size)', resized_image)

cv2.waitKey(0)
cv2.destroyAllWindows()

bordered_image = cv2.copyMakeBorder(image, 2, 2, 2, 2, cv2.BORDER_CONSTANT, value=[0, 0, 0])
因为滤波器是3×3的,所以在为原来的图像添加两个像素边缘,填充值均为0

注,本人为在校学生,博客是边学边写的,主要是为了巩固知识,如有错误请积极指正。

“本文章中所使用的圣灵谱尼图片来源于网络,版权归属原作者所有。若您认为本文章/作品的使用侵犯了您的权益,请及时与我联系,我将尽快核实并删除相关内容。

本文的内容主要基于我对张运楚教授编著的《数字图像处理》一书的学习和理解。这本书深入浅出地介绍了数字图像处理的基本理论以及经典算法等,并且提供了丰富的示例代码和实际用例,极大地帮助了我学习图像处理知识。在此,我推荐大家阅读这本书,更加深入的学习有关图像处理的知识。

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

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

相关文章

ES 支持乐观锁吗?如何实现的?

本篇主要介绍一下Elasticsearch的并发控制和乐观锁的实现原理,列举常见的电商场景,关系型数据库的并发控制、ES的并发控制实践。 并发场景 不论是关系型数据库的应用,还是使用Elasticsearch做搜索加速的场景,只要有数据更新&…

ES6-ES13学习笔记

目录 初识ES6 变量声明 解构赋值 对象解构 ​编辑 数组解构 ​编辑模版字符串 字符串扩展 includes() repeat() startsWith() endsWith() 数值扩展 二进制和八进制表示法 (Number.)isFinite()与isNaN() Number.isInteger() Math.trunc …

AWS不同类型的EC2实例分别适合哪些场景?

Amazon Web Services(AWS)的弹性计算云(EC2)提供了多种实例类型,以满足不同的应用需求和工作负载。了解不同类型的 EC2 实例及其适用场景,可以帮助用户更好地优化性能和控制成本。九河云和大家一起了解一下…

元数据管理gravitino学习

元数据管理的组成有几个部分:Metaservice(Gravitino)、Luoshu(amoro)、Hive Metastore,其中gravitino是数据管理模块实现元数据统一管理的核心。前面有提到hive metastore可以存储hive的库表元数据信息,可以用于存储关于hive表、列…

一文读懂推荐系统

随着互联网的飞速发展,信息过载已经成为了一个普遍的问题。我们每天都要面对大量的内容,却很难找到真正符合自己兴趣和需求的信息。这时,推荐系统应运而生,它能够根据用户的兴趣和行为,智能地推荐相关内容,…

思特科技:国家宝藏数字体验馆展现东方美学 让“文物活起来”

01      思特科技为“国家宝藏数字体验展”提供“数字技术”支持,带来国宝的数字化演绎。以《国家宝藏》顶级IP为基础,打造的全新沉浸文化项目“国宝数字体验展“,借由文物的视角、站在历史的星河中,探寻时间长河中不变的智慧…

Mac文件需要分卷压缩怎么办 Mac上怎么解压分卷压缩的文件

在处理大型文件的传输和存储的时候,Mac用户常面临文件大小超过限制的问题。为了有效管理这些大文件,分卷压缩成为一种必不可少的解决方案。Mac文件需要分卷压缩怎么办?Mac上怎么解压分卷压缩的文件?本文将向你介绍如何使用BetterZ…

近视防控明星:蔡司小乐圆中期临床数据详解

近视防控明星:蔡司小乐圆中期临床数据详解 小乐圆镜片作为近视防控镜片里的明星产品,从22年5月上市以来防控效果就一直备受大家的关注。而最近中期临床试验的结果,给家长孩子吃了一颗定心丸。 本次实验中,240位受试者被随机分成三…

C语言函数详解(上)【库函数】

目录 前言 一、函数的概念 二、库函数 1.标准库和头文件 2.库函数使用方式 3.如何通过以上的网站查看库函数信息 (以sqrt为例) 3.1 功能 3.2 头文件包含 3.3 库函数文档的⼀般格式 1. 函数原型 ​编辑2. 函数功能介绍 ​编辑3. 参数和返…

基于vue3的模拟数据mock.js应用

一、mock.js介绍 Mock.js 是一个用于生成随机数据,拦截 Ajax 请求的 JavaScript 库。它主要用于前后端分离开发时,模拟后端数据接口,使得前端开发者在不需要后端实际编写接口的情况下,也能进行开发、测试。 1、主要功能 生成随…

别只知道Xmind了,这4款思维导图工具也都很实用!

作为一款十分知名的思维导图工具,Xmind确实是一款很好用的脑图工具。不仅操作流畅,功能丰富,还有很多素材可以使用。但是没有云同步功能,免费的功能也有限。如果大家想知道更多好用的思维导图工具的话,也可以看看这4个…

企业级web应用服务器tomcat

目录 一、Web技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS(Cascading Style Sheets)层叠样式表 1.2.3 JavaScript 二、tomcat的功能介绍 2.1 安装 tomcat 环境准备 2.1.1 安装java环境 2.1.2 安装并启动tomcat …

「数组」希尔排序 / 区间增量优化(C++)

目录 概述 思路 核心概念:增量d 算法过程 流程 Code 优化方案 区间增量优化 Code(pro) 复杂度 概述 我们在「数组」冒泡排序|选择排序|插入排序 / 及优化方案(C)中讲解了插入排序。 它有这么两个特点: ①待排序元素较…

路由偏好详解

路由偏好对网络性能和数据传输效率有着重要影响。本文将从路由偏好的相关概念、影响因素和实际应用,同时结合IP数据云的功能展示其在优化路由选择中的作用。 路由偏好指网络设备在选择路由路径时所倾向的特定策略或条件。它基于多种因素进行决策,例如网络…

CSS继承、盒子模型、float浮动、定位、diaplay

一、CSS继承 1.文字相关的样式会被子元素继承。 2.布局样式相关的不会被子元素继承。(用inherit可以强行继承) 实现效果: 二、盒子模型 每个标签都有一个盒子模型,有内容区、内边距、边框、外边距。 从内到外:cont…

矩阵中的最大得分(Lc3148)——动态规划

给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格(不必相邻)。从值为 c1 的单元格移动到值为 c2 的单元格的得分为 c2 - c1 。 你可以从 任一 单元格开始,并且必须…

Maven的简单使用

Maven使用 Maven的作用1. 自动构建标准化的java项目结构(1) 项目结构① 约定目录结构的意义② 约定大于配置 (2)项目创建坐标坐标的命名方法(约定) 2. 帮助管理java中jar包的依赖(1) 配置使用依赖引入属性配置 (2) maven指令(3) 依赖的范围(4) 依赖传递(…

ChatGPT 3.5/4.0 新手使用手册(详细版)

1. 什么是 ChatGPT? ChatGPT是由 OpenAI 开发的先进人工智能语言模型,能够理解并生成自然语言文本。它可以帮助你进行写作、回答问题、提供建议,甚至参与对话。ChatGPT 3.5 和 4.0 是两个不同版本,它们都拥有强大的语言处理能力&…

24/8/17算法笔记 策略梯度reinforce算法

import gym from matplotlib import pyplot as plt %matplotlib inline#创建环境 env gym.make(CartPole-v0) env.reset()#打印游戏 def show():plt.imshow(env.render(mode rgb_array))plt.show() show()定义网络模型 import torch #定义模型 model torch.nn.Sequential(t…

算法日记day 44(动归之编辑距离|回文字串|最长回文子序列)

一、编辑距离 题目: 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 1: 输入:word1 "…