A Latent Transformer for Disentangled Face Editing in Images and Videos翻译

news2024/11/16 3:27:35

点击下载论文

代码地址

在这里插入图片描述
图1  我们将真实图像投影到StyleGAN生成器的潜空间,并在编码的潜码上实现连续的解纠缠属性编辑。从原始图像和投影图像中,我们可以连续编辑一系列属性,例如:“微笑”、“刘海”、“拱形眉毛”、“年龄”、“胡须”和“眼镜”。所有结果均以1024×1024的分辨率获得。

摘要

      高质量的面部图像编辑是电影后期制作行业的一个挑战性问题,需要高度的控制和身份保护。以前试图解决这个问题的工作可能会遇到面部属性的纠缠和个人身份特征丢失的问题。此外,许多算法仅限于特定的任务。为了解决这些限制,我们提出通过训练专用的潜变换网络,并在损失函数中加入明确的解纠缠和身份保留项,通过StyleGAN生成器的潜空间编辑面部属性。我们进一步引入了一种将我们的面部编辑推广到视频的想法。即使在真实(即非合成)图像和视频这等具有挑战性的情况下,我们的模型也实现了一种解纠结、可控和保持身份的面部属性编辑。我们在图像和视频数据集上进行了大量的实验,实验结果表明我们的模型在视觉质量和定量评估方面优于目前最好的方法。

1、引言

      面部属性编辑是照片修饰或电影后期制作行业的一项至关重要的任务。例如,许多演员为了美化或其他特殊化妆效果而被修饰。对于这样的任务,艺术家非常希望能够在不影响其他信息的情况下控制面部属性。因此,人脸编辑方法应该依赖于解纠缠的属性,并允许进行身份保护操作。
      早期基于深度学习的工作侧重于基于编码器-解码器的架构[8,17]。尽管最近的结果的质量有所提高,但这些方法在分辨率上受到限制,并在高分辨率图像上产生明显的伪影。此外,这些方法很难控制,因为修改一个面部属性往往会修改其他属性。
      最近,生成网络在高质量图像合成方面取得了令人印象深刻的进展[5,19,20,21]。研究表明,沿着生成模型的潜空间中的某些方向移动潜码会导致相应生成图像中视觉属性的变化[2,9,35,3,42]。这些假设对于二分属性,在潜空间中存在一个超平面,将数据分成两组。然而,这一假设有几个局限性。首先,成功的操纵只能在良好的解纠缠和线性化的潜空间中实现。虽然与图像空间相比,潜空间是解耦的,但我们在本文中表明,通过线性变换实现面部属性操作是一个非常强大且有限的假设。此外,由于这些方法是在合成图像(从潜空间中的随机点生成)上训练的,因此它们在真实图像(自然界的,“野外”照片)上的表现不太令人满意。这是一个经常被忽视但至关重要的问题。
      在这项工作中,我们解决了在真实图像上编辑面部属性的问题。为了解决上述限制,我们提出了一个转换网络来导航生成模型的潜空间。我们将真实图像投影到最先进的图像生成器StyleGAN的潜空间上,并根据投影的潜码训练我们的模型。转换网络在真实图像上生成解纠缠、身份保留和可控的属性编辑结果。这些关键优势使我们能够将我们的方法扩展到视频的情况,其中稳定性和质量至关重要的。为此,我们介绍了一种在高分辨率视频上实现稳定和真实的面部属性编辑的思路。
      我们的贡献总结如下:我们提出了一种用于面部属性编辑的潜变换网络,在具有良好身份保留的真实图像上实现了解纠缠和可控的操作。我们的方法可以对真实图像进行高效连续的属性编辑。我们引入了一种将人脸编辑推广到视频的思想,并在高分辨率视频上实现生成真实和稳定的操作。
      本文的其余部分组织如下:在第2节中,我们总结了面部属性编辑、解纠缠表示和视频编辑方面的相关工作。第3节介绍了我们的潜变换网络和训练细节。在第4节中,我们介绍了在真实图像上解纠缠属性编辑的实验结果,并与目前最好的技术方法进行定性和定量比较。我们进一步介绍了在真实图像上进行一系列属性编辑的结果,并对损失成分的选择进行了消融研究。在第5节中,我们介绍了将面部属性编辑应用于视频的思想,并展示了在视频序列上的实验结果。我们在第6节中总结了本文。

2、相关工作

面部属性编辑

      以前关于面部属性的工作非常广泛,主要集中在分辨率有限的图像上。Up church等人的一种基于优化的方法[38]表明,通过在预训练的特征空间中插入深度特征,可以实现语义转换,如老化或添加面部刘海。另一种方法为属性编辑任务训练前馈模型。Attribute2image[43]提出训练条件变化自编码器以生成条件属性的图像。随着生成网络在图像合成中的成功,许多研究[8,15,24,25,41]探索了使用对抗学习训练自动编码器的可能性。FaderNet[24]和StarGAN[8]提出将自编码器潜空间中的不同属性解纠缠,以目标属性为条件生成输出图像。AttGAN[15]和STGAN[25]通过放松对目标属性的严格约束,增强了属性的灵活转换,以提高图像质量。一些研究调查了处理高分辨率图像的不同可能性。CooGAN[7]提出了一种基于图像块的局部-全局框架来处理图像块中的HR图像。观察到生成网络在高质量图像合成中的巨大进步,Viazovetskyi等人[39]使用StyleGAN2[21]生成的合成图像训练了pix2pixHD模型[40]用于单属性编辑。

解纠缠表征。

      在StyleGAN[20]的论文中,作者研究了混合生成图像上的两个潜码的影响(称为风格混合),并发现每个子集控制图像上有意义的高级属性。受此启发,一些研究试图探索在潜空间中的生成网络(特别是StyleGAN)的解纠缠表征。Image2StyleGAN++[2]一种基于优化的方法通过在StyleGAN的激活特征上应用掩码插值,对图像执行局部编辑和全局语义编辑。Collins等人[9]对StyleGAN的激活层进行了k均值聚类,并检测到语义对象的分离,这使得能够对生成的图像进行进一步的局部语义编辑。对于高级语义编辑,Ganalyze[13]在BigGAN[5]的潜空间中学习了一个流形,以生成不同记忆的图像。InterFaceGAN[35]提出在潜空间中学习二分类的超平面,可以使用该超平面通过简单的插值来操纵目标面部属性。在他们的工作之后,StyleSpace[42]对StyleGAN[21]的潜空间进行了定量研究,并实现了对视觉属性的高度局部化和解纠缠控制。StyleFlow[3]通过训练条件归一化流实现了对潜空间的条件探索。StyleRig[36]介绍了一种方法,通过3D可变形面部模型,对预训练和固定的StyleGAN提供类似面部操作的控制。Yao等人[44]提出以非线性方式导航StyleGAN的潜空间,以实现面部属性的分离操作。为了找到解纠缠的方向,一些研究试图使用主成分分析(PCA)来分析生成网络的潜空间。PCAAE[31]提出了一种PCA自编码器,其潜空间在训练期间逐渐增加,并导致将固有数据属性分离为不同的组件。GANSpace[18]在生成网络的潜空间中执行PCA,探索主要方向并发现可解释的控制。上述方法通常侧重于合成图像的处理,因为将真实图像投影到StyleGAN的潜空间仍然是一个挑战。Image2StyleGAN使用优化方法将真实图像投影到StyleGAN的扩展潜空间,但其特征与原始潜空间不同,因此不适合操作。最近的一些工作[27,32,34,46]试图将编码器与StyleGAN模型一起训练。尽管图像无法完美重建,但我们看到了使用StyleGAN潜空间的解纠缠特性对真实图像进行属性编辑的可能性。

基于视频的面部编辑

      最近关于面部视频合成的工作主要解决两个问题:1)从草图视频或参考图像(通常称为面部再现)生成面部视频序列,2)视频上的面部属性编辑。Garrido等人[12]提出了一种基于图像的再现系统,以实现视频中的人脸替换。Face2Face[37]提出了一种使用非刚性基于模型的绑定来实时再现目标视频的方法。Averbuch Elor等人[4]提出了一种通过驾驶视频制作静态肖像动画的技术,但仅限于轻微的运动。Kim等人[22]提出将生成神经网络用于肖像视频的再动画化,这不仅可以转换面部表情,还可以转换整个上身和背景。这些方法中的大多数只处理低质量的视频拍摄。一个流行的开源deepfake系统DeepFaceLab[30]引起了广泛关注。结合了人工人脸检测和标志提取工具等生产力工具,他们的想法是在视频上生成高保真的人脸交换结果。为了直接在视频上实现面部属性编辑,Rav Acha等人[33]建议将视频帧转换为“展开马赛克”,将马赛克绘制并重新渲染为视频。尽管结果令人满意,但计算每个视频镜头的马赛克是一个漫长的过程,需要平滑的变化才能成功构建。Duong等人[10]提出了一种使用深度强化学习在视频序列中生成年龄渐进的面部图像方法。最近的许多工作使用深度学习技术在静止图像上进行面部属性编辑。然而,到目前为止,只有少数作品解决了基于视频的属性编辑问题[45]。

3、方法

      在本节中,我们提出了一个框架,通过StyleGAN的潜空间编辑真实图像中的人脸和视频中的人脸。

3.1、概述

      对于给定的真实图像I,我们假设可以计算与生成器G相关的潜在表征 w ∈ W w∈\mathcal W wW。我们训练了一种反演方法,使I≈G(w)。我们的目的是在空间中训练一个潜转换器T以编辑投射图像G(w)的单个属性。由T(w)合成的图像用G(T(w))表示。它与G(w)共享除了要操纵的目标属性之外的所有属性。
      为了训练潜变换器,我们提出了一个训练框架,该框架仅计算潜空间 W \mathcal W W中的所有损失。设 a 1 , a 2 , … , a N {a_1,a_2,…,a_N} a1a2aN是一组图像属性,其中N是所考虑的属性的总数。对于每个属性 a k a_k ak,训练不同的 T k T_k Tk。为了预测潜码的属性,我们使用潜分类器 C : W → { 0 , 1 } N C:\mathcal W→ \{0,1\}^N C:W{01}N。C是预先训练的,在训练 T k T_k Tk的过程中冻结其权重。我们训练 T k T_k Tk有以下三个目标:

  • 为了确保 T k T_k Tk有效地操纵属性 a k a_k ak,我们最小化了二分类损失: L c l s = − y k l o g ( p k ) ) − ( 1 − y k ) l o g ( 1 − p k ) , ( 1 ) \mathcal L_{cls} = -y_k log (p_k) ) -(1-y_k) log (1- p_k), \quad\quad\quad\quad\quad(1) Lcls=yklog(pk))(1yk)log(1pk),(1)其中 p k = C ( T k ( w ) ) [ k ] p_k = C(T_k(w))[k] pk=C(Tk(w))[k]是目标属性的概率 y k ∈ 0 , 1 y_k ∈ {0, 1} yk0,1是期望标签。
  • 为了确保其他属性 a i , i ≠ k a_i,i\not=k aii=k保持不变,我们应用了属性正则化项: L a t t r = ∑ i ≠ k ( 1 − γ i k ) E w , i [ ∣ ∣ p i − C ( w ) [ i ] ∣ ∣ 2 ] , ( 2 ) \mathcal L_{attr} =\sum_{i\not=k}(1- γ_{ik}) \Bbb E_{w,i}[||p_i - C(w)[i]||_2],\quad\quad\quad\quad\quad(2) Lattr=i=k(1γik)Ew,i[∣∣piC(w)[i]2],(2)其中 γ i k γ_{ik} γik a i a_i ai和目标属性 a k a_k ak之间在训练数据集上测量的绝对相关值。该正则化项基于相关性进行加权,以防止与目标自然相关的属性受到过度约束,即“胖”和“双下巴”。
  • 为了确保人的身份被保留,我们进一步应用潜码正则化: L r e c = E w [ ∣ ∣ T ( w ) − w ∣ ∣ 2 ] . ( 3 ) \mathcal L_{rec} = \Bbb E_w[||T(w) - w||_2]. \quad\quad\quad\quad\quad(3) Lrec=Ew[∣∣T(w)w2].(3)目标总损失为: L = L c l s + λ a t t r L a t t r + λ r e c L r e c , ( 4 ) \mathcal L = \mathcal L_{cls} + λ_{attr}\mathcal L_{attr} + λ_{rec}\mathcal L_{rec}, \quad\quad\quad\quad\quad(4) L=Lcls+λattrLattr+λrecLrec,(4)其中 λ a t t r λ_{attr} λattr λ r e c λ_{rec} λrec是平衡每个损失的权重。

3.2、训练模型

      为了在真实图像上实现属性编辑,我们首先需要计算StyleGAN的潜空间中对应的潜码。传统的生成网络将随机向量作为第一层的输入,StyleGAN与传统的生成网络不同,他具有不同的设计,生成器将常张量作为输入,而每个卷积层输出由样式代码通过自适应实例归一化层控制[16]。高斯随机潜码 z ∈ Z z∈\mathcal Z zZ首先通过映射网络得到中间潜码 w ∈ W w∈\mathcal W wW,该中间潜码通过学习仿射变换进一步专门化为风格码y。给定一个目标图像x,在 W \mathcal W W中找到相应的潜码仍然很困难,重建的质量也不是完全令人满意。Image2StyleGAN[1]进一步计算扩展潜空间 W + \mathcal W^+ W+中的潜码,而原始设置要求它们相同。因此,从 W + \mathcal W^+ W+中获得的潜码能更好地重建目标图像。
      在我们的方法中,我们在潜空间 W + \mathcal W^+ W+中训练潜变换器T,这是专门为投射真实图像的潜码而设计的。为了准备训练数据,我们使用Richardson等人提出的预训练StyleGAN编码器,计算CelebA HQ数据集[19]中每个图像的 W + \mathcal W^+ W+潜码。[34]。结合每个图像的注解,我们获得“潜码标签”对作为我们的训练数据。

潜分类器

      为了预测可操纵的潜码的属性,我们在“潜码-标签”对上训练属性分类器C。分类器由三个全连接层和ReLU激活层组成(ReLU激活层在三个全连接层中)。C在潜变换器的训练过程中是固定的。

潜变换器

      给定潜码 w ∈ W w∈\mathcal W wW,潜变换器T生成单个属性修改的方向,其中变化量由缩放因子α控制。网络用单层线性变换f表示: T ( w , α ) = w + α ⋅ f ( w ) . ( 5 ) T(w, α) = w + α · f(w). \quad\quad\quad\quad\quad(5) T(w,α)=w+αf(w).(5)在训练期间,缩放因子α根据输入潜码的目标属性的概率p进行设置(p<0.5时为1 - p,p>0.5时为-p)。在测试时,α可以从[1,1]中采样,或者根据所需的变化量将其设置在此范围之外。
在这里插入图片描述
图2  视频操作流程。每个输入帧都被单独裁剪并与面部图像对齐。预训练的编码器[34]通常将面部图像编码到StyleGAN[21]的潜空间 W + \mathcal W^+ W+中。所获得的潜码由所提出的潜变换器T处理以实现属性编辑。StyleGAN进一步解码操纵的潜码以生成操纵的面部图像,这些图像与原始输入帧混合以获得输出帧。

3.3、视频操作

      在本节中,我们提出了一种将图像编辑方法应用于视频的想法。编码过程确保两个连续帧的编码潜码彼此相似。因此,我们可以使用投影到StyleGAN的潜空间的帧来重建面部视频,这为下一个操作步骤提供了基础。由于我们提出的潜变换器的稳定性,操纵不会影响潜码之间的一致性,并在投影帧上生成稳定的编辑。图2显示了我们提出的流程的概况。该流程包括三个步骤:预处理、图像编辑和无缝克隆。

预处理

      为了在StyleGAN的潜空间中编辑视频,我们首先根据StyleGAN设置从帧中提取面部图像。我们按照FFHQ数据集[20]的预处理步骤裁剪并对齐面部周围的每个帧,StyleGAN在该数据集上进行预处理。对于面部对齐,我们使用最先进的方法在每个帧上独立地检测标志[6]。为了避免抖动,我们进一步使用两个连续帧之间的光流和沿着整个序列的高斯滤波来处理标志。所有帧都被裁剪并对齐,以使眼睛位于中心,并将大小调整为1024×1024。

图片编辑

      在这一步中,我们将我们的操纵方法应用于已处理的面部图像。使用预训练编码器[34]将每个帧编码到StyleGAN的潜空间。编码后的潜码由所提出的潜变换器处理以实现属性编辑。StyleGAN进一步解码操纵的潜码以生成操纵的面部图像。

无缝克隆

      我们使用泊松图像编辑方法[29]将修改后的人脸与原始输入帧混合。为了仅混合面部区域,我们使用从检测到的面部标志获得的分割掩模。

3.4、实施细节

      我们探索了在FFHQ数据集[20]上预训练的StyleGAN2[21]的潜空间中解纠缠的操纵。在本文中,我们使用最新的StyleGAN2进行了所有实验。为了简单起见,当我们提到StyleGAN时,它指的是最新版本StyleGAN2。为了准备训练数据,我们使用预训练编码器[34]将CelebA HQ[19]的图像投影到StyleGAN的潜空间 W + \mathcal W^+ W+,并获得相应的潜码。CelebA HQ包含30K张分辨率为 102 4 2 1024^2 10242的人脸图像,每张图像标注40个面部属性。我们为每个面部属性训练单独的潜变换器。
      为了预测潜码上的属性,我们在“潜码-标签”对上训练一个潜分类器,这在潜变换器的训练过程中是固定的。该模型被设计为同时预测全部40个属性,并使用二进制交叉熵损失函数进行训练。
      对于潜转换器的训练,我们将90%的准备数据作为训练集,并将模型训练100K次迭代,批量大小为32。平衡每个损失的权重设置为 λ a t t r = 1 和 λ r e c = 10 λ_{attr}=1和λ_{rec}=10 λattr=1λrec=10。我们使用Adam优化器[23],学习率为0.001, β 1 = 0.9 , β 2 = 0.999 β_1=0.9,β_2=0.999 β1=0.9β2=0.999

4、实验(略)

5、结论和未来工作

在本文中,我们提出了一种通过StyleGAN的潜空间在真实图像和视频中执行面部属性编辑的潜转换网络。与其他方法相比,我们的方法产生了更具现实感的操纵,具有更好的解纠缠和身份保护。我们已经将我们的方法扩展到视频的情况,实现了稳定和一致的修改。据我们所知,这是第一个在高分辨率视频上呈现稳定面部属性编辑的工作。未来的一些工作可以致力于提高该方法的适用性和视频性能。特别是,由于StyleGAN在生成侧姿态中的面部方面存在困难,因此该方法难以处理侧姿态。这可以通过将StyleGAN编码器与生成器联合训练,或者使用姿势多样的更好的图像训练改进的StyleGAN生成器来解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式对象存储设计原理

保存像图片、音视频这类大文件就是对象存储。不仅有很好的大文件读写性能,还可通过水平扩展实现近乎无限容量,并兼顾服务高可用、数据高可靠。 对象存储“全能”,主要因,对象存储是原生分布式存储系统,相对于MySQL、R…

[Linux]yum安装工具和vim编辑器

🥁作者: 华丞臧. 📕​​​​专栏:【LINUX】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文…

每日一问-ChapGPT-20230101-关于新年的规划

文章目录每日一问-ChapGPT系列起因每日一问-ChapGPT-20230101-关于新年的规划优秀的人,新年之初做哪些规划疫情时代,如何更好的保护好自己有哪些运动可以提升抵抗力冥想的具体实现步骤为什么制定了年度规划但往往完成不了如何克服看手机刷视频的习惯当日…

聊聊八卦,当年的顶流明星事件是如何把公司的缓存架构“击垮”的?

V-xin:ruyuan0330 获得600页原创精品文章汇总PDF 目录 一、为什么要用缓存集群二、20万用户同时访问一个热点缓存的问题三、基于流式计算技术的缓存热点自动发现四、动加载为JVM本地缓存五、限流熔断保护六、总结 一、为什么要用缓存集群 这篇文章,咱…

数值优化之基本概念

本文ppt来自深蓝学院《机器人中的数值优化》 目录 1 推荐书单 2 优化问题的基本范式 3 数值优化在机器人领域的应用 1 推荐书单 对于英语阅读有困难的同学可以看第一本书,对于最优化的介绍也是比较详细的。 这是第一本书的ppt链接最优化:建模、算法…

【LDF】线性判别函数(三)

松弛方法 学习准则 在感知函数准则中, 目标函数中采用了 −aTy-\mathbf{a}^T \mathbf{y}−aTy 的形式。实际上有很多其它准则也可以用于感知函数的学习。线性准则 Jp(a)∑y∈Y(−aTy)J_p(\mathbf{a})\sum_{\mathbf{y} \in Y}\left(-\mathbf{a}^T \mathbf{y}\right) Jp​(a)y∈…

MP中定义全局常量用于xml的判断

1.普通方式 mybatis-plus.configuration.variables.secretFilterSwitch0 yml的方式 mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.demo configuration: variables: userId: 456132465 userName: 李四 配置完成后在代码…

NLP论文RoFormer(含源码)中文解读:具有旋转式位置嵌入的增强型transformer模型(一场相对革命)

目录 1、论文与源码2、摘要介绍3、展开解读3.1、匹配或超过了目前可用于将位置信息注入变换器的所有其他方法3.2、模型思想3.3、公式推导3.4、源码解释GPT-NeoX(PyTorch)网状变压器 JAX (JAX)4、 对比实验参考文献1、论文与源码 RoFormer匹配或超过了目前可用于将位置信息注…

分享76个PHP源码,总有一款适合您

链接:https://pan.baidu.com/s/1dC6_-CLs_qSyNnKEmno0Pg?pwd6666 提取码:6666 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。 UTForum社区论坛 v2.5 响应式健身房信息展…

小波分析—— 3. 实现一个简单的Haar小波

由于小波在应用形式上与卷积很相似,所以如果你有需要,可以查看我以前写过的内容: 信号采样基本概念 —— 冲激函数卷积计算——1. 关于卷积的基本概念卷积计算——2. 一些常用于图像的卷积核与应用 另外常见的信号处理工具,傅里…

Unity脚本(三)

视频教程:https://www.bilibili.com/video/BV12s411g7gU?p128 目录 Time Prefab Animation Time Time.time:自应用程序启动以来,每帧的开始时间(只读) Time.deltaTime:每帧间隔,或说完…

SpringData

文档:D:\springdata SpringData是一个用来简化dao层开发的框架.在保证了各个底层存储特性同时,提供了一套统一的数据访问API.它可以很好的支持常用的关系型数据库和非关系型数据库. 使用SpringData做为dao层开发技术,将大大简化代码,而且其API比各个技…

【力扣周赛#326】6279.数组乘积中的不同质因数数目+6196.将字符串分割成值不超过K的子字符串+6280.范围内最接近的两个质数

目录 6278.统计能整除数字的位数 - 简单ac 6279.数组乘积中的不同质因数数目 - 质因数 6196.将字符串分割成值不超过K的子字符串 - 贪心 6280.范围内最接近的两个质数 - 质数筛 贪心 6278.统计能整除数字的位数 - 简单ac 6278. 统计能整除数字的位数 class Solution {pu…

aws codebuild 配置codecommit更新触发和squid正向代理

本文主要讨论如何通过监听codecommit仓库自动触发codebuild的构建,以及为codebuild配置正向代理 通过codecommit更新触发codebuild codecommit触发器相关 每个codecommit最多配置10个触发器 sns触发器 为sns创建lambda函数订阅,在lambda日志中查看s…

一个例题,了解包装类

下列代码输出什么,为什么? public class Test3 {public static void main(String[] args) {Integer a1 100;Integer a2 Integer.valueOf(100);Integer a3 new Integer(100);System.out.println(a1 a2);System.out.println(a1 a3);System.out.println(a1.equals(a3));Sys…

分离编译、类型萃取、变参模板

分离编译 一个程序由若干个源文件共同实现,每个源文件单独编译生成目标文件,最后将所有的目标文件链接起来形成单一可执行文件的过程称之为分离编译模式。模板不支持分离编译 编译器报的这种错误属于链接性错误,也就是当程序预处理、编译、汇…

Sutherland–Hodgman 算法介绍(简单易懂)

目录 一、算法介绍 二、算法描述 三、计算细节补充 四、算法总结 一、算法介绍 我们使用Sutherland–Hodgman算法来裁剪多边形的边,一般是给你一个多边形顶点序列(P1,P2,P3,P4,…Pn)让你裁剪,最终裁剪掉裁剪多边形的外部部分(下图黑框就是裁剪多边形…

大中型政企机构网络安全建设发展趋势研究报告

声明 本文是学习大中型政企机构网络安全建设发展趋势研究报告. 下载地址而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 研究背景 大中型政企机构是网络安全保护的重中之重,也是国内网络安全建设投入最大,应用新技术、新产品最…

Proteus8仿真:51单片机25AA020A(SPI接口EEPROM)的使用

51单片机25AA020A实验内容25AA020A引脚功能SPI信号模拟8位写8位读EEPROM读写函数EEPROM写使能EEPROM写一个Byte实验程序例程main.c工程文件Microchip的25AA020A是一个2Kbit串行电可擦除可编程只读存储器(EEPROM)。内存可以通过一个简单的串行外围接口&am…

第三十讲:神州路由器路由重分发配置

RIP和OSPF协议是目前应用最广泛的路由协议,两种协议交接的场合也很多见,两种协议的重分布是比较常见的配置。主校区原来所采用的网络协议为OSPF,而分校区采用的路由协议是RIP,采用RIP和OSPF重分发技术可以解决此问题。 实验拓扑图…