图像数据处理13

news2024/11/16 1:49:45

三、空域滤波

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.coloradmin.cn/o/2050038.html

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

相关文章

如何选择流量与商业潜力兼备的SEO关键词?

如何选择流量与商业潜力兼备的SEO关键词? 你选择的关键词可以成就或破坏你的SEO活动。 如果你明智地选择关键词,那么你制作的内容将有可能月复一月地吸引有价值的自然搜索流量。如果你选择了错误的关键词,你的内容将只能吸引低价值的流量&a…

Java流程控制07:增强for循环

本节内容视频链接:Java流程控制10:增强for循环_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p42&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 Java中的增强for循环(‌也称为“for-each”循环)‌是…

实用好软-----电脑端好用的免费音乐下载小工具 简单 快速

目前很多很多音乐软件都是收费的。要么是试听。前段时间分享了一款嗅探工具感觉很不错。今天分享的这款小工具超小。下载只有3M大小。解压后运行窗口简单。直接输入歌曲名字即可搜索出来。然后选择下载即可 界面 测试了下还是比较好用的。而且下载很快 ,不过软件显…

Ajax-02.Axios

Axios入门 1.引入Axios的js文件 <script src"js/axios-0.18.0.js"></script> Axios 请求方式别名: axios.get(url[,config]) axios.delete(url[,config]) axios.post(url[,data[,config]]) axios.put(url[,data[,config]]) 发送GET/POST请求 axios.get…

PROLOG实现亲属关系小型演绎数据库

问题 试编写一个描述亲属关系的PROLOG程序&#xff0c;然后给出一些事实数据&#xff0c;建立一个小型演绎数据库。 代码实现 % 基本事实 father(john, mike). father(john, lisa). father(boluo, ana). father(boluo, peter).mother(mary, mike). mother(mary, lisa). mother…

大厂进阶五:React源码解析之深度剖析Diff算法

本文主要针对React源码进行解析&#xff0c;内容有&#xff1a; 1、Diff算法原理、两次遍历 2、Diff瓶颈及限制 3、Diff更新之单节点和多节点原理 一、Diff源码解析 以下是关于 React Diff 算法的详细解析及实例&#xff1a; 1、React Diff 算法的基本概念和重要性 1.1 概念…

【串口助手开发】--温度曲线图实时显示功能,全流程小白教程,zedgraph控件的使用方法,Visual Studio 软件C#语言

1、ZedGraph.dll 控件下载 链接&#xff1a;下载ZedGraph&#xff08;ZedGraph.dll 和ZedGraph.Web.dll文件&#xff09; 打开链接后&#xff0c;图中红框显示的是仅下载zedgraph控件&#xff0c;本文所需的文件是ZedGraph.dll。 2、ZedGraph.dll 控件添加进Visual Studio 软…

【Arduino】ATmega328PB 连接 LSM6DS3 姿态传感器,并读数据(不确定 ESP 系列是否可行,但大概率是可行的)

总览 1.初始化 ATmega328PB&#xff0c;默认大家已经完成了 328 的配置准备工作&#xff0c;已经直接能够向里面写入程序 2.接线&#xff0c;然后验证 mega328 的 I2C 设备接口能否扫描到 LSM6DS3 3.编写代码&#xff0c;上传&#xff0c;查看串口数据。完成。 一、初始化 AT…

履带无人车+无人机+自组网:空地一体化技术详解

履带无人车、无人机与自组网技术的结合&#xff0c;构成了空地一体化技术的核心框架&#xff0c;这种技术在多个领域展现出巨大的潜力和应用价值。以下是对该技术的详细解析&#xff1a; 一、技术概述 空地一体化技术巧妙融合了履带无人车、无人机以及自组网技术&#xff0c;…

EPIC Institute of Technology Round August 2024 (Div. 1 + Div. 2)

前言 又是一场压线不掉分的比赛。 Standings&#xff1a;2706 题目链接&#xff1a;Dashboard - EPIC Institute of Technology Round August 2024 (Div. 1 Div. 2) - Codeforces A. Distanced Coloring 题意&#xff1a; 给一个 n * m 的矩阵&#xff0c;涂色&#xff0c;要…

pkg 打包后运行报错 Cannot mkdir in a snapshot. Try mountpoints instead.

把项目中使用到的 __dirname 类似这样的 join(__dirname, ./config)替换为 process.cwd() __dirname&#xff1a;获取的是当前文件目录路径&#xff0c;二进制文件内部的文件(pkg打包的二进制文件是快照文件&#xff0c;里面的文件只能读不能修改新增)&#xff0c;比如&#x…

区块链基础

1、区块链定义 区块链技术本质上是一个去中心化的数据库&#xff0c;它是比特币的核心技术与基础架构&#xff0c;是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。狭义来讲&#xff0c;区块链是一种按照时间顺序将数据区块以顺序相连的方式组合…

XSS-跨站脚本攻击

目录 XSS简介 XSS分类 反射型XSS&#xff08;非持久型XSS&#xff09; 存储型XSS&#xff08;持久型XSS&#xff09; DOM型XSS HTML文档解析过程 例题 HTML解析 字符实体(character entities) HTML字符实体(HTML character entities) 字符引用&#xff08;character…

程序员如何写PLC程序

PLC是可编程逻辑控制器的简称&#xff0c;常用的编程语言是IEC61131-3&#xff08;梯形图、结构化文本、指令表、功能块、顺序功能图&#xff09;和西门子的SCL。程序员常用的编程语言是JS、Java、Python、C/C、Go等。PLC广泛采用编程工具有codesys、博图等。程序员常用的编程工…

用Python实现9大回归算法详解——06. K近邻回归算法

1. K近邻回归的基本概念 K近邻回归&#xff08;K-Nearest Neighbors Regression, KNN Regression&#xff09;是一种基于实例的学习方法。与传统的回归模型不同&#xff0c;KNN回归不通过显式的函数来建模数据之间的关系&#xff0c;而是通过查找输入样本的“邻居”来进行预测…

【PDF技巧】如何编辑忘记密码PDF文件?

PDF文件打开之后&#xff0c;发现编辑功能都是灰色的&#xff0c;无法使用&#xff0c;无法编辑PDF文件&#xff0c;遇到这种情况&#xff0c;因为PDF文件设置了限制编辑导致的。一般情况下&#xff0c;我们只需要输入PDF密码&#xff0c;将限制编辑取消就可以正常编辑文件了&a…

在线装修管理系统pf

TOC springboot389在线装修管理系统pf 第1章 绪论 1.1 课题背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。所以各行业…

C语言 | Leetcode C语言题解之第345题反转字符串中的元音字母

题目&#xff1a; 题解&#xff1a; char vowel[] "aeiouAEIOU";bool isVowel(char ch) {for (int i 0; vowel[i]; i) {if (vowel[i] ch) {return true;}}return false; };char* reverseVowels(char* s) {int n strlen(s);int i 0, j n - 1;while (i < j) …

C语言三目运算符深度解析

[大师C语言]合集&#xff3b;大师C语言(第一篇)&#xff3d;C语言栈溢出背后的秘密&#xff3b;大师C语言(第二十五篇)&#xff3d;C语言字符串探秘&#xff3b;大师C语言(第二篇)&#xff3d;C语言main函数背后的秘密&#xff3b;大师C语言(第二十六篇)&#xff3d;C语言结构体…