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

GS论文阅读--GeoTexDensifier

前言

本文是一个关于高斯致密化策略对高斯地图进行优化,他主要关注了几何结构和纹理信息。我最近对于高斯点的分布比较感兴趣,因为高斯点的分布决定了之后重建质量的好坏,初始化高斯很重要,但之后的维护需要致密化与修建策略,同样也很重要,我想要通过提升高斯点云的位置信息,从而使得效果达到更好。
在这里插入图片描述


文章目录

  • 前言
  • 1.背景介绍
  • 2.关键内容
    • 2.1 总体流程
    • 2.2 Mini-Splatting的前置知识
    • 2.2 纹理感知的致密化
    • 2.3 几何感知分裂
    • 参照视图选择与更新
    • 父级splat的VDRC
    • 法线引导分裂
  • 3.文章贡献


1.背景介绍

  1. 3DGS的高质量重建依赖于足够的斑点和这些斑点的合理分布,以适应真实的几何表面和纹理细节,这是一个具有挑战性的问题。
  2. 3DGS通过对初始高斯点的分裂和克隆,实现了完整的场景重建和纹理细节增强。3DGS模型的高质量重建和渲染依赖于两个条件:第一是具有足够数量的高斯splats来支持外观细节,第二是确保splats被优化到3D空间中的正确位置。目前,很少有研究探讨了高斯溅射致密化策略的改进。
  3. 原始的3DGS 存在“过度重建”问题,导致地毯等纹理区域中的细节缺失,而最先进的(SOTA)工作如GeoGaussian 改进了飞溅分布的空间结构,Pixel-GS进一步致密了地毯等纹理区域中的飞溅,但两者仍然缺乏足够的飞溅采样来支持纹理细节。MiniSplatting具有充分采样的splats,但在无纹理区域中引入了过致密化情况,由于约束不足的视觉模糊性,这可能会产生额外的噪声高斯。

2.关键内容

2.1 总体流程

在初始化阶段,首先执行COLMAP以估计表示为。同时,通过ZoeDepth]针对每个输入RGB图像估计深度图,其中其法线图从深度计算,初始化完成后,我们使用一种纹理感知的致密化策略,在完全纹理化的区域中提供足够的高斯splats,同时在纹理较弱的区域中保持高斯的稀疏性,以确保高斯点的空间分布更准确。此外,估计的深度被用作先验来指导高斯splats的分裂,以更好地符合弱纹理区域中的几何表面的实际切向,并避免由于缺乏视觉特征而导致的模糊性所导致的孤立或分散的高斯的生成。纹理感知的致密化方法与几何引导的分裂策略一起构成了我们用于重建高质量照片级真实感3DGS模型的几何-纹理感知的致密化框架。
在这里插入图片描述

2.2 Mini-Splatting的前置知识

在高斯参数的优化过程中,利用ADC在空白区域填充高斯块,主要针对高斯块缺失的不完整区域定义为“欠重建”,而被大尺寸高斯块覆盖的区域定义为“过重建”。具有大的平均视图空间位置梯度的高斯将被加密,通过在欠重建区域中进行高斯克隆并在过度重建的地方分裂大方差的splats,以获得足够数量的高斯splats用于更完整的重建。然而,即使采用这种ADC策略,在具有完整纹理的区域中仍然可能存在致密化不足的情况。最近的工作已经讨论了这种致密化限制,并提出了相应的致密化改进策略来缓解这个问题。例如,Mini-Splatting结合了模糊分割策略与深度重新初始化以使高斯splat分布致密化,然后是简化技术以抑制点的总数以获得更有效的高斯表示。具体地说,对于每个图像 I t I_t It,都是一组具有大值的高斯函数:
在这里插入图片描述
这里 S i t S^t_i Sit表示高斯 G i G_i Gi I t I_t It的最大贡献区域, I i ( x ~ ) I_i(\tilde{x}) Ii(x~)表示 G i G_i Gi在像素 x ~ < ∈ I t \tilde{x}<∈ I_t x~<∈It处的投影索引, I m a x ( x ~ ) = a r g m a x w k ( x ~ ) I_{max}(\tilde{x})= argmax w_k(\tilde{x}) Imax(x~)=argmaxwk(x~)定义在 x ~ \tilde{x} x~处具有最大权重贡献的渲染索引。阈值 T = θ W H T = θWH T=θWH,θ 是一个图象分辨率的系数对于(W,H)。

2.2 纹理感知的致密化

理想的致密化策略是在强纹理区域中生成具有较高密度的飞溅分布,同时在更弱纹理区域(诸如具有纯色的表面)中仍然留下相对稀疏的高斯飞溅。在我们的ADC过程中采用了Mini-Splatting引入的模糊分割策略,这虽然有助于致密化,但可能会导致以下副作用,这些副作用实际上不符合我们的理想目的:首先,弱纹理区域通常具有贡献面积大的高斯分布,导致splat的过度分裂从而产生太多将影响渲染结果的不充分优化的浮动点。 第二是在整个场景上均匀分布的高斯分布的过多数量将花费太大的存储器消耗和大的输出文件存储。

为了解决这些问题,我们提出了一种纹理感知的致密化方法,该方法充分利用训练图像的纹理丰富度来指导各种纹理区域中高斯splats的致密化程度,同时控制splats在分裂过程中的生长。通过这种方式,我们的策略确保致密化的splats得到更彻底的优化,以提高重建质量。为了更好地结合纹理信息作为指导,我们为每个像素 x ∈ I t x ∈ It xIt设计了一个新的权重 s t ( x ) s_t(x) st(x),以更合理地计算每个高斯 G i G_i Gi的贡献,用于识别等式中的模糊斑点。由每个训练图像It的纹理梯度激活,该新权重计算如下:
在这里插入图片描述
它有效地反映了高斯点是否应该被双曲正切函数归一化为[0,1],该函数由灰度值从[0,255]归一化为[0,1]的图像梯度激活,如图3(a)所示。αs和βs是线性回归系数。图3©示出了通过公式2计算的权重图。有了新定义的权重,我们可以重新定义每个高斯分布的最大贡献区域,将每个高斯 G i G_i Gi I t I_t It的最大贡献区域重新定义为 S i t S^t_i Sit。修改公式2至:
在这里插入图片描述
其收集 I t I_t It G i G_i Gi的贡献区域内的逐像素纹理梯度的统计,而不是直接对贡献区域 S i t S^t_i Sit进行计数。以这种方式,完全纹理化的贡献区域将具有更高的纹理梯度统计,以将飞溅视为模糊的,并强制它们进一步分裂以获得更高密度的高斯,而弱纹理化的区域没有足够的纹理梯度收集来支持进一步分裂,使得它们的飞溅分布保持相对稀疏,如图3(f)所示。
在这里插入图片描述
在这里插入图片描述
等式中的原始阈值T是一个固定值。对于为每个高斯splat计算的重新定义的贡献面积 S i t S^t_i Sit,我们进一步引入自适应阈值T来确定高斯点是否足够大以被分裂,其被定义为 T = T s + ( T e − T s ) l − l s l e − l s T = T_s+(T_e-T_s)\frac{l-ls }{le-ls} T=Ts+TeTslelslls,其中l是当前迭代次数, l s l_s ls l e l_e le分别是用于致密化的开始和结束迭代次数,Ts和Te是开始和结束阈值。请注意,随着迭代次数的增加,T将减小,以使具有较小贡献区域的分裂高斯有更多机会在下一次分裂中进一步分裂并完全优化。

2.3 几何感知分裂

除了使用纹理信息来引导高斯片分布到完全纹理化的区域之外,splat的初始位置对于每次分裂也是至关重要的。原始的3DGS方法将现有的高斯分解为随机位于椭圆splat尺度内的新高斯,其概率密度函数(PDF)作为采样指导。如果这些区域包含由足够的训练视图观察到的大量纹理,则可以进一步优化这些分裂的splats以校正靠近真实的几何表面的位置。然而,在真实的世界场景中,特别是室内场景中,通常存在具有弱纹理或没有足够的可见训练视图的大尺寸区域。如果初始的3D位置严重偏离真实的几何表面,将它们细化到正确的位置将是具有挑战性的。这个问题特别发生在无纹理区域,如室内墙壁,地板和门,其中损失函数L1的梯度太小,无法移动分裂的飞溅。图5(a)给出了这个问题的一个例子:门上的父高斯Ga生成一个随机分裂的子高斯Gb,试图适应后面的远处墙壁。
在这里插入图片描述

为了更好地解决这个问题,我们建议利用ZoeDepth估计的训练视图的深度图作为验证我们的分割操作的额外几何先验,考虑到ZoeDepth对复杂场景的鲁棒性,特别是具有弱纹理的场景。然而ZoeDepth预测单目深度图,而没有捕获场景的真实比例。一个简单的想法是将深度图与稀疏SfM点的尺度对齐,并检查每个新分裂的飞溅的初始放置与重新缩放的深度图的判别有效性。然而,由于SfM图点的稀疏性和噪声离群值,实现单目深度图的像素级对准是不切实际的。考虑到SOTA单目深度估计网络(如ZoeDepth)的相对深度总是可靠的,我们探索直接利用未缩放深度图的相对深度信息来实现这种判别式检查。
在这里插入图片描述

我们通过 Z v ( a ) ( G a ) = [ M v ( a ) μ a ] z Z_{v(a)}(Ga)= [M_v(a)μ_a]_z Zv(a)(Ga)=[Mv(a)μa]z计算父Ga到其参考视图V(a)的投影深度,其中 M v ( a ) M_v(a) Mv(a)是其投影矩阵我们分别计算 R V ( a ) ( G b ) R_{V(a)}(G_b) RV(a)(Gb) R V ( a ) ( G c ) R_{V(a)}(G_c) RV(a)(Gc)。之后,我们计算Ga和Gc之间的深度比变化为:
在这里插入图片描述
显然,Ga和Gc之间的深度比变化相对小,而Ga和Gb之间的相对深度比变化 P V ( a ) ( G a , G b ) P_{V(a)}(G_a,G_b) PV(a)(Ga,Gb)大。我们建议丢弃其相对于其父splat的相对深度比变化超过阈值δp的子splat,以防止生成不合适的子高斯像Gb。对于所有实验,我们设定δp = 0.1。如果Gb被滤除,则Ga将被保留以取代其位置,如图4(b)所示。我们将这种判别式检查过程称为深度比变化验证(VDRC)。如图5(e)所示,由于VDRC检查以过滤掉嘈杂的分裂飞溅,前门上的飞溅将留在门内,而不是分裂回到后面的墙壁。通过此VDRC检查,我们将执行几何感知拆分,其详细信息在以下小节中给出。

参照视图选择与更新

直观地,对于每个要分裂的父高斯Ga,我们选择其中Ga在α混合中提供最大渲染权重 w V ( a ) ( G a ) w_{V(a)}(G_a) wV(a)(Ga)的视图V(a)作为其参考视图。在我们的实现中,为每个splat添加了两个额外的属性:图像id V(a)及其渲染权重 w V ( a ) ( G a ) w_{V(a)}(G_a) wV(a)(Ga),它们将在训练过程中不断更新。

假设父深度比 R V ( a ) ( G a ) R_{V(a)}(G_a) RV(a)(Ga)是可靠的,我们在 P V ( a ) ( G a , G b ) P_{V(a)}(G_a,G_b) PV(a)(Ga,Gb)低于阈值的条件下通过VDRC丢弃其子splat Gb,对于我们的所有实验,该阈值被设置为0.1,其中子深度比 R V ( a ) ( G a ) R_{V(a)}(G_a) RV(a)(Ga)也在其父的参考视图V(a)上计算以用于公平比较。随着Ga的位置继续被优化,其最大渲染权重 w V ( a ) ( G a ) w_{V(a)}(G_a) wV(a)(Ga)被重新计算并与记录的权重进行比较。如果另一视图提供最大渲染权重,则V(a)和 w V ( a ) ( G a ) w_{V(a)}(G_a) wV(a)(Ga)将迭代地更新。

父级splat的VDRC

在每次新的分裂之前,一定数量的迭代可能会将一些父splat移动到不正确的位置。例如,Ga可能从门向墙移动,变成像Gb一样的不可靠的高斯,并且将继续生成一系列都将满足VDRC条件的不适当的溅射。为了更好地解决这个问题,我们在每次分裂它们之前将VDRC应用于父高斯。由于初始高斯分布是从SfM映射点继承而来的,因此我们过滤掉了轨迹长度小于3或重投影误差超过1个像素的地图点,以确保初始splat位置的正确性。我们还选择具有由V(a)表示的最小重投影误差的图像视图作为每个高斯Ga的初始参考视图,并添加两个附加属性来记录V(a)及其初始深度比 R V ( a ) ( G a ) R_{V(a)}(G_a) RV(a)(Ga)。在每次分裂之前,所涉及的每个优化的父高斯splat Ga将被投影到其初始参考视图V(a)以计算当前深度比 R V ( a ) ( G a ) R_{V(a)}(G_a) RV(a)(Ga).

通过VDRC验证其自身的变化 P V ( a ) ( G a ) P_{V(a)}(G_a) PV(a)(Ga)。那些不符合VDRC要求的splat将被排除在以下拆分过程之外。如果Ga通过自验证是可靠的,则执行分割,并且VDRC继续通过等式(1)在其父视图V(a)上验证其两个子视图Gb和Gc。有效子splat Gc将考虑从V(a)继承的其自己的初始参考视图V©和初始深度比 R V ( c ) ( G c ) R_{V(c)}(G_c) RV(c)(Gc)= R V ( a ) ( G c ) R_{V(a)}(G_c) RV(a)(Gc),其将进一步用于验证Gc是否将在下一次分裂中被划分成新的高斯。

法线引导分裂

除了使用单目深度来检查分裂高斯的有效性外,ZoeDepth的法线贴图也被集成为几何指导,用于分裂到更合理的位置。对于每个经验证的子溅射Gc,其父Ga的椭圆尺度内的原始随机分裂将影响弱纹理区域中的高斯溅射的平滑度和紧凑空间分布,如图5©的噪声高斯点云所示。我们使用法线映射结合图像纹理来指导新分裂高斯的初始位置。

图4(a)作为示例,我们首先将Ga和随机采样的Gc投影到参考视图V(a),其中投影像素分别表示为 x ~ a \tilde{x} _a x~a x ~ c \tilde{x} _c x~c。然后,利用 x ~ a \tilde{x} _a x~a处的正常 N V ( a ) ( x ~ a ) N_{V(a)}(\tilde{x} _a) NV(a)(x~a) x ~ c \tilde{x} _c x~c处的图像梯度 I V ( a ) ( x ~ c ) I_{V(a)}(\tilde{x} _c) IV(a)(x~c),可以如下确定Gc的最佳位置:

在这里插入图片描述
由于弱纹理化区域缺乏足够的视觉细节来强制分裂的碎片移动到正确的位置,因此这种法线引导的定位强制子Gc在具有相对小的纹理梯度的无纹理区域中保持靠近父Ga的几何表面。对于完全纹理化的区域,我们相信足够的多视图纹理细节能够确保分裂的孩子被优化到正确的位置,因此较大的纹理梯度倾向于保持splat采样的原始随机性,而不是过度地受到几何表面先验的约束,如图4(a)的放大区域所示。通过与VDRC滤波相结合的法线引导分裂,可以获得更好的分布式高斯点云,其更准确地拟合具有更少噪声飞溅的实际场景结构,如在图5(f)的重建的“房间”点云中可以看到的,这也有助于产生由SSIM、PSNR和LPIPS评估的更好的渲染质量。

3.文章贡献

  1. 我们创新性地提出了一种几何感知分割策略,该策略采用法线和相对深度先验来更合理地指导分割高斯的位置采样,并消除位置远离真实表面的不正确采样斑点,以确保斑点分布均匀,符合场景的实际几何结构。
  2. 采用纹理感知的致密化策略作为辅助服务,用于在完全纹理化的区域中找到更多贡献的大splats以进一步分裂以适应纹理细节,同时在弱纹理化区域中保持高斯稀疏以保持恢复的splats的高质量空间分布。

相关文章:

GS论文阅读--GeoTexDensifier

前言 本文是一个关于高斯致密化策略对高斯地图进行优化&#xff0c;他主要关注了几何结构和纹理信息。我最近对于高斯点的分布比较感兴趣&#xff0c;因为高斯点的分布决定了之后重建质量的好坏&#xff0c;初始化高斯很重要&#xff0c;但之后的维护需要致密化与修建策略&…...

Android实战经验篇-玩转Selinux(详解版)

列文章转如下链接&#xff1a; Android Display Graphics系列文章-汇总 Android实战经验篇-系列文章汇总 本文主要包括部分&#xff1a; 一、Selinux概述 1.1 SELinux是什么&#xff1f; 1.2 自主访问控制&#xff08;DAC&#xff09; 1.3 强制访问控制&#xff08;MAC&…...

【langgraph】ubuntu安装:langgraph:未找到命令

langgraph 在ubuntu24.04 参考:langgraph运行:报错: (05_ep_dev) root@k8s-master-pfsrv:/home/zhangbin/perfwork/01_ai/05_ep_dev/expert# langgraph dev langgraph:未找到命令查看langraph的安装情况 pip show langgraph...

深入探究分布式日志系统 Graylog:架构、部署与优化

文章目录 一、Graylog简介二、Graylog原理架构三、日志系统对比四、Graylog部署传统部署MongoDB部署OS或者ES部署Garylog部署容器化部署 五、配置详情六、优化网络和 REST APIMongoDB 七、升级八、监控九、常见问题及处理 一、Graylog简介 Graylog是一个简单易用、功能较全面的…...

HTML新春烟花

系列文章 序号目录1HTML满屏跳动的爱心&#xff08;可写字&#xff09;2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心&#xff08;简易版&#xff09;7HTML粒子爱心8HTML蓝色动态爱心9HTML跳动的爱心&#xff08;双心版&#xff09;1…...

CentOS 7 安装fail2ban hostdeny方式封禁ip —— 筑梦之路

centos 7 换源参考CentOS 7.9 停止维护(2024-6-30)后可用在线yum源 —— 筑梦之路_centos停止维护-CSDN博客 安装fail2ban yum install fail2ban 新增配置文件 cat > /etc/fail2ban/action.d/hostsdeny.conf << EOF [Definition] actionstart actionstop action…...

java入门基础笔记语法篇(3)

一、 注释 什么是注释 注释定义&#xff1a;注释是写在程序中对代码进行解释说明的文字&#xff0c;方便自己和他人查看以理解程序。 Java注释的三种写法&#xff1a; 单行注释&#xff1a;以“//”开头&#xff0c;注释内容只能写一行。多行注释&#xff1a;以“/*”开头&…...

VUE对接deepseekAPI调用

1.先去开放平台注册账号申请api key。开放平台&#xff1a;https://platform.deepseek.com/api_keys 2.你的项目需要有发送请求的axios或者自己写。 npm install axios # 或 yarn add axios 3.创建 API 调用函数 在 Vue 项目中&#xff0c;通常会将 API 调用的逻辑封装到一个…...

【C++高并发服务器WebServer】-1:Linux中父子进程fork创建及关系、GDB多进程调试

本文目录 一、进程创建二、GDB多进程调试 一、进程创建 在Linux中输入man 2 fork可以查看man文档中的fork的相关函数信息。 fork的作用就是创建一个子进程。 通过fork我们可以知道&#xff0c;创建子进程的时候&#xff0c;复制父进程的信息。 我们看看翻译的man文档信息&am…...

leetcode——相交链表(java)

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…...

Spring 框架:配置缓存管理器、注解参数与过期时间

在 Spring 框架中&#xff0c;可通过多种方式配置缓存具体行为&#xff0c;常见配置方法如下。 1. 缓存管理器&#xff08;CacheManager&#xff09;配置 基于内存的缓存管理器配置&#xff08;以SimpleCacheManager为例&#xff09; SimpleCacheManager 是 Spring 提供的简单…...

UDP協議與代理IP介紹

UDP&#xff0c;全稱是用戶數據報協議&#xff08;User Datagram Protocol&#xff09;&#xff0c;是Internet協議套組的一部分&#xff0c;與TCP協議一道工作。與TCP相比&#xff0c;UDP可以理解為一個更“羽量級”的協議。它不需要像TCP那樣在數據傳輸開始之前建立連接&…...

24.日常算法

1. 数组中两元素的最大乘积 题目来源 给你一个整数数组 nums&#xff0c;请你选择数组的两个不同下标 i 和 j&#xff0c;使 (nums[i]-1)*(nums[j]-1) 取得最大值。请你计算并返回该式的最大值。 示例 1&#xff1a; 输入&#xff1a;nums [3,4,5,2] 输出&#xff1a;12 解释…...

【Python】FastAPI框架快速实现后端(一)

FastAPI框架快速实现后端-SQLModel的使用 介绍正文基础模型模型与表定义数据表模型关系定义 介绍 最近1个多月&#xff0c;用FastAPI做了几个日常工作用的小功能&#xff0c;感觉FastAPI确实很适合这种场景&#xff0c;功能要求简单&#xff0c;交付要求比较急&#xff0c;这个…...

西门子【Library of General Functions (LGF) for SIMATIC S7-1200 / S7-1500】

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 通用函数库 (LGF) 扩展了 TIA Portal 中用于 PLC 编程的 STEP 7 指令&#xff08;数学函数、时间、计数器 等&#xff09;。该库可以不受限制地使用&#xff0c;并包含 FIFO 、搜索功能、矩阵计算、 astro 计…...

年度总结和寒假总结

年度总结 加入Hope实验室 年初&#xff0c;我加入了Hope实验室&#xff0c;在实验室里&#xff0c;我接触到了更加前沿的技术和项目。刚开始时&#xff0c;我主要学习了Java语言和MySQL数据库。这是我第一次系统地接触这些技术&#xff0c;相比之前的课堂学习&#xff0c;实验…...

STM32 GPIO配置 点亮LED灯

本次是基于STM32F407ZET6做一个GPIO配置&#xff0c;实现点灯实验。 新建文件 LED.c、LED.h文件&#xff0c;将其封装到Driver文件中。 双击Driver文件将LED.c添加进来 编写头文件&#xff0c;这里注意需要将Driver头文件声明一下。 在LED.c、main.c里面引入头文件LED.h LED初…...

C#标准Mes接口框架(持续更新)

前言 由于近期我做了好几个客户的接入工厂Mes系统的需求。但是每个客户的Mes都有不同程度的定制需求&#xff0c;原有的代码复用难度其实很大。所以打算将整个接入Mes系统的框架单独拿出来作为一个项目使用&#xff0c;同时因为不同的设备接入同一个Mes系统&#xff0c;所以代…...

22_设计方案(4.1.7)

4.1.7 数据组织存储实例 全区所有数据库信息根据业务使用范围存储在互联网区、政务外网区、自然资源业务网区的服务器。互联网区的服务器主要存储互联网数据库。政务外网区的服务器主要存储全区所有市、县(区)不动产登记业务库、档案库、后台管理库、工作流库,全区共享查询…...

Ansys Thermal Desktop 概述

介绍 Thermal Desktop 是一种用于热分析和流体分析的通用工具。它可用于组件或系统级分析。 来源&#xff1a;CRTech 历史 Thermal Desktop 由 C&R Technologies (CR Tech) 开发。它采用了 SINDA/FLUINT 求解器。SINDA/FLUINT 最初由 CR Tech 的创始人为 NASA 的约翰逊航…...

PageView组件的功能和用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了如何屏蔽事件关的内容,本章回中将介绍PageView Widget.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的PageView是指左右滑动或者上下滑动显示不同的页面&#xff0c;Flutter把它…...

自动化实现的思路变化

阶段一&#xff1a; 1、成功调用。第一步&#xff0c;一般是用现用的工具&#xff0c;或者脚本成功调用接口 2、解决关联接口的参数传递。有的接口直接&#xff0c;存在参数的传递&#xff0c;一般的思路&#xff0c;就是将这个参数设置为变量。 3、简化代码。总会有些东西是重…...

微信小程序启动小程序APP Page Component创建顺序

之前之后的打印 都是在&#xff08;&#xff09;之外...

从 UTC 日期时间字符串获取 Unix 时间戳:C 和 C++ 中的挑战与解决方案

在编程世界里&#xff0c;从 UTC 日期时间字符串获取 Unix 时间戳&#xff0c;看似简单&#xff0c;实则暗藏玄机。你以为输入一个像 “Fri, 17 Jan 2025 06:07:07” 这样的 UTC 时间&#xff0c;然后轻松得到 1737094027&#xff08;从 1970 年 1 月 1 日 00:00:00 UTC 开始经…...

[Spring] Gateway详解

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

计数排序算法

基本思想 先确定待排序数组的最大值&#xff08;Max&#xff09;和最小值&#xff08;Min&#xff09;&#xff0c;随后创建Max - Min 1个长度的数组称为计数数组&#xff0c;计数数组的索引对应着待排序数组中元素的值&#xff0c;数组的值表示该元素的出现次数。通过从前往…...

Spring--基于注解的声明式事务

基于注解的声明式事务 1.选择一个合适的事务管理器实现加入到ioc容器 2.使用注解指定哪些方法需要添加事务即可 1.事务属性&#xff1a;只读 // readOnly true把当前事务设置为只读 默认是false! Transactional(readOnly true)Transactional注解放在类上 生效原则 如果一…...

SQL-leetcode—1164. 指定日期的产品价格

1164. 指定日期的产品价格 产品数据表: Products ---------------------- | Column Name | Type | ---------------------- | product_id | int | | new_price | int | | change_date | date | ---------------------- (product_id, change_date) 是此表的主键&#xff08;具…...

微服务搭建----springboot接入Nacos2.x

springboot接入Nacos2.x nacos之前用的版本是1.0的&#xff0c;现在重新搭建一个2.0版本的&#xff0c;学如逆水行舟&#xff0c;不进则退&#xff0c;废话不多说&#xff0c;开搞 1、 nacos2.x搭建 1&#xff0c;首先第一步查询下项目之间的版本对照&#xff0c;不然后期会…...

JavaEE:多线程进阶

JavaEE&#xff1a;多线程进阶 一、对比不同锁策略之间的应用场景及其区别1. 悲观锁 和 乐观锁1.1 定义和原理1.2 应用场景1.3 示例代码 2. 重量级锁 和 轻量级锁2.1 定义和原理2.2 应用场景2.3 示例代码 3. 挂起等待锁 和 自旋锁3.1 定义和原理3.2 应用场景3.3 示例代码 4. 几…...

软件测试 —— jmeter(2)

软件测试 —— jmeter&#xff08;2&#xff09; HTTP默认请求头&#xff08;元件&#xff09;元件作用域和取样器作用域HTTP Cookie管理器同步定时器jmeter插件梯度压测线程组&#xff08;Stepping Thread Group&#xff09;参数解析总结 Response Times over TimeActive Thre…...

[java] 面向对象进阶篇1--黑马程序员

目录 static 静态变量及其访问 实例变量及其访问 静态方法及其访问 实例方法及其访问 总结 继承 作用 定义格式 示例 总结 子类不能继承的内容 继承后的特点 成员变量 成员变量不重名 成员变量重名 super访问父类成员变量 成员方法 成员方法不重名 成员方法…...

openstack单机安装

openstack单机安装 网卡配置安装依赖开启虚拟环境修改配置文件 部署openstack部署openstack客户端访问可视化界面Horizon补充 本篇主要讲述Ubuntu2204单机安装openstackstable/2024.2。其他版本的Linux系统或者openstack版本&#xff0c;请参考openstack官网。 网卡配置 需要配…...

OFD、PDF 电子签章系统处理流程

在C#中实现电子签章系统的处理流程&#xff0c;可以参考以下步骤和技术实现&#xff1a; 1. 电子签章系统的基本流程 电子签章系统的核心流程包括以下几个步骤&#xff1a; 密钥生成&#xff1a;生成公钥和私钥对&#xff0c;私钥由签章人保管&#xff0c;公钥用于验证签名。…...

「 机器人 」系统辨识实验浅谈

前言 系统辨识实验是一种通过实验和数据分析的方法,用于建立物理系统的数学模型的技术。系统辨识是控制工程和系统科学中的重要环节,尤其是在模型未知或复杂的情况下。以下是系统辨识实验的详细介绍: 1. 系统辨识实验的目的 1.1 建模 为动态系统(如机械系统、电气系统或生…...

15.7k!DISM++一款快捷的系统优化工具

软件介绍 链接 软件介绍 dism是一款由初雨团队开发的win系统优化工具&#xff0c;可当作是微软系统命令行工具dism的GUI版本。可用作系统垃圾清除、启动项管理、程序卸载、驱动管理、系统优化等 该工具个人感觉最重要的就是系统优化选项&#xff0c;它将一些实用、无用或者没…...

Windows10安装MySQL找不到MSVCR120.dll和MSVCP120.dll问题解决

个人博客地址&#xff1a;Windows10安装MySQL找不到MSVCR120.dll和MSVCP120.dll问题解决 | 一张假钞的真实世界 msvcp120.dll、msvcr120.dll、vcomp120.dll属于VC2013版中的动态链接库&#xff0c;如果丢失重新安装VC2013即可。下载地址&#xff1a;https://www.microsoft.com…...

Vue 3 30天精进之旅:Day 03 - Vue实例

引言 在前两天的学习中&#xff0c;我们成功搭建了Vue.js的开发环境&#xff0c;并创建了我们的第一个Vue项目。今天&#xff0c;我们将深入了解Vue的核心概念之一——Vue实例。通过学习Vue实例&#xff0c;你将理解Vue的基础架构&#xff0c;掌握数据绑定、模板语法和指令的使…...

被遮挡QT窗口置顶

问题描述 开发环境&#xff1a;windows QT 需求&#xff1a; 单击托盘将桌面窗口在被遮挡的情况下置顶解决方案 方案1 资料链接 代码实现 Qt::WindowFlags flags windowFlags(); this->setWindowFlags((flags | Qt::WindowStaysOnTopHint)); this->showMaximized();…...

Apache Flink 概述学习笔记

一、引言 在大数据处理领域&#xff0c;Apache Flink 是一个极具影响力的开源流批一体化计算框架&#xff0c;它以其独特的架构和强大的功能&#xff0c;为大规模数据处理提供了高效、灵活的解决方案。 二、基本概念 Flink 是什么&#xff1a;Flink 是一个分布式流批处理框架…...

系统思考—复杂问题的根源分析

在企业中&#xff0c;许多问题看似简单&#xff0c;背后却潜藏着复杂的因果关系。传统的思维方式往往只能看到表面&#xff0c;而无法深入挖掘问题的真正根源。我们常常通过“表面解决”来应对眼前的症状&#xff0c;但这往往只是治标不治本。 比如&#xff0c;销量下降时&…...

Python 之 Excel 表格常用操作

示例文件 test.xlsx 将各个表单拆分成单独的 Excel 文件 import os.pathimport openpyxl import pandasdef handle_excel(file_path):dirname os.path.dirname(file_path)basename os.path.basename(file_path).split(".")[0]wb openpyxl.load_workbook(file_pat…...

《用DOTS解决实际需求》集锦

去年作者发布了一篇《DOTS-ECS系列课程》&#xff0c;深受同学们的好评&#xff01;前期课程是基于0.51版本录制的&#xff0c;DOTS升级至1.0版本后&#xff0c;同学们纷纷希望能使用DOTS 1.0版本录制实战课程。 今年作者带着DOTS 1.0版本的实战课程回来啦&#xff01;&#x…...

【MySQL】存储引擎有哪些?区别是什么?

频率难度60%⭐⭐⭐⭐ 这个问题其实难度并不是很大&#xff0c;只是涉及到的相关知识比较繁杂&#xff0c;比如事务、锁机制等等&#xff0c;都和存储引擎有关系。有时还会根据场景选择不同的存储引擎。 下面笔者将会根据几个部分尽可能地讲清楚 MySQL 中的存储引擎&#xff0…...

ios打包:uuid与udid

ios的uuid与udid混乱的网上信息 新人开发ios&#xff0c;发现uuid和udid在网上有很多帖子里是混淆的&#xff0c;比如百度下&#xff0c;就会说&#xff1a; 在iOS中使用UUID&#xff08;通用唯一识别码&#xff09;作为永久签名&#xff0c;通常是指生成一个唯一标识&#xf…...

Jadx动态调试安卓逆向

adb shell su ls 找到default.prop cat default.prop ro.debuggable0(代表没有调试权限) adb shell getprop ro.debuggable # 检查设备是否可调试&#xff08;1可调试&#xff09; adb shell getprop ro.product.cpu.abi # 获取设备 CPU 架构&#xff08;如 arm64-v…...

在Ubuntu上使用Apache+MariaDB安装部署Nextcloud并修改默认存储路径

一、前言 Nextcloud 是一款开源的私有云存储解决方案&#xff0c;允许用户轻松搭建自己的云服务。它不仅支持文件存储和共享&#xff0c;还提供了日历、联系人、任务管理、笔记等丰富的功能。本文将详细介绍如何在 Ubuntu 22.04 LTS 上使用 Apache 和 MariaDB 安装部署 Nextcl…...

FPGA实现任意角度视频旋转(二)视频90度/270度无裁剪旋转

本文主要介绍如何基于FPGA实现视频的90度/270度无裁剪旋转&#xff0c;关于视频180度实时旋转&#xff0c;请见本专栏前面的文章&#xff0c;旋转效果示意图如下&#xff1a; 为了实时对比旋转效果&#xff0c;采用分屏显示进行处理&#xff0c;左边代表旋转前的视频在屏幕中…...

六、深入了解DI

依赖注入是⼀个过程&#xff0c;是指IoC容器在创建Bean时,去提供运⾏时所依赖的资源&#xff0c;⽽资源指的就是对象. 在上⾯程序案例中&#xff0c;我们使⽤了 Autowired 这个注解&#xff0c;完成了依赖注⼊的操作. 简单来说,就是把对象取出来放到某个类的属性中。 关于依赖注…...

kotlin内联函数——let,run,apply,also,with的区别

一、概述 为了帮助您根据使用场景选择合适的作用域函数&#xff08;scope function&#xff09;&#xff0c;我们将对它们进行详细描述并提供使用建议。从技术上讲&#xff0c;许多情况下范围函数是可以互换使用的&#xff0c;因此示例中展示了使用它们的约定俗成的做法。 1.…...