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

30、论文阅读:基于小波的傅里叶信息交互与频率扩散调整的水下图像恢复

Wavelet-based Fourier Information Interaction with Frequency Diffusion Adjustment for Underwater Image Restoration

  • 摘要
  • 介绍
  • 相关工作
    • 水下图像增强
    • 扩散模型
  • 论文方法
    • 整体架构
    • 离散小波变换与傅里叶变换
    • 频率初步增强
      • Wide Transformer Block
      • Spatial-Frequency Fusion Block
      • 损失函数
    • Cross-Frequency Conditioner
  • Frequency Diffusion Adjustment

摘要

水下图像受到复杂多样的退化,不可避免地影响水下视觉任务的有效性。然而,大多数方法主要是在图像的原始像素空间中运行,这限制了对水下图像频率特性的探索,导致深度模型在产生高质量图像时没有充分利用其表征能力。在本文中,我们介绍了一种新的水下图像增强(UIE)框架,命名为WF-Diff,旨在充分利用频域信息和扩散模型的特性WF-Diff由两个可分离的网络组成:基于小波的傅里叶信息交互网络(WFI2-net)和频率残差扩散调整模块(FR-DAM)。通过对频域信息的充分探索,WFI2-net旨在初步实现小波空间中频率信息的增强。我们提出的FRDAM可以进一步细化初始增强图像的高频和低频信息,可以将其视为一个即插即用的通用模块,用于调整水下图像的细节。通过上述技术,我们的算法可以在真实的水下图像数据集上显示SOTA性能,并在视觉质量上达到具有竞争力的性能。代码可https://github.com/zhihefang/WF-Diff上获得。

介绍

水下图像修复是水下视觉领域中的一项实际而具有挑战性的技术,广泛应用于水下机器人[26]和水下物体追踪[6]等任务。由于水下场景中的光线折射、吸收和散射,水下图像通常受到严重的失真,表现为低对比度和模糊[2]。因此,清晰的水下图像在需要与水下环境互动的领域中起着至关重要的作用。水下图像增强(UIE)的主要目标是通过去除散射和校正退化图像中的颜色失真,从而获得高质量的图像。UIE对于与视觉相关的水下任务至关重要。

为了应对这一问题,基于水下图像物理特性的传统UIE方法被提出[15, 17, 29–31]。这些方法研究了由颜色偏差或散射引起的退化的物理机制,并通过补偿这些因素来增强水下图像。然而,这些基于物理学的模型由于表征能力有限,无法处理水下场景中所有复杂的物理和光学因素,从而导致在高度复杂和多样的水下场景中增强效果较差。近年来,一些基于学习的方法[7, 18, 28, 36]因其神经网络强大的特征表示和非线性映射能力,能够产生更好的结果。这些方法可以通过大量的配对训练数据学习图像从退化到清晰的映射。然而,大多数之前的方法都是基于图像的原始像素空间,未能充分探索水下图像在频率空间中的特性,这导致无法有效地利用深度模型的表示能力来生成高质量的图像。

在这里插入图片描述
【图1. 我们的动机。幅度和相位是通过快速傅里叶变换(FFT)得到的,重新组合的图像是通过逆傅里叶变换(IFFT)获得的。我们进一步探索了水下图像在小波空间中的频率特性。】

基于之前傅里叶方法的启示[12, 48],我们探索了傅里叶频率信息在UIE任务中的特性,如图1所示。给定两张图像(一个水下图像及其对应的地面真值图像),我们交换它们的幅度分量并将其与对应的相位分量在傅里叶空间中结合。重新组合的结果表明,视觉效果随着幅度交换而发生变化,这表明水下图像的退化信息主要包含在幅度分量中。我们进一步探索了幅度分量在小波空间中的特性。具体来说,图像可以通过离散小波变换(DWT)分解为低频子图像和高频子图像,然后我们交换低频子图像的幅度分量。从视觉结果来看,我们发现了类似的现象,这意味着颜色退化信息主要包含在低频子图像中,而纹理和细节退化信息主要包含在高频子图像中。表1展示了不同频域策略的定量评估,证明了我们的发现是客观的。因此,如何充分利用频域信息的特性,并将其有效地融入到一个统一的图像增强网络中,是一个关键问题。

近年来,基于扩散的方法[10, 35]因其在图像合成[23, 24, 32, 34, 52]和修复任务[5, 40, 46, 51]中的优异表现而受到广泛关注。这些方法依赖于分层去噪自编码器架构,使得它们能够迭代地逆转扩散过程,从随机采样的高斯噪声生成目标图像或潜在分布,并实现高质量的映射[10]。Tang等人[36]提出了一种用于水下场景的扩散模型图像增强方法。尽管标准扩散模型表现出足够的能力,但由于从随机生成的高斯噪声到图像的采样过程中引入的多样性,可能会出现一些预料之外的伪影[45]。此外,扩散模型需要同时恢复图像的高频和低频信息,这限制了它们对细粒度信息的关注,导致错过了纹理和细节。因此,充分利用扩散模型强大的表示能力变得尤为关键。

在本文中,我们开发了一种新的水下图像增强(UIE)框架,充分利用频域信息和扩散模型的特性,命名为 WF-Diff,该框架主要由两个阶段组成:频率初步增强和频率扩散调整第一个阶段旨在利用频域特性,初步增强水下图像的高频和低频分量。具体来说,我们首先通过离散小波变换(DWT)将输入图像转换到小波空间,得到一个代表输入图像低频内容信息的平均系数,以及三个代表输入图像稀疏的垂直、水平和对角线细节的高频系数。然后,我们设计了一个基于小波的傅里叶信息交互网络(WFI2-net),充分融合了Transformer [22] 和傅里叶先验信息的特性,分别增强高频和低频内容此外,为了实现高频和低频信息的交互,我们提出了一个跨频条件器(CFC),进一步提高生成质量第二阶段的目标是通过扩散模型对初步增强的粗略结果在细节和纹理上进行调整因此,我们提出了一个频率残差扩散调整模块(FRDAM)与之前的基于扩散的工作不同,FRDAM通过在小波空间中使用两个扩散模型,学习地面真值和初步增强结果之间的高频和低频信息残差分布,既能增强模型对细粒度信息的关注,又能减轻采样过程中多样性带来的不良影响。

总之,我们方法的主要贡献如下:

  • 我们深入探索了水下图像在频域中的特性。基于这些特性和扩散模型,我们提出了一个新的UIE框架——WF-Diff,旨在实现频率增强和扩散调整。
  • 我们提出了一个频率残差扩散调整模块(FRDAM),进一步优化初步增强图像的高频和低频信息。FRDAM可以视为一个即插即用的通用模块,用于调整水下图像的细节。
  • 我们提出了一个跨频条件器(CFC),以实现高频和低频信息的跨频交互。
  • 与现有的最先进方法(SOTA)相比,实验结果显著表明,我们提出的WF-Diff在性能上优于之前的UIE方法,并且通过广泛的消融实验验证了我们贡献的有效性。

相关工作

水下图像增强

目前,现有的水下图像去雾(UID)方法可以简要地分为物理模型和深度模型两种方法[15, 18, 28–30, 36]。大多数基于物理模型的UID方法利用先验知识来建立模型,如水下暗通道先验[29]、衰减曲线先验[38]、模糊先验[4]等。此外,Akkaynak和Treibitz[1]提出了一种基于修订物理成像模型的方法。然而,水下场景的深度图难以获取,这导致了不稳定的性能,通常受到严重的颜色偏差和伪影的影响。因此,手动建立的先验模型限制了模型在复杂多变的环境下的鲁棒性和可扩展性。

近年来,基于深度学习的方法[18, 28, 36]已取得了较为可接受的性能。为了缓解对真实水下配对训练数据的需求,许多方法引入了基于GAN的框架进行水下图像增强(UIE)[7, 14, 21, 49],例如WaterGAN [21]、UGAN [7]和UIE-DAL [37]。最近,一些复杂的框架被提出并取得了最先进的性能[15, 29]。例如,Ucolor[19]结合了水下物理成像模型,并设计了一个中介传输引导模型。Yang等人[43]提出了一种反射光感知的多尺度渐进修复网络,用于在各种水下场景中获得颜色均衡和丰富纹理的图像。Huang等人[13]提出了一种基于均值教师的半监督网络,能够有效地利用未标注数据中的知识。然而,大多数之前的方法都是基于空间域,未能充分探索水下图像的频率空间,这导致无法有效地利用深度模型的表示能力。

扩散模型

最近,扩散概率模型(DPMs)[10, 35]已广泛应用于条件图像生成[5, 40, 42, 46, 50]。Saharia等人[33]提出了Palette,展示了扩散模型在条件图像生成领域(包括上色、图像修补和JPEG修复)中的优异性能。Tang等人[36]提出了一种基于扩散模型的水下图像增强方法。然而,扩散模型的反向过程从随机采样的高斯噪声开始,生成完整的图像[45],由于采样过程的多样性,这可能导致意外的伪影。此外,扩散模型需要恢复图像中的高频和低频信息,这限制了其在关注细粒度信息方面的能力。因此,如何将扩散模型融入一个统一的水下图像增强网络是一个至关重要的问题。

论文方法

在这里插入图片描述

整体架构

给定一张水下图像作为输入,我们的目标是学习一个网络,生成一个输出,去除输入图像的颜色偏差,同时增强图像的细节。WF-Diff的整体框架如图2所示。WF-Diff旨在充分利用频域信息的特性和扩散模型的强大能力。具体来说,WF-Diff由两个可拆卸的网络组成:基于小波的傅里叶信息交互网络(WFI2-net)和频率残差扩散调整模块(FRDAM)。我们首先通过离散小波变换(DWT)将输入图像转换到小波空间,得到一个低频系数和三个高频系数WFI2-net致力于实现频率信息的初步增强。我们充分整合Transformer和傅里叶先验信息的特性,设计了宽Transformer块(WTB)和空间-频率融合块(SFFB),分别增强高频和低频内容。FRDAM由低频扩散分支(LDFB)和高频扩散分支(HDFB)组成,旨在进一步调整初步增强图像的高频和低频信息。需要注意的是,我们提出的FRDAM通过使用两个扩散模型分别学习地面真值和初步增强结果之间的高频和低频信息的残差分布。此外,所提出的跨频条件器(CFC)旨在实现高频和低频信息之间的跨频交互

离散小波变换与傅里叶变换

离散小波变换(DWT)已广泛应用于低层视觉任务[11, 16]。我们首先使用DWT将输入图像分解为多个频率子带,以便分别实现低频信息的颜色校正和高频信息的细节增强。给定一张水下图像作为输入在这里插入图片描述
,我们使用Haar小波对输入进行分解。Haar小波由低通滤波器 L 和高通滤波器 H 组成,如下所示:
在这里插入图片描述
我们可以获得四个子带,其可以表示为:
在这里插入图片描述
其中,在这里插入图片描述
分别表示输入图像的低频分量和垂直、水平、对角方向的高频分量。更具体地说,低频分量包含了输入图像的内容和颜色信息,而其他三个高频系数则包含了全局结构和纹理的细节信息[31]。这些子带的分辨率是输入图像的一半,但由于DWT的双正交性质,它们不会导致信息丢失对于低频分量 ILL,我们将在傅里叶空间中进一步探讨其特性

接着,我们引入傅里叶变换的操作[48]。给定一个图像 在这里插入图片描述
,其形状为 H x W,傅里叶变换 F 将 x 转换到傅里叶空间 X ,其表达式为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中, R(x) 和 I(x) 分别表示 X(u, v) 的实部和虚部。需要注意的是,傅里叶操作可以在每个通道的特征图上独立计算。根据图1和表1(我们的动机),我们得出结论:水下图像的颜色退化信息主要包含在低频子带的幅度分量中,而纹理和细节退化信息则主要包含在高频子带中。

频率初步增强

基于上述分析,在频率初步增强阶段,我们设计了一个简单但有效的WFI2-net,采用并行的编码器-解码器(类似U-Net)的结构,分别恢复低频信息的幅度分量和高频分量。我们还利用跳跃连接将编码器和解码器中相同层次的特征连接起来。对于高频分支,我们利用变压器(Transformer)建模全局信息的优势来增强高频系数。我们设计了宽变压器块(WTB),使用多尺度信息,旨在建模长距离依赖关系我们的低频分支旨在恢复傅里叶空间中的幅度分量为了获得丰富的频率和空间信息,我们设计了空间-频率融合块(SFFB)

在这里插入图片描述

Wide Transformer Block

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Spatial-Frequency Fusion Block

在这里插入图片描述
在这里插入图片描述

损失函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Cross-Frequency Conditioner

在这里插入图片描述
在这里插入图片描述
类似地,可以获得高频嵌入的VT和低频嵌入的VF:

在这里插入图片描述
输出特征图Tout和Fout然后可以从以下公式获得:

在这里插入图片描述
其中R表示复制操作,√ dk是矩阵Q的列数。

Frequency Diffusion Adjustment

相关文章:

30、论文阅读:基于小波的傅里叶信息交互与频率扩散调整的水下图像恢复

Wavelet-based Fourier Information Interaction with Frequency Diffusion Adjustment for Underwater Image Restoration 摘要介绍相关工作水下图像增强扩散模型 论文方法整体架构离散小波变换与傅里叶变换频率初步增强Wide Transformer BlockSpatial-Frequency Fusion Block…...

uniapp H5页面实现懒加载

在 uniapp 中,要在小的 view 内实现列表懒加载,可以通过以下步骤来实现: 使用 scroll-view 组件来创建一个可滚动的区域。在 scroll-view内 部放置一个list组件,用于显示数据列表。监听 scroll-view 的滚动事件,当滚动…...

Linux(Centos 7.6)命令详解:mkdir

1.命令作用 如果目录还不存在,则创建目录(Create the DIRECTORY, if they do not already exist.) 2.命令语法 Usage: mkdir [OPTION]... DIRECTORY... 3.参数详解 OPTION: -m, --modeMODE,创建新目录同时设置权限模式-p, --parents,创…...

Freemarker模板进行判空

文章目录 freemarker判断对象是否为null使用 ?? 操作符使用 ?has_content 内建函数直接使用 ! 操作符取反 freemarker判断列表是否为空 freemarker判断对象是否为null 在 FreeMarker 模板引擎中,你可以使用内建的指令和条件判断来检测一个对象是否为 null。Free…...

20250103在Ubuntu20.04.5的Android Studio 2024.2.1.12中跑通Hello World

20250103在Ubuntu20.04.5的Android Studio 2024.2.1.12中跑通Hello World 2025/1/3 14:06 百度:android studio helloworld android studio hello world kotlin helloword kotlin 串口 no run configurations added android studio no run configurations added 1、…...

Infineon PSoC 4 CapSense ModusToolbox IDE - 系统生态篇

本文档说明了 ModusToolbox 软体环境的 4 个层面,该环境为 CapSense 设备和生态系统提供支援。本文是 Infineon PSoC 4 CapSense ModusToolbox IDE-系统介绍的延伸篇 (Infineon PSoC 4 CapSense ModusToolbox IDE -系统介绍篇 - 大大通(简体站))。 什么是ModusToolb…...

Backend - EF Core(C# 操作数据库 DB)

目录 一、EF Core 1. 使用的ORM框架(对象关系映射) 2. EFCore 常见两种模式 3. EFCore 提供程序 二、 EF 操作数据库(Code First) 1. 下载NuGet插件 2.创建模型类文件 3.创建DBContext文件 4.Programs.cs文件 5.appsettings.Devel…...

ETL处理工具Kettle入门

1. Kettle简介 Kettle(现已更名为Pentaho Data Integration,简称PDI)是一个开源的ETL工具,能够进行数据的抽取(Extract)、转换(Transform)和加载(Load)。它是…...

排序算法的实现(插入,希尔,选择,冒泡,堆排,快排)

目录 1.选择排序 2.冒泡排序 3.堆排序 4.插入排序 5.希尔排序 6.快排 6.1快排的优化 6.2快排(双指针法) 6.3快排(非递归) 7.归并排序 7.1归并非递归 8.计数排序 1.选择排序 对n个元素进行选择排序,我们可以…...

【微服务】5、服务保护 Sentinel

Sentinel学习内容概述 Sentinel简介与结构 Sentinel是Spring Cloud Alibaba的组件,由阿里巴巴开源,用于服务流量控制和保护。其内部核心库(客户端)包含限流、熔断等功能,微服务引入该库后只需配置规则。规则配置方式有…...

C 语言函数指针 (Pointers to Functions, Function Pointers)

C 语言函数指针 {Pointers to Functions, Function Pointers} 1. Pointers to Functions (函数指针)2. Function Pointers (函数指针)2.1. Declaring Function Pointers2.2. Assigning Function Pointers2.3. Calling Function Pointers 3. Jump Tables (转移表)References 1. …...

Mesa llvmpipe和softpipe对比

Mesa 后端性能分析:LLVM vs Software Pipe 当调试没有显卡的时候,可以使用cpu软件模拟的mesa-3d,后端采用kms_swrast_dri.so,发现管线使用llvmpipe的速度明显优于softpipe; 背景介绍 Mesa 是一个开源的图形库&#xf…...

【Spiffo】排障:VsCode报错“过程试图写入的管道不存在”(网络环境正常且地址正常的情况下依然出现)

摘要: VsCode使用remote-ssh报错nstall terminal quit with output: 过程试图写入的管道不存在,且输出类似下图的信息 一般来说这种情况更可能是网络环境出了问题,那连不上自不必多说,这里想讨论一种特殊情况。 有一种可能性&…...

Python图形界面(GUI)Tkinter笔记(二十一):Messagebox信息提示功能控件

messagebox 就像是 tkinter 库里的一个好帮手,它能帮你弹出各种各样的消息框给用户看。这些消息框可以告诉用户很多东西,比如提示、警告或者错误信息之类的。在 tkinter 库里,messagebox 这个模块有很多不同的函数,每个函数都能弹出一种特定的消息框。用这些函数,开发者可…...

KUKA机器人如何修改程序并下载到机器人控制器中?

KUKA机器人如何修改程序并下载到机器人控制器中? 如下图所示,首先将使用的网卡的IP地址设置为自动获得, 打开workvisual软件,点击搜索,正常情况下可以搜索到项目文件,选中后双击进入, 如下图所示,此时,workvisual会自动从机器人控制器中下载项目文件到电脑上,耐心等待…...

jmeter 中 BeanShell 预处理程序、JSR223后置处理程序使用示例

1. 各个组件如何新建的? 2. "http请求" 组件内容样例: "消息体数据" 源码: {"task_tag": "face_detect","image_type": "base64","extra_args": [{"model"…...

「Mac畅玩鸿蒙与硬件53」UI互动应用篇30 - 打卡提醒小应用

本篇教程将实现一个打卡提醒小应用,通过用户输入时间进行提醒设置,并展示实时提醒状态,实现提醒设置和取消等功能。 关键词 打卡提醒状态管理定时任务输入校验UI交互 一、功能说明 打卡提醒小应用包含以下功能: 提醒时间输入与…...

前端开发【插件】moment 基本使用详解【日期】

moment.js 是一个非常流行的 JavaScript 库,用于处理和操作日期与时间。它提供了丰富的 API 来处理各种日期、时间和格式化的操作。尽管随着 Date API 的增强,moment.js 被视为“过时”,并且推荐使用 date-fns 或 luxon 等库来替代&#xff0…...

Apache Celeborn 在B站的生产实践

背景介绍 Shuffle 演进 随着B站业务的飞速发展,数据规模呈指数级增长,计算集群也逐步从单机房扩展到多机房部署模式。多个业务线依托大数据平台驱动核心业务,大数据系统的高效性与稳定性成为公司业务发展的重要基石。如图1,目前在大数据基础架构下,我们主要采用 Spark、Fl…...

imageio 图片转mp4 保存mp4

目录 安装: imageio 图片转mp4 numpy 保存mp4 安装: FFMPEG: pip install imageio[ffmpeg] pyav: pip install imageio[pyav] imageio 图片转mp4 import glob import osimport cv2 import imageio from natsort import natsortedfrom PIL import …...

【C语言程序设计——选择结构程序设计】求阶跃函数的值(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 1. 选择结构基本概念 2. 主要语句类型​(if、if-else、switch) 3. 跃迁函数中变量的取值范围 4. 计算阶跃函数的值 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务:输入x的值&#x…...

基于 Solana Playground (pg模式)发行自定义参数的代币

文章目录 要做的事1、水龙头(devnet 环境)2、Solana Playground2.1、选择环境 3、基于 Solana Playground (pg模式)发行自定义参数的代币3.1、账户体系3.2、代码 4、浏览器& Phantom钱包 展示代币图片4.1、 浏览器和钱包展示的…...

代码随想录算法训练营第七十天 | 拓扑排序精讲,Dijkstra(朴素版)精讲,Dijkstra(堆优化版)精讲

拓扑排序精讲 题目讲解:代码随想录 重点: 给出一个有向图,把这个有向图转成线性的排序就叫拓扑排序。拓扑排序也是图论中判断有向无环图的常用方法。拓扑排序的过程,其实就两步: 找到入度为0的节点,加入结…...

基于 Python Django 的西西家居全屋定制系统(源码+部署+文档)

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

excel填充十六进制

excel填充十六进制 A10x000020x000130x000240x000350x000460x000570x000680x000790x0008100x0009110x000A120x000B130x000C140x000D150x000E160x000F 在A1表格中,输入:“0x”&DEC2HEX(ROW()-1,4) 然后进行下拉即可生成如表格显示十六进制...

scrapy 教程

Scrapy Tutorial In this tutorial, we’ll assume that Scrapy is already installed on your system. If that’s not the case, see Installation guide. We are going to scrape quotes.toscrape.com, a website that lists quotes from famous authors. This tutorial …...

IDE和IDEA详解和具体差异

1. IDE(集成开发环境)概述 1.1 什么是 IDE? IDE(Integrated Development Environment,集成开发环境)是一种为开发者提供全面编程工具的软件应用程序。它将代码编辑、编译、调试、版本控制等功能集成在一个统一的界面中,旨在提高开发效率,减少开发者在不同工具之间切换…...

使用MPTCP+BBR进行数据传输,让网络又快又稳

1.前言 在前文《链路聚合技术——多路径传输Multipath TCP(MPTCP)快速实践》中我们使用mptcpize run命令实现了两个节点间通信使用MPTCP协议进行传输,并实现了传输速率的聚合。 实际应用中更推荐原生支持mptcp的应用,在MPTCP官网中可以看到如TCPDump、…...

【网络】网络基础知识(协议、mac、ip、套接字)

文章目录 1. 计算机网络的背景2. 认识网络协议2.1 协议分层2.2 OS与网络的关系 3. 网络传输基本流程3.1 局域网通信流程3.2 跨网络通信流程 4. Socket 编程预备4.1 理解源IP地址和目的IP地址4.2 端口号与Socket4.3传输层的典型代表4.4 网络字节序 5. socket 编程接口5.1 介绍5.…...

Unity【Colliders碰撞器】和【Rigibody刚体】的应用——小球反弹效果

目录 Collider 2D 定义: 类型: Rigidbody 2D 定义: 属性和行为: 运动控制: 碰撞检测: 结合使用 实用检测 延伸拓展 1、在Unity中优化Collider 2D和Rigidbody 2D的性能 2、Unity中Collider 2D…...

游戏引擎学习第75天

仓库:https://gitee.com/mrxiao_com/2d_game_2 Blackboard: 处理楼梯通行 为了实现楼梯的平滑过渡和角色的移动控制,需要对楼梯区域的碰撞与玩家的运动方式进行优化。具体的处理方式和遇到的问题如下: 楼梯区域的过渡: 在三维空间中&#x…...

ModelScope ms-swift:轻量级模型微调框架

ModelScope ms-swift:轻量级模型微调框架 介绍支持的模型支持的技术使用方法为什么选择ms-swift?结论 介绍 ModelScope ms-swift是ModelScope社区提供的一个官方框架,用于大型语言模型(LLMs)和多模态大型模型&#xf…...

管理加密SQLite数据库的软件工具研究

使用软件工具管理加密的 SQLite 数据库是一个常见需求,尤其是当需要保护敏感数据时。以下是实现此目标的步骤和相关工具推荐: 1. 选择支持加密的 SQLite 版本 SQLite 默认并不支持加密功能。你需要使用以下方法之一来启用加密: SQLite Encry…...

react 封装一个类函数使用方法

1.编写ProductCount函数 class ProductCount {public static getProductCount(count: number): string {if (count < 10) {return 当前数量: 0${count};}return 当前数量: ${count};} }export default ProductCount;2.在代码文件中导入 ProductCount 类。 import ProductC…...

Windows 11 上通过 WSL (Windows Subsystem for Linux) 安装 MySQL 8

在 Windows 11 上通过 WSL (Windows Subsystem for Linux) 安装 MySQL 8 的步骤如下&#xff1a; ✅ 1. 检查 WSL 的安装 首先确保已经安装并启用了 WSL 2。 &#x1f527; 检查 WSL 版本 打开 PowerShell&#xff0c;执行以下命令&#xff1a; wsl --list --verbose确保 W…...

解决 IntelliJ IDEA 中 Tomcat 日志乱码问题的详细指南

目录 前言1. 分析问题原因2. 解决方案 2.1 修改 IntelliJ IDEA 的 JVM 选项2.2 配置 Tomcat 实例的 VM 选项 2.2.1 设置 Tomcat 的 VM 选项2.2.2 添加环境变量 3. 进一步优化 3.1 修改 Tomcat 的 logging.properties3.2 修改操作系统默认编码 3.2.1 Windows 系统3.2.2 Linux …...

jenkins入门4 --window执行execute shell

1、启动关闭jenkins 在Windows环境下&#xff0c;如果你需要关闭Jenkins服务&#xff0c;可以通过以下几种方式&#xff1a; 1、使用Windows服务管理器&#xff1a; 打开“运行”对话框&#xff08;Win R&#xff09;&#xff0c;输入services.msc&#xff0c;然后回车。 在服…...

51c嵌入式~单片机~合集4

我自己的原文哦~ https://blog.51cto.com/whaosoft/12868932 一、时钟失效之后&#xff0c;STM32还能运行&#xff1f; 问题&#xff1a; 该问题由某客户提出&#xff0c;发生在 STM32F103VDT6 器件上。据其工程师讲述&#xff1a;在其产品的设计中&#xff0c;STM32 的 H…...

OKHttp调用第三方接口,响应转string报错okhttp3.internal.http.RealResponseBody@4a3d0218

原因分析 通过OkHttp请求网络&#xff0c;结果请求下来的数据一直无法解析并且报错&#xff0c;因解析时String res response.body().toString() 将toString改为string即可&#xff01;...

杰发科技——使用ATCLinkTool解除读保护

0. 原因 在jlink供电电压不稳定的情况下&#xff0c;概率性出现读保护问题&#xff0c;量产时候可以通过离线烧录工具避免。代码中开了读保护&#xff0c;但是没有通过can/uart/lin/gpio控制等方式进行关闭&#xff0c;导致无法关闭读保护。杰发所有芯片都可以用本方式解除读保…...

SQL 幂运算 — POW() and POWER()函数用法详解

POW() and POWER()函数用法详解 POW() 和 POWER() —计算幂运算&#xff08;即一个数的指定次方&#xff09;的函数。 这两个函数是等价的&#xff0c;功能完全相同&#xff0c;只是名字不同。 POW(base, exponent); POWER(base, exponent); base&#xff1a;底数。exponen…...

【Shell脚本】Docker构建Java项目,并自动停止原镜像容器,发布新版本

本文简述 经常使用docker部署SpringBoot 项目&#xff0c;因为自己的服务器小且项目简单&#xff0c;因此没有使用自动化部署。每次将jar包传到服务器后&#xff0c;需要手动构建&#xff0c;然后停止原有容器&#xff0c;并使用新的镜像启动&#xff0c;介于AI时代越来越懒的…...

【ArcGIS Pro二次开发实例教程】(2):BSM字段赋值

一、简介 一般的数据库要素或表格都有一个BSM字段&#xff0c;用来标识唯一值。 此工具要实现的功能是&#xff1a;按一定的规律&#xff08;前缀中间的填充数字OBJECT码&#xff09;来给BSM赋值。 主要技术要点包括&#xff1a; 1、ProWindow的创建&#xff0c;Label,Comb…...

VSCode函数调用关系图插件开发(d3-graphviz)

文章目录 1、如何在VSCode插件webview中用d3-graphviz绘图2、VSCode插件使用离线d3.min.js、d3-graphviz3、使用 `@hpcc-js/wasm` 包在 Node.js 环境直接转换dot为svg1、如何在VSCode插件webview中用d3-graphviz绘图 我来帮你创建一个 VS Code 插件示例,实现右键菜单触发 Web…...

OCR图片中文字识别(Tess4j)

文章目录 Tess4J下载 tessdataJava 使用Tess4j 的 demo Tess4J Tess4J 是 Tesseract OCR 引擎的 Java 封装库&#xff0c;它让 Java 项目更轻松地实现 OCR&#xff08;光学字符识别&#xff09;功能。 下载 tessdata 下载地址&#xff1a;https://github.com/tesseract-ocr/…...

leetcode 面试经典 150 题:同构字符串

链接同构字符串题序号205题型字符串解法哈希表难度简单熟练度✅✅✅✅ 题目 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#…...

算法-泰波那契

力扣题目链接&#xff1a;1137. 第 N 个泰波那契数 - 力扣&#xff08;LeetCode&#xff09; 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 示例 1&…...

Mac修改文件权限

查看文件权限 ll -all 修改读写权限 sudo chmod -R arwx /usr/local/mysql-5.7.30-macos10.14-x86_64/data/a_test 修改用户分组 sudo chown -R _mysql:wheel /usr/local/mysql-5.7.30-macos10.14-x86_64/data/b_test...

如何安装和配置PHP开发环境?

要安装和配置PHP开发环境&#xff0c;可以按照以下步骤进行&#xff1a; 一、下载和安装PHP 1&#xff1a;下载PHP&#xff1a; 访问PHP官方网站&#xff08;PHP: Downloads&#xff09;&#xff0c;选择适合您操作系统的版本进行下载。 2&#xff1a;解压并安装PHP&#x…...

深入探讨 Android 中的 AlarmManager:定时任务调度及优化实践

引言 在 Android 开发中&#xff0c;AlarmManager 是一个非常重要的系统服务&#xff0c;用于设置定时任务或者周期性任务。无论是设置一个闹钟&#xff0c;还是定时进行数据同步&#xff0c;AlarmManager 都是不可或缺的工具之一。然而&#xff0c;随着 Android 系统的不断演…...