当前位置: 首页 > news >正文

【OpenCV实现图像:图像处理技巧之空间滤波】

文章目录

    • 概要
    • 导入库
    • 空间过滤器模板
    • 展示效果
    • 分析与总结

概要

空间滤波器是数字图像处理中的基本工具之一。它通过在图像的每个像素位置上应用一个特定的滤波模板,根据该位置周围的相邻像素值进行加权操作,从而修改该像素的值。这种加权操作能够突出或模糊图像的特定特征,实现多种图像处理任务。

在降噪任务中,空间滤波器可以平均化局部像素值,减少图像中的噪声,使图像看起来更清晰。在边缘检测中,滤波器可以强调图像中的边缘,使其更加显著,便于后续分析。而在图像平滑任务中,空间滤波器则可以平滑图像中的过渡区域,使图像看起来更加连续和自然。

通过在不同的图像处理场景中灵活应用空间滤波器,可以有效改善图像质量,满足各种视觉需求。这些滤波器的设计和选择是图像处理领域的重要课题,能够帮助人们更好地理解和分析图像信息。

导入库

为了进行图像处理,我们通常需要导入一些必要的库

import numpy as np
import matplotlib.pyplot as plt
from fractions import Fraction
from skimage.io import imread, imshow
from scipy.signal import convolve2d
from skimage.color import rgb2gray, gray2rgb

空间过滤器模板

空间滤波器模板是用于修改像素值的核心工具。在以下代码中,我们定义了五种常见的空间滤波器模板,分别是Horizontal Sobel Filter、Vertical Sobel Filter、Edge Detection、Sharpen和Box Blur。

def get_filters():# 定义滤波器模板kernel_hsf = np.array([[1, 2, 1],[0, 0, 0],[-1, -2, -1]])kernel_vsf = np.array([[1, 0, -1],[2, 0, -2],[1, 0, -1]])kernel_edge = np.array([[-1, -1, -1],[-1, 8, -1],[-1, -1, -1]])kernel_sharpen = np.array([[0, -1, 0],[-1, 5, -1],[0, -1, 0]])kernel_bblur = (1 / 9.0) * np.array([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]])kernels = {'Box Blur': kernel_bblur,'Sharpen': kernel_sharpen,'Horizontal Sobel Filter': kernel_hsf,'Vertical Sobel Filter': kernel_vsf,'Edge Detection': kernel_edge,}return kernels

展示效果

通过以上定义的滤波器模板,我们可以将它们应用于真实图像上,以获得不同的视觉效果。
display_filters('dorm_lobby.png') 换成自己的图片即可

def display_filters(image_path):# 读取图像image = imread(image_path)[:,:,:3]    kernels = get_filters()# 创建包含子图的图像窗口fig, ax = plt.subplots(2, 3, figsize=(20, 15))ax[0, 0].imshow(rgb2gray(image[:,:,:3]), cmap='gray')ax[0, 0].set_title('Original Image', fontsize=20)ax[0, 0].set_xticks([])ax[0, 0].set_yticks([])for i, (name, kernel) in enumerate(kernels.items(), 1):row = i // 3col = i % 3ax[row, col].imshow(kernel, cmap='gray')ax[row, col].set_title(name, fontsize=30)for (j, k), val in np.ndenumerate(kernel):if val < 1:ax[row, col].text(k, j, str(Fraction(val).limit_denominator()), ha='center', va='center', color='red', fontsize=30)else:ax[row, col].text(k, j, str(val), ha='center', va='center', color='red', fontsize=30)plt.tight_layout()plt.show()# 展示滤波器效果
display_filters('dorm_lobby.png')

结果:
在这里插入图片描述
述代码中,通过函数get_filters(),我们定义了五种常见的空间滤波器模板,分别为Horizontal Sobel Filter, Vertical Sobel Filter, Edge Detection, Sharpen以及 Box Blur 。接着我们可以将这些滤波器应用于真实图像。

import numpy as np
import matplotlib.pyplot as plt
from fractions import Fraction
from skimage.io import imread, imshow# For Spatial Filters
from scipy.signal import convolve2d
from skimage.color import rgb2gray, gray2rgb
def get_filters():# Define Filters# Horizontal Sobel Filterkernel_hsf = np.array([[1, 2, 1],[0, 0, 0],[-1, -2, -1]])# Vertical Sobel Filterkernel_vsf = np.array([[1, 0, -1],[2, 0, -2],[1, 0, -1]])# Edge Detectionkernel_edge = np.array([[-1, -1, -1],[-1, 8, -1],[-1, -1, -1]])# Sharpenkernel_sharpen = np.array([[0, -1, 0],[-1, 5, -1],[0, -1, 0]])# Box Blurkernel_bblur = (1 / 9.0) * np.array([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]])# Define the kernelskernels = {'Box Blur': kernel_bblur,'Sharpen': kernel_sharpen,'Horizontal Sobel Filter': kernel_hsf,'Vertical Sobel Filter': kernel_vsf,'Edge Detection': kernel_edge,}return kernelsdef display_filters(image_path):# Read the imageimage = imread(image_path)[:, :, :3]kernels = get_filters()# Create a figure with subplots for each kernelfig, ax = plt.subplots(2, 3, figsize=(20, 15))ax[0, 0].imshow(rgb2gray(image[:, :, :3]), cmap='gray')ax[0, 0].set_title('Original Image', fontsize=20)ax[0, 0].set_xticks([])ax[0, 0].set_yticks([])# Loop over the keys and values in the kernels dictionaryfor i, (name, kernel) in enumerate(kernels.items(), 1):# Determine the subplot indexrow = i // 3col = i % 3# Plot the kernel on the appropriate subplotax[row, col].imshow(kernel, cmap='gray')ax[row, col].set_title(name, fontsize=30)# Loop over the cells in the kernelfor (j, k), val in np.ndenumerate(kernel):if val < 1:ax[row, col].text(k, j,str(Fraction(val).limit_denominator()),ha='center', va='center',color='red', fontsize=30)else:ax[row, col].text(k, j, str(val),ha='center', va='center',color='red', fontsize=30)# Show the plotplt.tight_layout()plt.show()def apply_selected_kernels(image_path, selected_kernels, plot_cols=3):# Define the kernelskernels = get_filters()# Check if the selected kernels are defined, if not raise an exceptionfor k in selected_kernels:if k not in kernels:raise ValueError(f"Kernel '{k}' not defined.")# Read the imageimage = imread(image_path)[:, :, :3]# Apply selected kernels to each color channel of the imageconv_rgb_images = {}for kernel_name in selected_kernels:kernel = kernels[kernel_name]transformed_channels = []for i in range(3):conv_image = convolve2d(image[:, :, i], kernel, 'valid')transformed_channels.append(abs(conv_image))conv_rgb_image = np.dstack(transformed_channels)conv_rgb_image = np.clip(conv_rgb_image, 0, 255).astype(np.uint8)conv_rgb_images[kernel_name] = conv_rgb_image# Display the original and convolved imagesfig, axs = plt.subplots(len(selected_kernels) + 1, plot_cols, figsize=(15, 10))axs[0, 0].imshow(image)axs[0, 0].set_title('Original Image')axs[0, 0].axis('off')for i, kernel_name in enumerate(selected_kernels, 1):axs[i, 0].imshow(conv_rgb_images[kernel_name])axs[i, 0].set_title(kernel_name)axs[i, 0].axis('off')# Hide remaining empty subplots, if anyfor i in range(len(selected_kernels) + 1, len(axs.flat)):axs.flatten()[i].axis('off')plt.tight_layout()plt.show()# 调用display_filters()函数来获取滤波器矩阵
# display_filters('dorm_lobby.png')# 调用apply_selected_kernels()函数,传入图像路径和希望应用的滤波器名称列表
apply_selected_kernels('dorm_lobby.png',['Edge Detection','Horizontal Sobel Filter','Vertical Sobel Filter'])

结果:
在这里插入图片描述
当然,我们可以通过以下代码查看其他几种模板的对应效果,代码如下:

# Visualize Edge Detection, Sharpen, and Box Blur
apply_selected_kernels('dog.png', ['Edge Detection','Sharpen', 'Box Blur'], plot_cols=2)

分析与总结

在图像处理中,空间滤波器的作用非常强大。不同的滤波器模板可以用于实现各种图像处理任务,例如边缘检测、图像锐化和模糊等。通过深入了解每种滤波器的特点和应用场景,我们可以更好地运用它们,释放创造力,探索图像处理的无限可能性。通过本文的介绍,希望读者对空间滤波器有了更加清晰的认识,能够在实际应用中灵活运用这些知识,创造出更加引人注目的图像效果。

相关文章:

【OpenCV实现图像:图像处理技巧之空间滤波】

文章目录 概要导入库空间过滤器模板展示效果分析与总结 概要 空间滤波器是数字图像处理中的基本工具之一。它通过在图像的每个像素位置上应用一个特定的滤波模板&#xff0c;根据该位置周围的相邻像素值进行加权操作&#xff0c;从而修改该像素的值。这种加权操作能够突出或模…...

载波通讯电表的使用年限是多久?

随着科技的飞速发展&#xff0c;智能家居、物联网等概念逐渐深入人心&#xff0c;载波通讯电表作为一种新型的智能电表&#xff0c;凭借其低功耗、高可靠性、远程通讯等优点&#xff0c;广泛应用于居民用电、工业生产等领域。那么&#xff0c;载波通讯电表的使用年限是多久呢&a…...

微信小程序多端应用 Donut 多端编译

目前支持 wxml、wxs、js/ts、json&#xff0c;less/sass 等文件类型&#xff0c;资源支持通过配置区分不同平台 wxml中使用 <!-- #if MP --><view class"test-view">wechat</view><!-- #elif IOS --><view class"test-view"…...

调试 Mahony 滤波算法的思考 10

调试 Mahony 滤波算法的思考 1. 说在前面的2.Mahony滤波算法的核心思想3. 易懂的理解 Mahony 滤波算法的过程4. 其他的一些思考5. 民间 9轴评估板 1. 说在前面的 之前调试基于QMI8658 6轴姿态解算的时候&#xff0c;我对Mahony滤波的认识还比较浅薄。初次的学习和代码的移植让…...

Bean——IOC(Github上有代码)

源码 https://github.com/cmdch2017/Bean_IOC.git 获取Bean对象 BeanFactory Bean的作用域 第三方Bean需要用Bean注解 比如消息队列项目中&#xff0c;需要用到Json的消息转换器&#xff0c;这是第三方的Bean对象&#xff0c;所以不能用Component&#xff0c;而要用Bean …...

功能更新|Leangoo领歌免费敏捷工具支持SAFe大规模敏捷框架

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 
 Leangoo可以支持敏捷研发管理全流程&#xff0c;包括小型团队敏捷开发&#xff0c;规模化敏捷SAFe&#xf…...

漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案

漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案漏刻有时百度地图API实战开发(2)文本标签显示和隐藏的切换开关漏刻有时百度地图API实战开发(3)自动获取地图多边形中心点坐标漏刻有时百度地图API实战开发(4)显示指定区域在移动端异常的解…...

交流信号继电器 DX-31BJ/AC220V JOSEF约瑟 电压启动 面板嵌入式安装

DX系列信号继电器由矩形脉冲激磁&#xff0c;磁钢保持。本继电器为双绕组。工作线圈可为电压型&#xff0c;亦可为电流型。复归线圈为电压型。继电器的工作电流或工作电压为长脉冲&#xff0c;亦可为脉冲不小于20mS的短脉冲。 系列型号 DX-31B信号继电器DX-31BJ信号继电器 D…...

SpringCloudAlibaba系列之Nacos配置管理

目录 说明 认识配置中心 Nacos架构图 Nacos配置管理实现原理 核心源码分析-客户端 核心源码分析-服务端 配置修改的实时通知 主流配置中心对比 小小收获 说明 本篇文章主要目的是从头到尾比较粗粒度的分析Nacos配置中心的一些实现&#xff0c;很多细节没有涉及&#…...

Kyligence Copilot 亮相第六届进博会,增添数智新活力

11月5日&#xff0c;第六届中国国际进口博览会&#xff08;以下简称“进博会”&#xff09;在上海国家会展中心盛大启幕&#xff0c;众多新科技、新成果、新展品亮相本届进博会。作为阿斯利康&#xff08;AstraZeneca&#xff09;合作伙伴&#xff0c;跬智信息&#xff08;Kyli…...

MySQL 批量修改表的列名为小写

1、获取脚本 SELECT concat( alter table , TABLE_NAME, change column , COLUMN_NAME, , lower( COLUMN_NAME ), , COLUMN_TYPE, comment \, COLUMN_COMMENT, \; ) AS 脚本 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA 数据库名 and TABLE_NAME表名-- 大写是up…...

ElasticSearch 查询方法示例 java

public List<PricePolicyConditionDTO> queryEs(OrderPriceOutDTO param, List<String> materialCodeList, List<String> categoryCodeList) {BoolQueryBuilder mainQueryBoolBuilder new BoolQueryBuilder();//销售组织if (CharSequenceUtil.isNotEmpty(pa…...

5G毫米波通信中的关键技术

随着5G技术的快速发展&#xff0c;毫米波通信作为其中的一项重要技术&#xff0c;在高速数据传输、低延迟通信和大规模连接等方面具有显著的优势。本文将探讨5G毫米波通信中的关键技术&#xff0c;包括毫米波频段的选择、信号处理技术和MIMO技术等。 一、毫米波频段的选择 毫米…...

2.3.3 交换机的RSTP技术

实验2.3.3 交换机的RSTP技术 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.交换机的基本配置。2.开启交换机的STP。3.配置SW3A和SW3B上STP的优先级。将SW3A配置为根交换机&#xff0c;SW3B配置为备用根交换机。4.配置SW2A和SW2B的边缘接口 六、任务验收七、…...

国外访问学者/博士后留学人员反诈骗指南

访问学者/博士后/联合培养博士人员出国后&#xff0c;对当地环境及政策不熟悉&#xff0c;需要提高防范意识&#xff0c;为此&#xff0c;知识人网小编特整理这篇反诈骗指南&#xff0c;提醒留学人员防微杜渐、未雨绸缪。 近日&#xff0c;多国使馆发布相关提醒&#xff1a;不法…...

设计模式之组合模式-创建层次化的对象结构

目录 概述概念主要角色应用场景 组合模式的实现类图NS图基本代码组合模式的精髓意外收获&#xff08;❀❀&#xff09; 应用示例-公司组织架构管理需求结构图代码 组合模式的优缺点优点缺点 总结 概述 概念 组合模式是一种结构型设计模式&#xff0c;它允许将对象组合成树形结…...

Windows 有趣功能集锦

Windows 有趣功能集锦 隐藏文件或文件夹 CMD 运行以下命令隐藏 # attrib h <文件或文件夹名称> attrib r h s a 测试显示 # attrib h <文件或文件夹名称> attrib -r -h -s -a 测试使视频显示为图片 准备一个视频文件和一个需要显示的图片先将视频压缩成压缩文…...

【nodejs版playwright】02-支持多套测试环环境执行用例

日常测试中&#xff0c;一套测试用例需支持在不同的测试环境运行&#xff0c;如staging、production 因为涉及不同的测试环境&#xff0c;那使用的环境变量或参数就不一样&#xff0c;如staging登录可能用到的用户名是A&#xff0c;而production可能用到的是b。 所以需要有一个…...

React高阶组件(Higher-Order Components, HOCs)

React 高阶组件 (Higher Order Components, HOCs) 是一种模式&#xff0c;让组件具备一定的扩展能力。它是函数式编程思想在 React 应用程序中的体现。HOCs 可以让你重用组件&#xff0c;提高组件的可复用性。 HOCs 是什么&#xff1f; 高阶组件实际上是一个函数&#xff0c;…...

利用RoboBrowser库和爬虫代理实现微博视频的爬取

技术概述 微博是一个社交媒体平台&#xff0c;用户可以在上面发布和分享各种内容&#xff0c;包括文字、图片、音频和视频。微博视频是微博上的一种重要的内容形式&#xff0c;有时我们可能想要下载微博视频到本地&#xff0c;以便于观看或分析。但是&#xff0c;微博视频并没…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...