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

论文阅读:Computational Long Exposure Mobile Photography (一)

这篇文章是谷歌发表在 2023 ACM transaction on Graphic 上的一篇文章,介绍如何在手机摄影中实现长曝光的一些拍摄效果。

Abstract

长曝光摄影能拍出令人惊叹的影像,用运动模糊来呈现场景中的移动元素。它通常有两种模式,分别产生前景模糊或背景模糊效果。前景模糊图像通常是用安装在三脚架上的相机拍摄的,描绘的是移动的前景元素(如丝般的流水或光轨)呈现出模糊效果,而背景景观则非常清晰。背景模糊图像(也称为平移摄影)是在相机追踪移动主体时拍摄的,从而得到主体清晰而背景因相对运动而模糊的图像。这两种技术都极具挑战性,并且需要额外的设备和高超的技巧。
本文介绍了一种计算式连拍摄影系统,它运行在手拿式智能手机的相机应用程序中,只需按下快门按钮就能全自动地实现这些效果。我们的方法首先检测并分割出显著主体。我们对多帧画面中的场景运动进行追踪并对齐图像,以保持所需的清晰度并产生具有美感的运动拖影。我们拍摄一组曝光不足的连拍照片,并选择输入帧的子集,无论场景或相机的运动速度如何,这些子集都能产生长度可控的模糊拖影。我们预测帧间运动并合成运动模糊来填补输入帧之间的时间间隙。最后,我们将模糊图像与正常曝光的清晰图像合成,以保证面部或场景中几乎没有移动的区域的清晰度,并生成最终的高分辨率和高动态范围(HDR)照片。我们的系统使原本只有专业人士才能掌握的能力得以普及,让大多数普通摄影爱好者也能使用这种创意风格。

  • 图 1
    按下快门按钮时,我们的智能手机相机系统在几秒钟内捕获、处理并输出常规照片和长曝光对应的照片,如上图所示。手持拍摄的前景模糊示例如(a)所示,在没有精确跟踪的情况下拍摄的背景模糊示例如(b)所示。我们的计算长曝光摄影管线完全自动地处理这两种用例。

Introduction

手机摄影在消费者的日常生活中无处不在,并且正在逐渐取代传统摄影。通过使用连拍和后期处理技术,现代手机的成像流程能够产生非常高质量的结果,提供高动态范围色调映射、出色的低光拍摄性能并模拟景深虚化(散景)效果,而这些在以前只有使用更大、更重的相机和镜头才能实现。

尽管有这些显著的改进,但长曝光移动摄影仍然没有得到很好的处理。现有的解决方案无法帮助用户拍出移动场景元素模糊而静态场景元素清晰的效果。这种清晰与模糊的对比是一张引人入胜的照片的关键特性,而仅仅通过延长手持相机传感器的曝光时间是无法实现这种效果的。

传统的长曝光摄影通常根据场景和情况以以下两种方式之一进行。一种方法是在清晰的背景上产生前景模糊效果(例如如丝般的瀑布、光轨等),这需要使用很长的曝光时间,可能长达几秒。这就需要使用三脚架,因为即使是轻微的相机抖动也会导致不希望出现的背景清晰度损失。此外,必须在镜头上添加一个中性密度(ND)滤镜,以避免传感器曝光过度。
第二种方法称为平移摄影,它呈现出的效果是移动主体清晰,而背景由于相对于主体的运动而模糊。实现这种效果的方法是用相机追踪移动主体,同时保持快门打开,适度增加曝光时间(例如半秒),并稍微缩小光圈以避免图像曝光过度。摄影师必须尽可能精确地追踪主体的运动,以避免不希望出现的主体清晰度损失,同时还要在正确的时刻按下快门按钮。
这两种方法都需要高超的技巧、大量的练习,并且要考虑到场景的移动速度来手动选择相机快门速度才能达到理想的效果。

本文的主要贡献是一个计算式长曝光移动摄影系统,该系统有两种变体,使上述两种应用场景得以普及。它在谷歌 Pixel 6 和 7 智能手机上以一种名为 “运动模式” 的新相机模式实现,用户无需使用三脚架或镜头滤镜,也无需精确追踪或完全追踪移动主体就能轻松拍摄出这些效果。我们的方法在每种变体中都是全自动的端到端流程:用户选择希望生成前景模糊还是背景模糊效果后,只需用户按下快门按钮就能生成 1200 万像素的长曝光照片,同时补偿相机和/或主体的运动,从而保留所需的背景和主体的清晰度。整个系统的主要组成部分如下:

  • 拍摄和选帧策略,产生与场景或相机速度无关的标准化模糊拖影长度;
  • 结合注视显著性与人和宠物面部区域预测的主体检测,以及对其运动的追踪;
  • 输入图像的对齐,以消除相机抖动,在存在移动的前景元素时稳定背景,或者在产生令人满意的背景运动模糊拖影的同时消除主体运动。
  • 密集运动预测和模糊合成,跨越多个高分辨率输入帧,并生成保留高光的平滑弧形运动模糊轨迹。

此外,文章的系统架构包含多个神经网络,在计算和内存预算受限的移动设备上能够高效运行,实现了高动态范围(HDR)成像流程,仅需几秒就能生成相关的常规照片和长曝光照片。

System Overview

  • 图 2
    在这里插入图片描述
    我们的系统逐步处理原始的突发图像,在这个图表上从左到右,首先在低分辨率(8 倍下采样)下进行初始主体预测、特征跟踪、运动分析和运动预测。图像也在半分辨率(2 倍下采样)下进行处理以合成运动模糊,然后再上采样回全 1200 万像素分辨率以进行合成和色调映射得到最终结果。

文章整体的系统示意图如图 2 所示。所捕获的原始图像流通过四个阶段以两种不同分辨率逐步处理,每个阶段对应于图 2 中的一行:初始主体检测、运动分析、运动预测和渲染。
初始显著性和面部预测阶段计算用于主体检测的主要信号,生成归一化权重图。运动分析阶段负责对与检测到的主体或背景相对应的一组特征点进行追踪和对齐,并基于运动统计数据选择帧。运动预测阶段预测密集的线性核和权重图,这些图在渲染阶段用于生成跨越给定输入帧对的平滑运动模糊。最后的合成阶段对最终结果进行分层处理,同时保留最终图像中重要区域的清晰度。

前三个阶段将经过色调映射并转换为 sRGB 的图像作为输入,这些图像被下采样 8 倍至 504×376 的低分辨率。选择这种分辨率是为了在处理帧时实现低延迟,运算耗时主要由密集运动预测神经网络决定。这也确保了感受野能够覆盖输入全分辨率图像中大多数实际的运动差异。然而,最后一个阶段使用特意曝光不足的连拍原始图像,并将其转换为 16 位线性 RGB。高比特深度对于在渲染过程中保留场景的高动态范围是必要的,即避免高光过饱和和阴影中的条纹伪影。图像被下采样 2 倍,这是一种折中的做法,既能在最终结果中保留足够的细节,又能在减少内存占用的情况下运行。

增量处理循环在每次迭代时对一个额外的连拍帧进行转换和下采样,将其输入到我们流程的最后三个阶段,从而得到一个累积平均的运动模糊图像。当达到帧选择标准(通过对运动模糊拖影长度进行估计)时,循环停止。然后我们合成最终结果,同时将图像上采样回全分辨率。在流程末尾,图像会被转换为低动态范围的 8 位表示形式,通过色调映射来保留场景的高动态范围视觉外观。

Implementation

Busrt Capture

我们的相机系统以每秒 30 帧的速率拍摄画面,采用全自动光圈、快门速度和对焦设置。这些设置可能会根据画面中的场景变化进行动态调整,而且除了场景突然变化的情况外,我们的系统都能很好地运行。

在背景模糊的情况下,我们以有快速移动的近处主体的场景为目标。当按下快门按钮时,最近拍摄的帧被用作基础帧来生成常规曝光图像,因为它描绘了用户所选择的动作的顶点。然后,我们的算法可能会选择过去多达 8 个额外的帧来产生背景模糊效果。

在生成前景模糊效果时,我们以场景运动速度范围大得多的场景为目标,包括慢速和远距离移动的内容。为了产生引人注目的效果,这需要根据场景运动将拍摄时长延长至几秒。当按下快门按钮时,我们利用通过相机取景器看到的最后 5 帧快速分析场景运动统计数据,并自动确定后续拍摄时长,目的是满足我们的帧选择标准。我们使用接下来几节中描述的运动追踪和图像对齐的轻量级变体(其运行时间在 50 毫秒以内)来计算场景速度的估计值。根据这个估计值,在恒定速度假设下,我们很容易推导出能产生所需模糊拖影长度的拍摄时长。考虑到最长可达 7 秒的延长拍摄时长,我们还得出了一个帧处理速率,以便选择多达 12 个拍摄帧的均匀分布子集进行处理,在计算预算和合适的时间采样率之间取得平衡。被选中用于处理的拍摄帧被排队,以便由后续阶段立即进行并行处理,从而隐藏拍摄过程中的部分处理延迟。

Automatic Subject Detection

在背景模糊的情况下,我们希望主体固定,而其背后的世界其余部分呈现模糊效果。因此,我们会自动检测和追踪主要主体,并对输入帧进行对齐以抵消主体的运动。主体被表示为一个权重图,并用于求解反向主体运动对齐。
首先通过注意力显著性这一代理任务来预测主要主体。对于此任务,我们使用一个对移动端友好的、带有跳跃连接的 3 层 U - Net,其编码器由 15 个具有 10 个基础通道的 BlazeBlock 组成,相应的解码器由可分离卷积和双线性上采样层构成。它是从在 SALICON 数据集 上训练的一个更大的模型中提炼出来的。为了聚焦于我们信号中的显著性峰值,我们将预测值重新归一化到区间 [0, 1],并将低于阈值(我们根据经验选择 0.43)的值置零。
显著性信号往往在主体中心达到峰值,所以我们用面部信号对其进行补充,这有助于保持主体面部的清晰,这对于具有复杂关节运动的主体尤为重要。我们通过首先预测人、猫和狗的面部区域来计算面部信号,然后使用平滑阶跃衰减(smootherstep falloff)对所得区域进行羽化处理,最后用一个全主体分割对其进行掩蔽。
我们如下组合显著性和面部信号,以生成每个像素权重为𝑤 = 𝑠(1 + 𝑓) 的主体权重图,其中𝑠∈[0, 1] 是显著性信号值,𝑓∈[0, 1] 是面部信号值,随后将其重新归一化到区间 [0, 1]。

Motion Tracking

我们使用一个基于 [Grundmann 等人,2011] 的特征跟踪库来提取用于后续图像对齐的运动轨迹。运动轨迹统计数据也用于选择帧,以确定场景中何时已经捕获到足够的运动。
背景模糊中的主体跟踪需要在主体上有高浓度的轨迹,以实现稳定、高质量的对齐。作为一种延迟优化措施,我们对图像网格(每个网格单元为 5×5 像素)进行 rejection sampling,以生成密度与主体权重图成比例的特征轨迹。我们只尝试在这样的网格单元中提取特征轨迹:其中采样得到的均匀随机变量 𝑣∈[0, 1] 小于该网格位置对应的平均轨迹权重。

Image Alignment

根据特征轨迹对应关系,我们首先估计全局变换,以便将所有帧与参考帧对齐。这消除了整体相机运动,包括用于跟踪对象的手持抖动和扫动。剩余的图像对齐阶段则取决于所需的运动模糊效果:前景模糊或背景模糊。为了便于说明,我们选取一个示例场景,它可以呈现为如下两种情况之一:如图 3 所示,一辆出租车驶过繁忙的城市十字路口。

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

城市场景。上图:交通在繁忙的城市十字路口移动,前景运动向量(红色)和背景运动向量(绿色)。下图:我们的前景模糊(左)和背景模糊(右)结果。

  • 前景模糊

为了使背景尽可能清晰,我们必须考虑诸如视差、滚动快门和镜头畸变等空间效应。在应用全局变换之后,我们计算一个残差向量,它是变换后的跟踪特征与其在基准帧中对应位置之间的位置差。然后,我们利用这些残差来估计图像上顶点网格的局部细化变换。由此产生的空间变化扭曲消除了背景中的运动,同时保留了前景中的运动,从而产生如图 3(左下角)所示的清晰背景。

我们放置网格和估计局部变换的方法是类似的,但我们对各点进行均匀加权,并在局部相似性变换估计过程中对纳入的点采用硬性截止,以获得更好的性能。这种估计由每个顶点的支撑半径控制(在图 4 中显示为品红色圆圈),即特征点到顶点的最大距离,超过这个距离的特征点将不被纳入局部细化估计。我们发现,将这个半径设置为网格单元尺寸的 1.5 倍,并采用 8×6 个单元的网格尺寸,足以使局部细化变换在整个视场内平滑变化,同时又足够小,使得来自场景不同部分的不同场景对象不会相互影响。将估计出的变换应用于每个顶点,进而生成一个空间变化的网格,使任意帧的背景与参考帧的背景对齐。为了优化延迟,通过向 GPU 传递局部二维位移矢量纹理,将该网格的应用合并到下游渲染阶段。

  • 图 4
    在这里插入图片描述
    空间变化的扭曲。左上图:在一个网格顶点(橙色)的支持区域(品红色)内的背景流向量(绿色)对其局部位移(黄色)有贡献。右上图:得到的网格和空间变化的扭曲,将背景与参考帧的背景对齐。仅使用单个全局单应性变换的前景模糊结果(左下图)和使用我们的空间变化网格扭曲的前景模糊结果(右下图)。插图以 5 倍放大显示。

  • 背景模糊

在这种情况下,如图 3(右下角)所示,我们希望前景尽可能清晰。我们使用主体遮罩来选择与前景主体相对应的特征轨迹子集。以此为起点,我们进一步使用谱聚类来选择最显著的运动簇,以帮助辨别要跟踪的正确运动片段并去除异常值 [Porikli 2004]。这对于有关节运动的主体(例如跑步者,其四肢的运动与躯干不同)特别有用。
我们目标函数的目的是平衡两个目标:(1) 主体清晰度:使显著点对应关系的整体重投影误差最小化;(2) 时间平滑性:使变换后的背景运动矢量尽可能与前一时间步的运动矢量平行。

给定一对具有点对应关系 x i x_i xi x j x_j xj的帧 i i i j j j,我们定义一个相似变换,它将二维点从帧 i i i 到帧 j j j 进行均匀缩放( s j , i ∈ R 1 s_{j,i} \in \mathbb{R}^{1} sj,iR1)、旋转( R j , i ∈ S O ( 2 ) \mathbf{R}_{j,i} \in SO(2) Rj,iSO(2))和平移( t j , i ∈ R 2 t_{j,i} \in \mathbb{R}^{2} tj,iR2),如下所示:

x ^ j = s j , i R j , i x i + t j , i (1) \hat{x}_{j} = s_{j,i}\mathbf{R}_{j,i}x_i + t_{j,i} \tag{1} x^j=sj,iRj,ixi+tj,i(1)

为了简化,省略下标,目标函数可以定义为如下:

min ⁡ s , R , t λ f E f ( s , R , t ) + λ b E b ( s , R , t ) (2) \min_{s, R, t} \lambda_f E_f(s, R, t) + \lambda_b E_b(s, R, t) \tag{2} s,R,tminλfEf(s,R,t)+λbEb(s,R,t)(2)

λ f , λ b \lambda_f, \lambda_b λf,λb 是相对的权重系数, E f E_f Ef 是主体清晰度,针对前景点 x ∈ X f x \in X_f xXf 定义的,它是变换后点对应关系(使用公式 1)重投影误差的 L2 范数:

E f ( s , R , t ) = ∑ x ∈ X f ∥ x j − s R x i − t ∥ 2 (3) E_f(s, R, t) = \sum_{x \in X_f} \left \| x_{j} - sRx_i - t \right \|_2 \tag{3} Ef(s,R,t)=xXfxjsRxit2(3)

背景项 E b E_b Eb 被用作一种时间平滑先验,用于对与前一帧对中相应向量不平行的背景流向量进行惩罚。给定三个不同的帧索引 i,j 和 k 它利用向量点积作为平行性度量来定义,如下所示:

E b ( s i , k , R i , k , t i , k ) = ∑ x ∈ X b smooth L 1 ( ∣ v i , j ⋅ v j , k ∣ ∥ v i , j ∥ ∥ v j , k ∥ ) (4) E_b(s_{i,k}, R_{i,k}, t_{i,k}) = \sum_{x \in X_b} \text{smooth}_{L_1} (\frac{\left | v_{i,j} \cdot v_{j, k} \right|}{\left \| v_{i,j} \right \| \left \| v_{j,k} \right \| }) \tag{4} Eb(si,k,Ri,k,ti,k)=xXbsmoothL1(vi,jvj,kvi,jvj,k)(4)

其中 v p , q = x ^ q − x q v_{p,q} = \hat{x}_q - x_q vp,q=x^qxq 是参考帧 q 中的一个点与其来自帧 p 的变换后点对应关系之间的方向位移向量。采用 [Huber 1964] 中的平滑-L1 损失函数来防止优化过程中梯度消失。

smooth L 1 ( x ) = { 0.5 x 2 i f ∣ x ∣ < 1 ∣ x ∣ − 0.5 o t h e r w i s e (6) \text{smooth}_{L1}(x) = \left\{\begin{matrix} 0.5x^2 & if \left | x \right | < 1 \\ \left | x \right| - 0.5 & otherwise \end{matrix}\right. \tag{6} smoothL1(x)={0.5x2x0.5ifx<1otherwise(6)

不失一般性,我们选择 i =0 作为固定的参考帧索引,并在公式 4 中设置 k=j+1,以便在对帧序列进行单次正向遍历中,对每一对新的帧(j,j+1)增量式地估计变换。我们使用 Ceres 库 [Agarwal 等人,2022] 来解决这个非线性优化问题。我们分别为 λ f \lambda_f λf λ b \lambda_b λb 使用值 1 和 10,以平衡这两个误差项的影响。

未完待续:

Computational Long Exposure Mobile Photography (二)

相关文章:

论文阅读:Computational Long Exposure Mobile Photography (一)

这篇文章是谷歌发表在 2023 ACM transaction on Graphic 上的一篇文章&#xff0c;介绍如何在手机摄影中实现长曝光的一些拍摄效果。 Abstract 长曝光摄影能拍出令人惊叹的影像&#xff0c;用运动模糊来呈现场景中的移动元素。它通常有两种模式&#xff0c;分别产生前景模糊或…...

项目解决方案:多地连锁药店高清视频监控系统建设解决方案(设计方案)

​ 目录 一.项目背景 1.1背景描述 1.2需求分析 二.设计依据和建设目标 2.1设计依据 2.2建设目标 三.系统设计实现 3.1系统方案设计 3.2网络组网说明 四.建设系统特色 4.1安全性 4.2节约建设成本 4.3原有资源的再利用 4.4可扩展性 五.产品介绍 5.1概述 5.2设备…...

utf-8、pbkdf2_sha

#utf-8加密、解密 import base64 base64.b64encode(lienlien123.encode(utf-8)) bbGllbmxpZW4xMjM base64.b64decode(bbGllbmxpZW4xMjM.decode(utf-8)) blienlien123 #pbkdf2_sha加密&#xff0c;校验 # 该种密码在不同时刻会有产生不同的加密结果 # 该加密方法使用的是散列…...

Java之包,抽象类,接口

目录 包 导入包 静态导入 将类放入包 常见的系统包 抽象类 语法规则 注意事项&#xff1a; 抽象类的作用 接口 实现多个接口 接口间的继承 接口使用实例 &#xff08;法一&#xff09;实现Comparable接口的compareTo()方法 &#xff08;法二&#xff09;实现Comp…...

HarmonyOS鸿蒙开发入门,常用ArkUI组件学习(二)

书接上回&#xff0c;让我们继续来学习ArkUI的其他组件 目录&#xff0c;可以点击跳转到想要了解的组件详细内容 组件四&#xff1a;Button组件五&#xff1a;Slider组件六&#xff1a; Column & Row组件七&#xff1a;循环控制组件八&#xff1a; List 组件四&#xff1a;…...

斩!JavaScript语法进阶

一、DOM 概述 DOM 是 JavaScript 操作网页的接口&#xff0c;全称为“文档对象模型”&#xff08;Document Object Model&#xff09;。当网页被加载时&#xff0c;浏览器将网页转为一个DOM&#xff0c;并用JS进行各种操作。比如&#xff1a;改变页面中的HTML 元素及其属性&am…...

UFO:Windows操作系统的具象智能代理

近年来&#xff0c;随着AI技术的发展&#xff0c;智能代理在各种应用中扮演着越来越重要的角色。微软推出的UFO&#xff08;User-Focused Operator&#xff09;正是这样一个出色的多代理框架&#xff0c;旨在通过无缝导航和操作&#xff0c;满足用户在Windows操作系统中跨多个应…...

win10/11无休眠设置和断电后电池模式自动休眠而不是睡眠-用以省电

1、打开休眠设置选项 打开控制面板\所有控制面板项\电源选项\ 左侧的选择电源按钮的功能 默认状态没有休眠 1、管理员权限打开cmd或者power shell 2、输入一下指令&#xff0c;打开休眠选项 powercfg -hibernate on关闭后重新打开 控制面板\所有控制面板项\电源选项\左侧的选…...

【动态规划之斐波那契数列模型】——累加递推型动态规划

文章目录 第N个泰波那契数列面试题08.01.三步问题使用最小花费爬楼梯解码问题 第N个泰波那契数列 解题思路&#xff1a; 泰波那契数列的第 N 项定义为前面三项之和&#xff0c;即 T0 0, T1 1, T2 1&#xff0c;从 T3 开始&#xff0c;每一项都等于前三项的和。要找到第 N 项…...

5g通信系统用到的crc码

5g通信系统用到的crc码 关注 在5G通信系统中&#xff0c;CRC码&#xff08;循环冗余校验码&#xff09;扮演着关键角色&#xff0c;它通过执行多项式除法运算来检测数据在传输过程中是否发生错误。5G通信系统中采用了多种CRC码&#xff0c;每种码都有其独特的计算方法和校验特…...

Ubuntu-22.04 虚拟机安装

1. Ubuntu安装方式 1.1. 基于物理介质安装 光盘安装&#xff1a;通过将 Ubuntu 镜像刻录到光盘&#xff0c;在计算机 BIOS/UEFI 中设置光盘为第一启动项&#xff0c;然后按照安装程序的提示进行语言选择、分区、用户信息设置等操作来完成安装。这种方式需要有光盘刻录设备和空…...

Windows、Linux系统上进行CPU和内存压力测试

CPU和内存压力测试 1. Linux环境 Linux环境下&#xff0c;我们可以用 stress 工具进行内存、CPU等的压力测试。 【1】. stress工具说明 [kalamikysrv1 ~]$ stress --help stress imposes certain types of compute stress on your systemUsage: stress [OPTION [ARG]] ...-…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发八,使用SDLVSQT显示yuv文件 ,使用ffmpeg的AVFrame

一. AVFrame 核心回顾&#xff0c;uint8_t *data[AV_NUM_DATA_POINTERS] 和 int linesize[AV_NUM_DATA_POINTERS] AVFrame 存储的是解码后的数据&#xff0c;&#xff08;包括音频和视频&#xff09;例如&#xff1a;yuv数据&#xff0c;或者pcm数据&#xff0c;参考AVFrame结…...

HTML 标签属性——<a>、<img>、<form>、<input>、<table> 标签属性详解

文章目录 1. `<a>`元素属性hreftargetname2. `<img>`元素属性srcaltwidth 和 height3. `<form>`元素属性actionmethodenctype4. `<input>`元素属性typevaluenamereadonly5. `<table>`元素属性cellpaddingcellspacing小结HTML元素除了可以使用全局…...

css简写属性

一些属性&#xff0c;如 font、background、padding、border 和 margin 等属性称为简写属性。它们允许在一行中设置多个属性值&#xff0c;从而节省时间并使代码更整洁。 /* 在像 padding 和 margin 这样的 4 值简写语法中&#xff0c;数值的应用顺序是上、右、下、左&#xff…...

力扣刷题(sql)--零散知识点(2)

1.自定义分组后的分类统计问题&#xff08;某组内无数据却仍要展示&#xff09; 例题1&#xff1a; 查询每个工资类别的银行账户数量。 工资类别如下&#xff1a; "Low Salary"&#xff1a;所有工资 严格低于 20000 美元。"Average Salary"&#xff1a;…...

TCP是怎样工作的网络拥塞控制理论和算法部分记录

参考资料 https://github.com/ituring/tcp-book 流量控制、窗口控制和拥塞控制的关系 流量控制、窗口控制和拥塞控制的关系如图所示 窗口控制是上层的概念&#xff0c;核心思路是基于滑动窗口技术传输数据。而确定发送窗口大小的方法有流量控制和拥塞控制两种 流量控制&…...

CSRF初级靶场

靶场 针对DVWA么有防御 源码&#xff1a; <?phpif( isset( $_GET[ Change ] ) ) {// Get input$pass_new $_GET[ password_new ];$pass_conf $_GET[ password_conf ];// Do the passwords match?if( $pass_new $pass_conf ) {// They do!$pass_new ((isset($GLOBA…...

CSP/信奥赛C++刷题训练:经典差分例题(2):洛谷P9904 :Mieszanie kolorów

CSP/信奥赛C++刷题训练:经典差分例题(2):洛谷P9094 :Mieszanie kolorw 题目描述 题目译自 PA 2020 Runda 1 Mieszanie kolorw Byteasar 正准备给栅栏涂漆。他已经准备了 n n n 罐白色油漆,他把这些油漆排列成一排,从 1 1 1 到 n n n 编号。他想用这些油漆,但他不想…...

Java | Leetcode Java题解之第525题连续数组

题目&#xff1a; 题解&#xff1a; class Solution {public int findMaxLength(int[] nums) {int maxLength 0;Map<Integer, Integer> map new HashMap<Integer, Integer>();int counter 0;map.put(counter, -1);int n nums.length;for (int i 0; i < n;…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...