1.Matlab像处理系列——插值算法和像配准
2.Catlike Coding Custom SRP学习之旅——11Post Processing
3.Live2D动画引擎的双线射实图形学原理及实现
4.RoI Pooling 系列方法介绍(文末附源码)
5.双线性映射在密码学中的使用
Matlab像处理系列——插值算法和像配准
在Matlab的图像处理系列中,我们首先探讨插值算法,性映现源这是双线射实在处理几何变换时的关键技术。主要有两种主要方法:向前映射和向后映射。性映现源向前映射逐像素转移,双线射实而向后映射则需要对输出像素进行插值处理,性映现源捕获指标源码当它们不落在输入图像的双线射实整数坐标位置时。
插值的性映现源基本类型包括最近邻插值,它取输出像素最邻近采样点的双线射实灰度值作为近似值。双线性插值(一阶插值)则计算2x2邻域内的性映现源像素加权平均,如计算单位正方形内任意点的双线射实灰度值。然而,性映现源高阶插值如三次插值则采用卷积,双线射实利用更复杂的性映现源函数如sin(x)/x来提高平滑性和精度,减少细节丢失和斜率不连续性的双线射实影响。
图像配准是另一关键技术,它通过将多幅图像对准同一场景。Matlab提供了cpselect函数,允许用户交互式地选择基准点,确定空间变换关系。fitgeotrans函数则用于拟合这些控制点,计算出所需的几何变换,以实现图像的精确对齐。
最后,Matlab提供了插值和图像配准的仿真源码,这些代码实例展示了如何在实际操作中应用这些算法,为理解并实现图像处理提供了实用的工具和实践指导。
Catlike Coding Custom SRP学习之旅——Post Processing
来到了后处理环节,这是渲染管线中关键的一环。后处理技术能够显著提升画面效果,比如色调映射、Bloom、抗锯齿等,都能在后处理中实现。除了改善整体画面效果,后处理还能用于实现描边等美术效果。本文将主要介绍后处理堆栈和Bloom效果等内容。vwd源码
考虑到篇幅和工作量,本文将从第4章节后半部分开始,以及未来的章节,主要提炼原教程的内容,尽量减少篇幅和实际代码。在我的Github工程中,包含了对源代码的详细注释,需要深入了解代码细节的读者可以查看我的Github工程。对于文章中的错误,欢迎读者批评指正。
以下是原教程链接和我的Github工程:
CatlikeCoding-SRP-Tutorial
我的Github工程
1. 后处理堆栈(Post-FX Stack)
FX,全称是Special Effects,即特殊效果,也称为VFX(Visual Special Effects),即视觉特效。参考维基百科,视觉效果(Visual effects,简称VFX)是在**制作中,在真人动作镜头之外创造或操纵图像的过程。游戏很多技术都会沿用影视技术上的一些技术,比如在色调映射时,可以采用ACES(**色调映射)等。关于Special Effects为什么叫FX,而不是SE,网上似乎只是因为FX谐音Effects,让人不知道从哪吐槽。
通常来说,因为后处理会包含很多不同的效果,如色调映射、Bloom、抗锯齿等等,因此后处理在渲染管线中的结构往往是一个堆栈式的结构(URP中也是如此,使用了Post Process Volume)。因此,在本篇中,我们将搭建这样一个堆栈结构,kosa源码并实现Bloom效果。
1.1 配置资源(Settings Asset)
首先,我们定义PostFXSettings资源,即Scriptable Object,将其作为渲染管线的一项可配置属性,这样便于我们配置不同的后处理堆栈,并可以方便地切换。
1.2 栈对象(Stack Object)
类似于Light和Shadows,我们同样使用一个类来存储包括Camera、ScriptableRenderContext、PostFXSettings,并在其中执行后处理堆栈。
1.3 使用堆栈(Using the Stack)
在进行后处理前,我们首先需要获取当前摄像机画面的标识RenderTargetIdentifier,RenderTargetIdentifier用于标识CommandBuffer的RenderTexture。在这里,我们使用一个简单的int来标识sourceRT。
对于一个后处理效果而言,其实现过程说来很简单,传入一个矩形Mesh(其纹理即当前画面),使用一个Shader渲染该矩形Mesh,将其覆盖回Camera的RT上,我们通过Blit函数来实现该功能。
1.4 强制清除(Forced Clearing)
因为我们将摄像机渲染到了中间RT上,我们虽然会在每帧结束时释放该RT空间,但是基于Unity自身对RT的管理策略,其并不会真正地清除该RT,因此我们在下一帧时,该RT中会留存上一帧的渲染结果,导致了每一帧画面都是在前一帧的结果之上绘制的。
1.5 Gizmos
我们还需要在后处理前后绘制不同的Gizmos部分,这部分略~
1.6 自定义绘制(Custom Drawing)
使用Blit方法绘制后处理,实际上会绘制一个矩形,也就是2个三角面,即6个顶点。但我们完全可以只用一个三角面来绘制整个画面,刀剑源码因此我们使用自定义的绘制函数代替Blit。
1.7 屏蔽部分FX(Don't Always Apply FX)
目前,我们对于所有摄像机都执行了后处理。但是,我们希望只对Game视图和Scene视图摄像机进行后处理,并对不同Scene视图提供单独的开关控制。很简单,通过判断摄像机类型来屏蔽。
1.8 复制(Copying)
接下来,完善下Copy Pass。我们在片元着色器中,对原画面进行采样,并且由于其不存在Mip,我们可以指定mip等级0进行采样,避免一部分性能消耗。
2. 辉光(Bloom)
目前,我们已经实现了后处理堆栈的框架,接下来实现一个Bloom效果。Bloom效果应该非常常见,也是经常被用于美化画面,其主要作用就是让画面亮的区域更亮。
2.1 Bloom金字塔(Bloom Pyramid)
为了实现Bloom效果,我们需要提取画面中亮的像素,并让这些亮的像素影响周围暗的像素。因此,需要首先实现RT的降采样。通过降采样,我们可以很轻易地实现模糊功能。
2.2 配置辉光(Configurable Bloom)
通常来说,我们并不需要降采样到很小的尺寸,因此我们将最大降采样迭代次数和最小尺寸作为可配置选项。
2.3 高斯滤波(Gaussian Filtering)
目前,我们使用双线性滤波来实现降采样,这样的结果会有很多颗粒感,因此我们可以使用高斯滤波,并且使用更大的源码清单高斯核函数,通过9x9的高斯滤波加上双线性采样,实现x的模糊效果。
2.4 叠加模糊(Additive Blurring)
对于Bloom的增亮,我们直接将每次降采样后的Pyramid一步步叠加到原RT上,即直接让两张不同尺寸的以相同尺寸采样,叠加颜色,这一步也叫上采样。
2.5 双三次上采样(Bicubic Upsampling)
在上采样过程中,我们使用了双线性采样,这样可能依然会导致块状的模糊效果,因此我们可以增加双三次采样Bicubic Sampling的可选项,以此提供更高质量的上采样。
2.6 半分辨率(Half Resolution)
由于Bloom会渲染多张Pyramid,因此其消耗是比较大的,其实我们完全没必要从初始分辨率开始降采样,从一半的分辨率开始采样的效果也很好。
2.7 阈值(Threshold)
目前,我们对整个RT的每个像素都进行了增亮,这让这个画面看起来过曝了一般,但其实Bloom只需要对亮的区域增亮,本身暗的地方就不需要增亮了。
2.8 强度(Intensity)
最后,提供一个Intensity选项,控制Bloom的整体强度。
结束语
大功告成,我们在渲染管线中增加了后处理堆栈,以及实现了一个Bloom效果,其实在做完这篇之后,我觉得这个渲染管线才算基本上达成了大部分需要的功能,也算是一个里程碑吧。
Live2D动画引擎的图形学原理及实现
初次接触Live2D,是通过群聊,直观感觉动画奇特且粗糙,难以理解为何能大受欢迎。然而,经过一段时间的观察与思考,发现其独特的魅力,进而萌生出个人制作Live2D的想法。这并非指制作Live2D模型,而是实现其核心功能,包括动画骨骼、动作追踪、网格建立与物理模拟,直至图元光栅化。
看似复杂的项目,实际上,实现过程经过数月的投入,也并非难以企及。为了便于调试,绘制了一个简单的用于测试的人设,利用专业绘图软件sai完成。制作流程包括线稿绘制、细节调整、分层导出为独立的PNG等。准备工作完成后,启动开发环境Visual Studio,正式开始Live2D的制作之旅。
首先,回顾图形学基础,理解图元结构、渲染流程与关键技术。图元填充算法,如扫描线填充,是实现Live2D动画的关键步骤。在加载图像至项目中后,最终显示为一系列图元的集合。为了提高渲染质量,引入双线性插值滤波,对纹理映射进行优化。
网格建立是另一个挑战,Delaunay三角剖分成为了解决方案。遵循三角剖分定义,确保三角面不相交且满足特定条件。在完成Delaunay三角剖分后,每个图层加载并绑定网格,为后续动画编辑奠定基础。
紧接着,讨论到动画系统,即骨骼动画。每个图层被赋予关键节点,所有顶点围绕节点进行旋转、平移和缩放,形成骨骼系统。动画编辑依赖节点操作,实现一系列矩阵级联,驱动模型动作。
为了模拟现实中的物理行为,引入弹性节点概念,对柔软部位进行物理模拟。通过简化模型,每个顶点与节点关联,弹性系数控制顶点运动规律。最后,实现动作追踪功能,依据输入完成特定追踪动作,如跟随鼠标运动。
整个项目的核心渲染、骨骼框架与额外的物理模拟,代码量并不庞大,约2-3千行,开发周期在2周左右。然而,配套编辑器的开发耗时5个月,远超预期。制作过程虽未带来太多技术突破,但回顾整个项目,涉及知识与本科课程内容相似,较为轻松。
所有核心与配套源代码已开源,欢迎访问 PainterEngine.com 获取更多信息与支持。如果你喜欢这个项目,不妨给予star。最后,分享一段个人制作的Live2D动画作为收尾。
RoI Pooling 系列方法介绍(文末附源码)
本文为您介绍目标检测任务中的重要手段——RoI Pooling及其改进方法。RoI Pooling最初在 Faster R-CNN 中提出,旨在将不同尺寸的区域兴趣(RoI)投影至特征图上,通过池化操作统一尺寸,方便后续网络层处理,同时加速计算过程。接下来,我们将探讨RoI Pooling的局限性以及其改进方法RoI Align和Precise RoI Pooling的特性。
RoI Pooling存在量化误差问题,导致精度损失。为解决这一问题,RoI Align应运而生,它在Mask R-CNN中提出,通过取消量化操作,实现无误差的区域池化。与RoI Pooling不同,RoI Align在计算时仅需设置采样点数作为超参数,使得操作更为灵活。具体操作中,RoI Align将RoI映射至特征图,划分区域时保持连续,通过双线性插值计算中心点像素值,最后取每个区域最大值作为“代表”。这种改进方法消除了量化误差,提高了精度。
针对RoI Pooling和RoI Align存在的超参数设置问题,Precise RoI Pooling提出了无需超参数的解决方案。在计算过程中,Precise RoI Pooling通过计算区域积分并取均值,代替了最大值池化,不仅消除了量化误差,还使得每个像素点对梯度贡献均等,避免了“浪费”大部分点的现象。这一改进使得网络对输入的敏感度更加均匀,提高了模型的稳定性和泛化能力。
总结而言,RoI Pooling、RoI Align和Precise RoI Pooling在目标检测领域中各有特点,分别针对精度、灵活性和均匀性提出了解决方案。实践操作时,应根据具体需求和场景选择最合适的算法,以达到最优的检测效果。本文提供的源码链接,包括自己实现的RoI Pooling和RoI Align,以及原作者的Precise RoI Pooling版本,旨在为学习和研究提供参考资源。
双线性映射在密码学中的使用
双线性映射在密码学中的使用
近年来,双线性映射在身份认证与零知识证明领域的应用日益广泛。基于库PBC的零知识证明流程的实现,将为您详细解析这一过程。本文首先针对库的下载、编译与使用进行说明,针对不同操作系统的实践尝试。考虑到Windows下的编译挑战,Ubuntu被选为实现方案的载体。
一、库的准备与实践
在Linux环境下,借助PBC库实现密码学功能较为顺畅。在Windows系统上,需将其编译为适用于操作系统的可执行文件。下载和安装MinGW,利用其集成的命令行工具实现库的依赖安装。接着,通过msys.bat实现Linux式的模拟运行环境。下载GMP源码、配置与编译,生成用于库实现所需的libgmp.a静态库及gmp.h头文件。在指定目录下下载PBC源码,同时将先前准备的lib和头文件放置于其所在目录,确保库的完整集成。尽管PBC编译要求Linux系统,本文转移至Ubuntu下展开实践。
二、Ubuntu平台下操作指南
针对Ubuntu环境下的操作,首先确保安装Python 3.x版本,通过apt-get命令实现m4、flex、bison以及ssl-dev的安装。随后,下载GMP库、OpenSSL库、PBC库及最新的charm-crypto源码。经过以上步骤,动态库的构建与成功运行得以实现。
三、基于双线性映射的承诺方案开发
本文通过实际代码的编写,展示如何以双线性映射为基础构建一个简单的承诺方案。具体代码段落在此省略,其旨在通过PBC库实现零知识证明流程的构建,为密码学领域提供实操指导。
吳子嘉指稱陳時中「靠疫苗A了1億美元」 法院判賠300萬
开课吧源码_开课吧web全栈视频资源
libreoffice源码解析
apk打包 源码_apk打包源码
民進黨正國會召開派系會議 立委陳亭妃確定除名
opencv源码修改