VTK知识学习(37)-频域处理
1、前言
在图像处理和分析中,经常会将图像从图像空间转换到其他空间中,并利用这些空间的性质对转换后的数据进行分析处理。图像频域处理借助空间变换将图像从图像空间转换到频域空间,根据频域空间的性质对数据进行处理(如滤波),最后通过空间变换将处理后的数据变换至图像空间。最常用的频域转换是傅里叶变换。傅里叶变换的计算量较大,人们为了提高速度,提出了快速傅里叶变换。该变换得到了广泛应用。
2、快速傅里叶变换
1)概述
快速傅里叶变换(Fast Fourier Transform,FFT)是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅里叶变换的算法进行改进获得的。FFT是可逆的,其逆变换为RFFT。FFT在数字图像处理中有着广泛的应用,例如数字图像频域滤波、去噪、增强等。在 VTK中 FFT和 RFFT这两种变换都已经实现,对应的类分别为vtkImageFFT和vtkImageRFFT。vtkmageFFT 和 vtkmageRFFT 的输入为实数或复数数据,输出均为复数数据。因此,vtkImageFFT与 vtklmageRFFT的输出结果不能直接显示,因为 VTK 会将其当作彩色图像显需要通过 vtkmageExtractComponents 类提取某一组分进行图像显示。
2)代码
private void TestFFTAndRFFT()
{//读取图像vtkJPEGReader reader = vtkJPEGReader.New();reader.SetFileName("F:\\code\\VTK\\TestActiViz\\data\\lena-gray.jpg");reader.Update();//进行二维快速傅里叶变换vtkImageFFT fftFilte = vtkImageFFT.New();fftFilte.SetInputConnection(reader.GetOutputPort());fftFilte.SetDimensionality(2);fftFilte.Update();//提取某一组分图像进行显示vtkImageExtractComponents fftExtractReal = vtkImageExtractComponents.New();fftExtractReal.SetInputConnection(fftFilte.GetOutputPort());fftExtractReal.SetComponents(0); //指定提取实部图像//转换数据类型为unsigned chardouble[] range = fftExtractReal.GetOutput().GetScalarRange();vtkImageShiftScale shiftScale = vtkImageShiftScale.New();shiftScale.SetOutputScalarTypeToUnsignedChar();shiftScale.SetScale(255 / (range[1] - range[0]));shiftScale.SetShift(-range[0]);shiftScale.SetInputConnection(fftExtractReal.GetOutputPort());shiftScale.Update();vtkImageRFFT rfftFilter = vtkImageRFFT.New();rfftFilter.SetInputConnection(fftFilte.GetOutputPort());rfftFilter.SetDimensionality(2);rfftFilter.Update();vtkImageExtractComponents ifftExtractReal = vtkImageExtractComponents.New();ifftExtractReal.SetInputConnection(rfftFilter.GetOutputPort());ifftExtractReal.SetComponents(0);vtkImageCast rfftCastFilter = vtkImageCast.New();rfftCastFilter.SetInputConnection(ifftExtractReal.GetOutputPort());rfftCastFilter.SetOutputScalarTypeToUnsignedChar();rfftCastFilter.Update();ShowImageBy3(reader.GetOutput(), shiftScale.GetOutput(), rfftCastFilter.GetOutput());
}
3)效果
4)说明
首先定义一个 vtkImageFFT 对象,用于接收reader 的输出,进行二维快速傅里叶变换。其输出为一个像素类型为复数的 vtkImageData 数据,即每个像素值为两个组分:复数的实部和虚部。因此如果直接显示这个 vtkImageData 数据,会发现是一幅彩色图像。如果需要显示频域图像,需要通过 vklmageExtractComponents 类来提取某一个组分图像再进行显示。示例定义 vtklmageExtractComponents 类对象,利用函数 SetComponents(0)指定提取实部图像显示;由于 vtkmageActor 类仅支持unsigned char 数据类型的图像,利用 vtkImageCast 类的SetOutputScalarTypeToUnsignedChar()指定输出类型为unsigned char,将FFT 结果图像转换为
需要的类型。
逆变换的过程也与此类似:首先定义vkImageRFFT对象,并接受输入为tkmageFFT对象的输出,执行 Update()完成快速傅里叶逆变换。vtkImageRFFT的输出同样为一幅复数图像,通常不能直接显示或者进行其他操作。快速傅里叶逆变换的图像中虚数部分值为0,实数部分图像即为重建的原始图像,因此再次利用vkImageExtractComponents 类提取实数部分图像,并通过 vtkImageCast的 SetOutputScalarTypeToUnsignedChar()将图像转换为 unsigned char类型进行显示。
图像通过 FFT 变换到频域空间后,可以通过改变不同的频率分量来对图像进行处理。图像频域处理的步骤为:先将空域图像通过FFT变换到频域图像,设计一个滤波器对不同频率的频域分量进行处理:再将处理后的频域图像通过 RFFT变换回空域中,得到处理后的图像。
VTK频率域的图像处理步骤:
滤波器的设计需要根据具体需求来选择,主要分为低通滤波器和高通滤波器。
3、理想低通滤波器
1)概述
低通滤波是将频域图像中的高频部分滤除而保留低频部分。图像的边缘和噪声对应于频域图像中的高频部分,而低通滤波的作用即是减弱这部分的能量,从而达到图像平滑去噪的目的。最简单的低通滤波器是理想低通滤波器,其基本思想是给定一个频率阈值,将高于该阈值的所有部分设置为0,而低于该频率的部分保持不变。这里的“理想”是指该滤波器不能用电子元器件来实现,但是可以通过计算机来模拟。
2)代码
private void TestIdealLowPass()
{//读取图像vtkJPEGReader reader = vtkJPEGReader.New();reader.SetFileName("F:\\code\\VTK\\TestActiViz\\data\\lena-gray.jpg");reader.Update();//将图像转换到频域空间vtkImageFFT fftFilter = vtkImageFFT.New();fftFilter.SetInputConnection(reader.GetOutputPort());fftFilter.Update();//对频域图像做理想低能滤波,需要设置每个方向的截断频率vtkImageIdealLowPass lowPassFilter = vtkImageIdealLowPass.New();lowPassFilter.SetInputConnection(fftFilter.GetOutputPort());lowPassFilter.SetXCutOff(0.05);lowPassFilter.SetYCutOff(0.05);lowPassFilter.Update();//将处理后的频域图像转换成空域图像 转换后图像的每个像素都是一个复数 vtkImageRFFT rfftFilter = vtkImageRFFT.New();rfftFilter.SetInputConnection(lowPassFilter.GetOutputPort());rfftFilter.Update();//将图像的第一个分量提取出来显示,否则图像不能正确显示。vtkImageExtractComponents ifftExtractReal = vtkImageExtractComponents.New();ifftExtractReal.SetInputConnection(rfftFilter.GetOutputPort());ifftExtractReal.SetComponents(0);//将double类型转换为 unsigned char类型vtkImageCast castFilter = vtkImageCast.New();castFilter.SetInputConnection(ifftExtractReal.GetOutputPort());castFilter.SetOutputScalarTypeToUnsignedChar();castFilter.Update();ShowImageBy2(reader.GetOutput(), castFilter.GetOutput());
}
3)效果
4)说明
先通过 vtkImageFFT将图像转换到频域空间。vtkImageldealLowPass 对频域图像做理想低通滤波,需要用户设置每个方向的截断频率,相应的设置函数为 SetXCutOff()和 SetYCutOff()。执行完毕,需要通过 vtkImageRFFT将处理后的频域图像转换成空域图像。需要注意的是,转换后图像的每个像素都是一个复数,需要用vtkImageExtractComponents 将该图像的第一个分量提取出来显示,否则图像不能正确显示。由于傅里叶变换输入和输出的数据类型都是 double,为了方便显示,还需将其转换为unsigned char 类型(这里由 vtkImageCast 类负责类型转换)。
从结果看,在过滤掉图像的高频部分后,图像变得模糊,丢失了许多细节,另外还可以看到理想低通滤波后图像会存在一定的振铃效应这也是理想低通滤波的特点。
4、巴特沃斯低通滤波
1)概述
在实际应用中,经常使用的低通滤波器是巴特沃斯滤波器。巴特沃斯滤波器对应的转移函数(可以看作一个系数矩阵)是
其中,D(u,v)表示频域点(u,v)到频域图像原点的距离,D0为截止频率,当 D(u,v)=D0 时,H(u,v)=0.5,即对应的频域能量将为原来的一半。因为巴特沃斯低通滤波器在高低频间的过渡平滑,因此不会出现明显的振铃效应。
VTK中实现巴特沃斯低通滤波器的类是vtkImageButterworthLowPass。
2)代码
private void TestButterworthLow()
{//读取图像vtkJPEGReader reader = vtkJPEGReader.New();reader.SetFileName("F:\\code\\VTK\\TestActiViz\\data\\lena-gray.jpg");reader.Update();//将图像转换到频域空间vtkImageFFT fftFilter = vtkImageFFT.New();fftFilter.SetInputConnection(reader.GetOutputPort());fftFilter.Update();vtkImageButterworthLowPass lowPassFilter = vtkImageButterworthLowPass.New();lowPassFilter.SetInputConnection(fftFilter.GetOutputPort());lowPassFilter.SetXCutOff(0.05);lowPassFilter.SetYCutOff(0.05);lowPassFilter.Update();//将处理后的频域图像转换成空域图像 转换后图像的每个像素都是一个复数 vtkImageRFFT rfftFilter = vtkImageRFFT.New();rfftFilter.SetInputConnection(lowPassFilter.GetOutputPort());rfftFilter.Update();//将图像的第一个分量提取出来显示,否则图像不能正确显示。vtkImageExtractComponents ifftExtractReal = vtkImageExtractComponents.New();ifftExtractReal.SetInputConnection(rfftFilter.GetOutputPort());ifftExtractReal.SetComponents(0);//将double类型转换为 unsigned char类型vtkImageCast castFilter = vtkImageCast.New();castFilter.SetInputConnection(ifftExtractReal.GetOutputPort());castFilter.SetOutputScalarTypeToUnsignedChar();castFilter.Update();ShowImageBy2(reader.GetOutput(), castFilter.GetOutput());
}
3)效果
4)说明
vtklmageButterworthLowPass 的使用方法与理想低通滤波器一样,为了便于比较,在设置X和Y方向的截止频率时,应与理想低通滤波器的设置保持一致。
从结果来看,巴特沃斯低通滤波器产生的图像更为平滑,不会出现振铃现象。
5、理想高通滤波器
1)概述
高通滤波与低通滤波正好相反,是让频域图像的高频部分通过而抑制低频部分。图像的边缘对应高频分量,因此高通滤波的效果是图像锐化。同样,最简单的高通滤波器是理想高通滤波器。其基本思想是通过设置一个频率阈值,让高于该值的频率部分通过,而低于阈值的低频部分设置为0。
2)代码
private void TestIdealHighPass()
{//读取图像vtkJPEGReader reader = vtkJPEGReader.New();reader.SetFileName("F:\\code\\VTK\\TestActiViz\\data\\lena-gray.jpg");reader.Update();//将图像转换到频域空间vtkImageFFT fftFilter = vtkImageFFT.New();fftFilter.SetInputConnection(reader.GetOutputPort());fftFilter.Update();vtkImageIdealHighPass lowPassFilter = vtkImageIdealHighPass.New();lowPassFilter.SetInputConnection(fftFilter.GetOutputPort());lowPassFilter.SetXCutOff(0.1);lowPassFilter.SetYCutOff(0.1);lowPassFilter.Update();//将处理后的频域图像转换成空域图像 转换后图像的每个像素都是一个复数 vtkImageRFFT rfftFilter = vtkImageRFFT.New();rfftFilter.SetInputConnection(lowPassFilter.GetOutputPort());rfftFilter.Update();//将图像的第一个分量提取出来显示,否则图像不能正确显示。vtkImageExtractComponents ifftExtractReal = vtkImageExtractComponents.New();ifftExtractReal.SetInputConnection(rfftFilter.GetOutputPort());ifftExtractReal.SetComponents(0);//将double类型转换为 unsigned char类型vtkImageCast castFilter = vtkImageCast.New();castFilter.SetInputConnection(ifftExtractReal.GetOutputPort());castFilter.SetOutputScalarTypeToUnsignedChar();castFilter.Update();ShowImageBy2(reader.GetOutput(), castFilter.GetOutput());
}
3)效果
4)说明
同低通滤波一样,通过 SetXCutOff()和 SetYCutOff()设置X和Y方向的截止频率。
从结果可以看出,理想高通滤波后图像得到锐化处理图像仅剩下边缘。
6、巴特沃斯高通滤波器
1)概述
理想高通滤波器不能通过电子元器件来实现,而且存在振铃现象。在实际应用中,最常使用的高通滤波器是巴特沃斯高通滤波器。该滤波器的转移函数为
D(u,v)表示频域中点到频域平面的距离,D。是截止频率。当 D(u,v)大于 D。时,对应的H(u,v)逐渐接近 1,从而使得高频部分得以通过;而当 D(u,v)小于 D。时,H(u,v)逐渐接近 0,实现低频部分过滤。巴特沃斯高通滤波器在 VTK中对应的类是 vtklmageButterworthHighPass类。
2)代码
private void TestButterworthHigh(){//读取图像vtkJPEGReader reader = vtkJPEGReader.New();reader.SetFileName("F:\\code\\VTK\\TestActiViz\\data\\lena-gray.jpg");reader.Update();//将图像转换到频域空间vtkImageFFT fftFilter = vtkImageFFT.New();fftFilter.SetInputConnection(reader.GetOutputPort());fftFilter.Update();vtkImageButterworthHighPass lowPassFilter = vtkImageButterworthHighPass.New();lowPassFilter.SetInputConnection(fftFilter.GetOutputPort());lowPassFilter.SetXCutOff(0.05);lowPassFilter.SetYCutOff(0.05);lowPassFilter.Update();//将处理后的频域图像转换成空域图像 转换后图像的每个像素都是一个复数 vtkImageRFFT rfftFilter = vtkImageRFFT.New();rfftFilter.SetInputConnection(lowPassFilter.GetOutputPort());rfftFilter.Update();//将图像的第一个分量提取出来显示,否则图像不能正确显示。vtkImageExtractComponents ifftExtractReal = vtkImageExtractComponents.New();ifftExtractReal.SetInputConnection(rfftFilter.GetOutputPort());ifftExtractReal.SetComponents(0);//将double类型转换为 unsigned char类型vtkImageCast castFilter = vtkImageCast.New();castFilter.SetInputConnection(ifftExtractReal.GetOutputPort());castFilter.SetOutputScalarTypeToUnsignedChar();castFilter.Update();ShowImageBy2(reader.GetOutput(), castFilter.GetOutput());}
3)效果
相关文章:
VTK知识学习(37)-频域处理
1、前言 在图像处理和分析中,经常会将图像从图像空间转换到其他空间中,并利用这些空间的性质对转换后的数据进行分析处理。图像频域处理借助空间变换将图像从图像空间转换到频域空间,根据频域空间的性质对数据进行处理(如滤波),最…...
什么是软件架构
什么是软件架构 程序员说,软件架构是要决定编写哪些C程序或OO类、使用哪些库和框架 程序经理说,软件架构就是模块的划分和接口的定义 系统分析员说,软件架构就是为业务领域对象的关系建模 配置管理员说,软件架构就是开发出来的…...
RoCE网络及其协议栈详解(没有中间商赚差价的网络)
引言 随着数据中心对高性能、低延迟通信需求的不断增长,传统的TCP/IP以太网连接已经难以满足现代应用的要求。为了解决这些问题,RDMA(Remote Direct Memory Access)技术应运而生。RDMA是一种允许网络中的不同计算机直接访问对方内…...
el-dialog弹窗的@open方法中,第一次引用ref发现undefined问题,第二次后面又正常了
解决方法 直接不用这个open方法,转而用opened,代码例子: <el-dialog title"单个新增" :visible.sync"PlacardShowSingle" opened"openpbSingle()" width"1100px" top"1%" :close-on-c…...
基于阿里云视觉智能平台实现换脸程序
简介 阿里云视觉智能平台提供了一种强大的换脸功能,能够将视频中的人脸替换成其他图片中的脸。这种功能广泛应用于视频编辑、特效制作等领域。本文将介绍如何使用阿里云视觉智能平台进行视频换脸。 核心工作流程 整个换脸程序的实现可分为以下几个主要步骤&#…...
【2024年华为OD机试】(A卷,100分)- 完美走位 (Java JS PythonC/C++)
一、问题描述 题目解析 题目描述 在第一人称射击游戏中,玩家通过键盘的 A、S、D、W 四个按键控制游戏人物分别向左、向后、向右、向前进行移动。假设玩家每按动一次键盘,游戏人物会向某个方向移动一步。如果玩家在操作一定次数的键盘并且各个方向的步数相同时,此时游戏人…...
一文夯实垃圾收集的理论基础
如何判断一个引用是否存活 引用计数法 给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加 1;当引用失效,计数器就减 1;任何时候计数器为 0 的对象就是不可能再被使用的。 优点:可即刻回收垃圾&a…...
jenkins-api操作
一. 简述: 在一个比较复杂的环境中, 往往会有自己开发的运维管理平台。在代码发布这块,尽管jenkins有一个比较方便的UI, 但很多团队还是喜欢集中式管理, 将发布功能(仅仅把jenkins作为一个发布组件使用)嵌入运维管理平…...
SpringBoot3+Vue3学习
什么是Spring Boot? Spring Boot 是Spring 提供的一个子项目,用于快速构建Spring应用程序 传统方式弊端:之前的项目都用Spring FrameWork构建,需要手动引入依赖,依赖之间有可能存在冲突,较为麻烦;在配置…...
SQL刷题快速入门(三)
其他章节: SQL刷题快速入门(一) SQL刷题快速入门(二) 承接前两个章节,本系列第三章节主要讲SQL中where和having的作用和区别、 GROUP BY和ORDER BY作用和区别、表与表之间的连接操作(重点&…...
Flutter鸿蒙化中的Plugin
Flutter鸿蒙化中的Plugin 前言鸿蒙项目内PluginFlutter端实现鸿蒙端实现创建Plugin的插件类注册Plugin 开发纯Dart的package为现有插件项目添加ohos平台支持创建插件配置插件编写插件内容 参考资料 前言 大家知道Flutter和鸿蒙通信方式和Flutter和其他平台通信方式都是一样的&…...
Ubuntu 22.04.5 修改IP
Ubuntu22.04.5使用的是netplan管理网络,因此需要在文件夹/etc/netplan下的01-network-manager-all.yaml中修改,需要权限,使用sudo vim或者其他编辑器,修改后的内容如下: # Let NetworkManager manage all devices on …...
后端:MyBatis
文章目录 1. MyBatis1-1. Mybatis 工具类的封装1-2. Mybatis 通过集合或实体类传递参数-实现插入数据(增)1-3. MyBatis 实现删除数据(删)1-4. MyBatis 实现修改数据(改)1-5. MyBatis 实现查询数据(查) 2. MyBatis 配置文件中的一些标签和属性2-1.environments标签2-2. dataSour…...
CBAM-2018学习笔记
名称: Convolutional Block Attention Module (CBAM) 来源: CBAM: Convolutional Block Attention Module 相关工作: #ResNet #GoogleNet #ResNeXt #Network-engineering #Attention-mechanism 创新点: 贡献: 提…...
HTML根元素<html>的语言属性lang:<html lang=“en“>
诸神缄默不语-个人CSDN博文目录 在编写HTML页面时,通常会看到<html lang"en">这行代码,特别是在网页的开头部分,就在<!DOCTYPE html>后面。许多开发者可能对这个属性的含义不太了解,它到底有什么作用&…...
解决github无法clone的问题
问题背景 (base) ~$ git clone https://github.com/isaac-sim/IsaacLab.git 正克隆到 IsaacLab... fatal: 无法访问 https://github.com/isaac-sim/IsaacLab.git/:gnutls_handshake() failed: Error in the pull function.解决办法 我使用了代理,需要配…...
第1章:Python TDD基础与乘法功能测试
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
【华为路由/交换机的ftp文件操作】
华为路由/交换机的ftp文件操作 PC:10.0.1.1 R1:10.0.1.254 / 10.0.2.254 FTP:10.0.2.1 S1:无配置 在桌面创建FTP-Huawei文件夹,里面创建config/test.txt。 点击上图中的“启动”按钮。 然后ftp到server,…...
【HBuilderX 中 Git 的使用】
目录: 一:安装必要的版本控制工具二:把Github上的项目克隆到本地三:将本地的项目上传到Github上 一:安装必要的版本控制工具 1️⃣ 安装 TortoiseGit 工具,下载地址:https://tortoisegit.org/do…...
语言模型的价值定位与技术突破:从信息处理到创新认知
标题:语言模型的价值定位与技术突破:从信息处理到创新认知 文章信息摘要: 当前语言模型的核心价值主要体现在信息综合与处理能力上,用户友好的交互界面是其成功关键。在模型计算机制方面,推理能力的实现包括chain-of-…...
使用Websocket进行前后端实时通信
1、引入jar,spring-websocket-starter <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 2、配置websocket config import org.springframe…...
【Leetcode 热题 100】70. 爬楼梯
问题背景 假设你正在爬楼梯。需要 n n n 阶你才能到达楼顶。 每次你可以爬 1 1 1 或 2 2 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 数据约束 1 ≤ n ≤ 45 1 \le n \le 45 1≤n≤45 解题过程 昨天刚刚当成扩展题做过,今天遇到了再写一次。…...
STM32更新程序OTA
STM32的OTA(Over-The-Air)更新程序是一种通过无线通信方式,为设备分发新软件、配置甚至更新加密密钥的技术。以下是关于STM32 OTA更新程序的详细介绍: 一、OTA升级流程 STM32的OTA升级流程通常包括以下几个关键步骤:…...
【海贼王航海日志:前端技术探索】一篇文章带你走进JavaScript(三)
目录 1 -> WebAPI背景知识 1.1 -> 什么是WebAPI 1.2 -> 什么是API 1.3 -> 什么是DOM 1.3.1 -> DOM树 2 -> 获取元素 2.1 -> querySelector 2.2 -> querySelectorAll 3 -> 事件初识 3.1 -> 基本概念 3.2 -> 事件三要素 4 -> 操…...
计算机创造的奇迹——C语言
一.简介 C语言是一种较早的程序设计语言,诞生于1972年的贝尔实验室。1972 年,Dennis Ritchie 设计了C语言,它继承了B语言的许多思想,并加入了数据类型的概念及其他特性。 尽管C 语言是与 UNIX 操作系统一起被开发出来的ÿ…...
TypeScript - 利用GPT辅助学习
TypeScript 一、基础1. 安装 TypeScript2. 创建你的第一个 TypeScript 文件3. 编译 TypeScript 代码4. 变量声明与类型注解5. 函数与类型注解6. 总结 二、进阶常用类型1. 类型别名2. 对象类型3. 类型断言4.typeof 操作符 高级类型1. 类2. 交叉类型3. 泛型与 keyof4. 索引签名类…...
Node.js 与 JavaScript 是什么关系
JavaScript 是一种编程语言,而 Node.js 是 JavaScript 的一个运行环境,它们在不同的环境中使用,具有一些共同的语言基础,但也有各自独特的 API 和模块,共同推动着 JavaScript 在前后端开发中的广泛应用。 一、基础语言…...
Spring MVC:设置响应
目录 引言 1. 返回静态页面 1.1 Spring 默认扫描路径 1.2 RestController 1.2.1 Controller > 返回页面 1.2.2 ResponseBody 2. 返回 HTML 2.1 RequestMapping 2.1.1 produces(修改响应的 Content-Type) 2.1.2 其他属性 3. 返回 JSON 4. 设置状态码 4.1 HttpSer…...
c#实现当捕获异常时自动重启程序
首先,需要说明这并不是一个推荐的做法,只有在你确实有这样的需求时才考虑这么做。 以下是AI的回答,为什么不推荐这么做,供参考。 在C#中,如果你在catch语句中尝试重启程序自身,可能会遇到以下几个问题&…...
游戏引擎学习第84天
仓库:https://gitee.com/mrxiao_com/2d_game_2 我们正在试图弄清楚如何完成我们的世界构建 上周做了一些偏离计划的工作,开发了一个小型的背景位图合成工具,这个工具做得还不错,虽然是临时拼凑的,但验证了背景构建的思路。这个过…...
Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )
一、文件处理 1.1、文件操作的重要性和应用场景 1.1.1、重要性 数据持久化: 文件是存储数据的一种非常基本且重要的方式。通过文件,我们可 以将程序运行时产生的数据永久保存下来,以便将来使用。 跨平台兼容性: 文件是一种通用…...
“AI 大模型内容安全审核软件系统:守护网络世界的卫士
在如今这个信息爆炸的互联网时代,网络上的内容那是五花八门、层出不穷。这时候,咱就得靠 AI 大模型内容安全审核软件系统来给咱把把关了。 咱就说社交媒体平台吧,每天都有海量的用户在上面发布文字、图片、视频啥的。要是没有一个靠谱的审核系…...
快速入门Python的异步库:asyncio
目录 异步 Python asyncio 1. async 关键字 2. await 关键字 3. asyncio.run() 4. asyncio.sleep() 5. 协程 程序执行流程 可以被等待的异步 协程 任务 Futures 任务 asyncio.create_task() await 和任务结果 Reference 异步 我们首先先来谈谈异步,…...
大美祖国-使用Java盘点那些在地名中出现最多的汉字
目录 前言 一、地名数据准备 1、全国地名数据 二、使用Java进行汉字统计 1、汉字数据统计 2、汉字分割统计 三、浅谈地名汉字名次及其意义 1、山、城、江、河 2、安、平、宁 3、地名中的方位 四、总结 前言 在中国这片古老而又年轻的土地上,地名不仅仅是地…...
华为OD机试E卷 --羊、狼、农夫过河--24年OD统一考试(Java JS Python C C++)
文章目录 题目描述输入描述输出描述用例题目解析JS算法源码Java算法源码python算法源码c算法源码c++算法源码题目描述 羊、狼、农夫都在岸边,当羊的数量小于狼的数量时,狼会攻击羊,农夫则会损失羊。农夫有一艘容量固定的船,能够承载固定数量的动物。 要求求出不损失羊情况…...
Java - WebSocket
一、WebSocket 1.1、WebSocket概念 WebSocket是一种协议,用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接,这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发,并于2…...
JavaWeb开发(十五)实战-生鲜后台管理系统(二)注册、登录、记住密码
1. 生鲜后台管理系统-注册功能 1.1. 注册功能 (1)创建注册RegisterServlet,接收form表单中的参数。 (2)service创建一个userService处理业务逻辑。 (3)RegisterServlet将参数传递给ser…...
【深度学习】利用Java DL4J 训练金融投资组合模型
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…...
【MySQL篇】事务的认识以及四大特性
何为事务? 事务(Transaction)是指一组操作的集合,这些操作要么全部执行成功,要么全部不执行。事务通常用于保证数据库的一致性、完整性和可靠性,确保数据的完整性与正确性。 有效避免部分执行࿰…...
CSS 网络安全字体
适用于 HTML 和 CSS 的最佳 Web 安全字体 下面列出了适用于 HTM L和 CSS 的最佳 Web 安全字体: Arial (sans-serif)Verdana (sans-serif)Helvetica (sans-serif)Tahoma (sans-serif)Trebuchet MS (sans-serif)Times New Roman (serif)Georgia (serif)Garamond (se…...
实战演示:利用ChatGPT高效撰写论文
在当今学术界,撰写论文是一项必不可少的技能。然而,许多研究人员和学生在写作过程中常常感到困惑和压力。幸运的是,人工智能的快速发展为我们提供了新的工具,其中ChatGPT便是一个优秀的选择。本文将通过易创AI创作平台,…...
显卡(Graphics Processing Unit,GPU)架构详细解读
显卡架构主要分为两大类:GPU 核心架构(也称为图形处理单元架构)和显卡的其他组件(如内存、控制器、输出接口等)。本篇文章将对显卡架构进行详细分析,重点介绍 GPU 核心架构、显卡计算单元、显存结构、显卡管…...
OpenCV相机标定与3D重建(63)校正图像的畸变函数undistort()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 转换图像以补偿镜头畸变。 该函数通过变换图像来补偿径向和切向镜头畸变。 此函数仅仅是 initUndistortRectifyMap(使用单位矩阵 R…...
人工智能-机器学习之多分类分析(项目实战二-鸢尾花的多分类分析)
Softmax回归听名字,依然好像是做回归任务的算法,但其实它是去做多分类任务的算法。 篮球比赛胜负是二分类,足球比赛胜平负就是多分类 识别手写数字0和1是二分类,识别手写数字0-9就是多分类 Softmax回归算法是一种用于多分类问题…...
【JDBC】数据库连接的艺术:深入解析数据库连接池、Apache-DBUtils与BasicDAO
文章目录 前言🌍 一.连接池❄️1. 传统获取Conntion问题分析❄️2. 数据库连接池❄️3.连接池之C3P0技术🍁3.1关键特性🍁3.2配置选项🍁3.3使用示例 ❄️4. 连接池之Druid技术🍁 4.1主要特性🍁 4.2 配置选项…...
【Envi遥感图像处理】006:影像融合(高光谱+多光谱)的方法
文章目录 一、图像融合概述二、加载数据三、图像融合操作四、结果比对五、高光谱与多光谱一、图像融合概述 图像融合是指将不同类型传感器的影像进行融合,既能使图向具有较高的空间分辨率,又具有多光谱的特性。 二、加载数据 三、图像融合操作 在ENvi中,图像融合使用的工具…...
C语言内存之旅:从静态到动态的跨越
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一 动态内存管理的必要性二 动态…...
Git本地搭建
Git本地搭建 (项目突然不给创建仓库了,为了方便管理项目只能自己本地搭建git服务) 为了在本地搭建Git环境并实现基本的Git操作,步骤如下: 安装Git软件 Windows:从Git官方网站下载并安装适用于Windows…...
电商|基于java的农业电商系统(源码+数据库+文档)
农业电商系统 目录 基于java的农业电商系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 前台: 后台: 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️…...
c语言分支和循环
文章目录 前言 一、分支结构 if语句 switch语句 三目运算符 二、循环结构 while循环 do-while循环 for循环 循环嵌套 循环控制语句 总结 前言 分支和循环是C语言中非常重要的控制结…...