论文阅读:Guided Linear Upsampling

今天介绍一篇有趣的文章,Guided Linear Upsampling,基于引导的线性上采样,这是发表在 ACM transaction on Graphic 的一篇工作。

Abstract

引导上采样是加速高分辨率图像处理的一种有效方法。在本文中,文章作者提出了一种简单而有效的引导上采样方法。高分辨率图像中的每个像素表示为两个低分辨率像素的线性插值,其索引和权重经过优化以最小化上采样误差。下采样可以联合优化,以防止遗漏小的孤立区域。该方法可以从颜色线模型和局部颜色变换推导得出。与以前的方法相比,该方法可以更好地保留细节效果,同时抑制诸如渗色和模糊等伪影。它高效、易于实现且没有需要仔细微调的参数。我们使用广泛的图像运算符评估所提出的方法,并通过定量和定性分析展示其优势。我们展示了我们的方法在交互式图像编辑和实时高分辨率视频处理方面的优势。特别是对于交互式编辑,联合优化可以预先计算,因此无需硬件加速即可实现即时反馈。
在这里插入图片描述

Method

给定一个图像运算符 f f f 和具有 RGB 颜色的高分辨率输入图像 I I I,我们的目标是获得原始输出 𝑇 = 𝑓 ( 𝐼 ) 𝑇 = 𝑓(𝐼) T=f(I) 的近似值 T ^ \hat{T} T^。使用引导上采样方法,我们首先将 f f f 应用于下采样图像 𝐼↓,然后在 I I I 的引导下将结果 𝑇↓上采样到高分辨率输出 T ^ \hat{T} T^。我们需要优化下采样和上采样过程,以最小化 T ^ \hat{T} T^ T T T 之间的差异。

Guided Linear Upsampling


我们首先假设下采样后的输入图像 𝐼↓ 是给定的,或者默认情况下使用规则网格下采样生成。如图 2 所示,为了优化上采样,我们的基本假设是高分辨率目标图像 T T T 的每个像素 p p p 可以通过一对低分辨率像素 ( a , b ) (a,b) (a,b) 的线性插值很好地近似,如下所示:

T ^ p = w a b T a ↓ + ( 1 − w a b ) T b ↓ s . t . a , b ∈ Ω p ↓ (1) \hat{T}_p = w_{ab} T_{a}^{↓} + (1 - w_{ab}) T_{b}^{↓} \quad s.t. \quad a,b \in \Omega_{p↓} \tag{1} T^p=wabTa+(1wab)Tbs.t.a,bΩp(1)

其中, w a b w_{ab} wab 是加权函数,p↓ 是 p p p 的下采样坐标, Ω p \Omega_{p} Ωp 是 p↓ 的一个小邻域。 T ^ p \hat{T}_p T^p 是原始输出 T p T_p Tp 的估计值。公式(1)包含三个参数 w a b , a , b w_{ab}, a, b wab,a,b,为了最小化上采样误差,需要对这些参数进行优化。用 Θ p = { a , b , w a b } \Theta_{p} = \{a, b, w_{ab} \} Θp={a,b,wab} 表示像素 p p p 的参数,那么 Θ \Theta Θ 是一个 3 × H × W 3 \times H \times W 3×H×W 的张量,包含 T T T 的所有像素的参数。给定 Θ \Theta Θ ,相应的高分辨率输出 T ^ ( Θ ) \hat{T}(\Theta) T^(Θ) 可以很容易地用公式(1)计算出来。

与之前的局部颜色变换方法 [Chen et al. 2016; He et al. 2012; Levin et al. 2007] 一样,文章也假设目标图像可以局部表示为源图像的仿射变换。正如在后面将要解释的那样,在这种情况下,源图像和目标图像可以用同一组参数进行最佳上采样。换句话说,如果对于源图像是最优的,那么它对于目标图像也应该是最优的。因此,为了最小化其上采样误差,可以仅针对源图像求解最优参数。

Θ = arg min ⁡ Θ ∥ I ^ ( Θ ) − I ∥ (2) \Theta = \argmin_{\Theta} \left \| \hat{I}(\Theta) - I \right \| \tag{2} Θ=Θargmin I^(Θ)I (2)

其中, I ^ ( Θ ) \hat{I}(\Theta) I^(Θ) 表示源图的上采样结果,假设 Θ p \Theta_{p} Θp 是相互独立的,那么每个像素的参数可以独立优化:

Θ p = arg min ⁡ Θ p ∥ w a b I a ↓ + ( 1 − w a b ) I b ↓ − I p ∥ (3) \Theta_{p} = \argmin_{\Theta_p} \left \| w_{ab} I_{a}^{↓} + (1 - w_{ab}) I_{b}^{↓} - I_{p} \right \| \tag{3} Θp=Θpargmin wabIa+(1wab)IbIp (3)

这是一个组合优化问题,通常很难解决。幸运的是,在文章中, Ω p ↓ \Omega_{p↓} Ωp 是一个小邻域(在我们的实验中是一个 3×3 的窗口),所以很容易枚举所有可能的像素对。对于每个选定的像素对 ( a , b ) (a,b) (a,b),权重参数可以表示为:

w a b = ( I p − I b ↓ ) ( I a ↓ − I b ↓ ) ∥ I a ↓ − I b ↓ ∥ 2 + ϵ (4) w_{ab} = \frac{(I_{p} - I_{b}^{↓})(I_{a}^{↓} - I_{b}^{↓})}{\left\| I_{a}^{↓} - I_{b}^{↓} \right\|^{2} + \epsilon} \tag{4} wab= IaIb 2+ϵ(IpIb)(IaIb)(4)

  • 图 3
    在这里插入图片描述
    图 3 展示了一个从下采样图像上采样回原图像的示例。上述简单方法取得了惊人的好结果。即使对于像 32 倍这样的大比例,原始图像的细节也几乎可以完美地重建。相比之下,即使对于较小的比例,JBU(联合双边上采样)的结果也明显模糊。
Efficient Computation

上述优化算法的复杂度和局部邻域的像素数量成平方关系,对于一个 3 × 3 3 \times 3 3×3 的局部邻域,需要检查的像素对有 36 对,对于一个高分辨率的图像来说,这个算法的复杂度依然很高,为了进一步提升运算效率,文章发现没有必要枚举所有的像素对 ( a , b ) (a, b) (a,b)。相反,我们可以首先将 a a a 固定为与 I p I_p Ip 颜色最相似的像素,然后仅针对公式(3)优化 b , w a b b, w_{ab} b,wab。这样,复杂度可以降低到与 ∣ Ω p ↓ ∣ |\Omega_{p↓}| Ωp 成线性关系。由于 a a a 在颜色空间中与 I p I_{p} Ip 接近,所以对于在颜色线上的投影,近似误差应该很小。很容易看出,如果 I p I_p Ip 在由 I a ↓ I_{a↓} Ia I b ↓ I_{b↓} Ib 确定的颜色线上,那么公式(4)中的插值权重就简化为:

w a b = ∥ I p − I b ↓ ∥ ∥ I p − I a ↓ ∥ + ∥ I p − I b ↓ ∥ + ϵ (5) w_{ab} = \frac{ \left \| I_{p} - I_{b}^{↓} \right \|} { \left \| I_{p} - I_{a}^{↓} \right \| + \left \| I_{p} - I_{b}^{↓} \right \| + \epsilon} \tag{5} wab= IpIa + IpIb +ϵ IpIb (5)

这可以更有效地计算,并且结果保证在 [0,1] 范围内。由于不经过的颜色线被选中的可能性较小,所以上述近似对我们方法的质量影响很小。如图 3 所示,与我们的原始方法相比,上述加速方法不会引入明显的差异,但复杂度要低得多。因此,在下面的内容中,我们将默认使用加速后的方法。

最终的上采样方法如算法 1 所述。它非常简单且高效。 Ω p ↓ \Omega_{p↓} Ωp 通常选择为一个 3×3 的窗口,所以对于每个像素,只需要检查 9 个像素对。如果我们固定 w a b w_{ab} wab 为 1,那么第 3 行的优化就不必要了,并且 T ^ p \hat{T}_p T^p 将等于 T a ↓ T_{a}^{↓} Ta 。我们将这种特殊情况的方法称为引导最近邻上采样(Guided Nearest Upsampling,GNU)。如图 4 所示,GNU 缺乏恢复自然图像的斜坡边缘和平滑变化的能力,从而产生块状效果和错误轮廓,而使用 GLU(我们的方法)可以有效地消除这些问题。

  • 算法 1
    在这里插入图片描述
  • 图 4
    在这里插入图片描述
Downsample Optimization
  • 图 5
    在这里插入图片描述

对于大的下采样比例,由于规则网格下采样,孤立的细结构和小区域可能会完全丢失。在这种情况下,上采样过程将不可能恢复原始内容。图 5 展示了这样一种情况。给定 GLU 上采样器 Ψ ( I ↓ , Θ ) \Psi(I^{↓},\Theta) Ψ(I,Θ),我们可以将下采样过程表述为一个优化问题,旨在最小化源图像的自上采样误差。实际上,由于是未知的,下采样和上采样需要联合优化。

I ↓ , Θ = arg min ⁡ I ↓ , Θ ∥ I − Ψ ( I ↓ , Θ ) ∥ (6) I^{↓},\Theta = \argmin_{I^{↓},\Theta} \left \| I - \Psi( I^{↓},\Theta ) \right \| \tag{6} I,Θ=I,Θargmin IΨ(I,Θ) (6)

公式 (6) 使得下采样图像 I ↓ I^{↓} I 的每一个像素,都来自原始图像 I I I,在以前的方法中, I ↓ I^{↓} I 的每个像素通常是从 I I I 的多个像素中滤波得到的,以减少混叠伪影。对于我们的方法,下采样中的滤波可能会使上采样后的图像明显模糊,因为它会收缩颜色线的端点,这对图像细节是不利的。

公式(6)可以通过迭代优化 I ↓ I^{↓} I Θ \Theta Θ 来求解。给定 I ↓ I^{↓} I,上采样参数 Θ \Theta Θ 可以按照算法 1 求解。为了优化下采样,我们首先计算像素级误差图 E E E, $E_{p} = \left | I_{p} - \hat{I}_{p} \right | $。显然,误差大的像素一定是那些不能被 I ↓ I^{↓} I 很好地表示的像素,因此需要通过替换一些现有的像素将它们添加到 I ↓ I^{↓} I 中。由于 I ↓ I^{↓} I 中的每个像素可能用于插值 I I I 的多个像素,上述操作可能不会减少总误差。因此,我们采用试错法,如果替换 I ↓ I^{↓} I 中的一些像素不能减少总误差,被替换的像素将被回滚。

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

图 6 说明了我们方法的过程,更多细节在算法 2 中描述。试错过程针对具有大误差 ε \varepsilon ε 的像素的每个连通区域 C i C_{i} Ci 执行。具有大误差的像素尝试被添加到下采样图像中,如果该操作可以减少总误差,则该操作将被接受,否则将被回滚。对于映射到相同低分辨率像素位置$q \in I^{↓} $的多个高分辨率像素,选择具有最大误差的像素来替换 q q q 的原始颜色。

如图 5 所示,上述方法可以有效地防止细结构和小区域的丢失。在大多数情况下,它只需要 1 或 2 次迭代就可以收敛,并且在初始化后,只有具有大误差的像素才会被进一步处理,所以只需要稍微多一点的计算量。

  • 算法 2
    在这里插入图片描述
Theoretical Derivation

颜色线模型告诉我们,小区域内像素的颜色在颜色空间中应该大致在同一条线上。因此,该区域中每个像素的颜色必须通过颜色线的两个端点 [ a , b ] [a, b] [a,b] 的线性插值来很好地近似。下采样后,由于高分辨率图像中的信息冗余,可以预期 [ a , b ] [a, b] [a,b] 仍然可以由下采样后的区域中的两个像素很好地表示。结果,原始区域中的每个像素颜色也可以由下采样后的区域中的两个像素进行线性插值,如公式 (1) 所示。

局部颜色变换方法假设输出图像可以局部表示为输入图像的仿射变换,即 T p = A p I p T_{p} = A_{p}I_{p} Tp=ApIp,其中 A p A_{p} Ap 是在图像空间中平滑变化的仿射变换。此外,我们要求运算符近似具有尺度不变性: T p ↓ = A p I p ↓ T_{p}↓ = A_{p}I_{p}↓ Tp↓=ApIp。因此,如果使用可以线性插值表示原始图像:

I p = w a b I a ↓ + ( 1 − w a b ) I b ↓ (7) I_{p} = w_{ab} I_{a}^{↓} + (1 - w_{ab}) I_{b}^{↓} \tag{7} Ip=wabIa+(1wab)Ib(7)

那么变换后的图像也可以满足:

T p = w a b A p I a ↓ + ( 1 − w a b ) A p I b ↓ = w a b T a ↓ + ( 1 − w a b ) T b ↓ (8) {T}_p = w_{ab}A_p I_{a}^{↓} + (1 - w_{ab}) A_{p} I_{b}^{↓} = w_{ab} T_{a}^{↓} + (1 - w_{ab}) T_{b}^{↓} \tag{8} Tp=wabApIa+(1wab)ApIb=wabTa+(1wab)Tb(8)

Edge Recovery

在这里插入图片描述

典型的图像边缘可以分为三种类型:阶跃边缘、斜坡边缘和屋脊边缘 [Koschan 和 Abidi 2005;Yin 等人 2019]。对于自然图像,大多数边缘应该是连接两个区域的斜坡边缘。显然,斜坡边缘的过渡效果可以通过两个区域颜色的线性插值很好地表示。因此,通过仅插值两个像素,GLU 可以很好地恢复原始图像的边缘。相比之下,使用 GNU 只能恢复阶跃边缘,因此会引入明显的伪影,如图 4 所示。

一个自然的问题是,通过插值更多的像素是否可以实现进一步的效果提升。实际上,公式(1)可以更一般地表示为

T ^ p = ∑ q ∈ Ω p ↓ w q T q ↓ (9) \hat{T}_p = \sum_{q \in \Omega_{p}^{↓}} w_{q} T_{q}^{↓} \tag{9} T^p=qΩpwqTq(9)

其中 w q w_{q} wq 是归一化的权重。有趣的是,这正是 JBU(联合双边上采样)的形式。虽然没有进行测试,但我们认为没有必要采用更多的像素进行插值。涉及更多的像素不仅会使优化更加困难,还可能导致过拟合和外推,这两者都会降低结果质量。

Detail Preservation

我们的方法隐含地利用了局部颜色变换来传递上采样参数。然而,需要注意的是,与之前的方法如引导滤波 [He 等人,2012] 和 BGU 不同,我们的方法不要求变换在图像空间或双边空间中是平滑的。因此,它可以更好地保留目标图像的细节效果,同时避免过度平滑导致的渗色伪影。

我们方法的一个潜在问题是缺乏明确的平滑性约束。虽然保持平滑对于大多数图像处理操作符很重要,但我们发现我们的方法在大多数情况下独立地对每个像素进行操作也能很好地工作。这主要是因为线性插值模型可以很好地近似原始源图像的外观,它作为一个平滑的引导图,如果目标图像与源图像具有相似的局部亲和力,可以抑制不光滑的伪影。然而,如果源图像和目标图像的像素亲和力有显著差异(例如,当在目标图像中引入新的边缘时),可能会产生不光滑的伪影。实际上,这是我们方法的主要局限性。

Limitations

与 JBU 和 BGU 一样,我们方法的一个基本假设是源图像和目标图像具有几乎相同的局部亲和力,即源图像中颜色更相似的像素在目标输出中应该具有更相似的颜色。因此,我们的方法不适用于可能在目标图像中引入新边缘的应用。图 14 展示了这样一个例子。新边缘的亲和力与源图像有很大不同,因此不在联合优化的范围内。在更一般的情况下,由于不同的局部亲和力,我们的方法可能会产生不光滑的边缘。如图 15 所示,由于物体与背景颜色相似,我们的方法无法准确地恢复清晰的遮罩边缘。

与添加新边缘不同,去除边缘通常不会给我们的方法带来问题,因为得到的像素仍然可以由相邻像素插值,所以像抠图和平滑这样的应用可以得到很好的支持。相比之下,BGU 可能会坚持保留源图像的边缘和局部结构,所以对于去除边缘的应用,它可能会产生伪影,如图 8 所示。

由于在处理新边缘方面的限制,我们的方法不适用于可能极大地改变局部图像结构的应用,例如最近基于学习的风格迁移方法 [Park 等人,2020;Zhu 等人,2017]。这是包括 JBU 和 BGU 在内的通用引导上采样方法的一个共同局限性。图 16 展示了一些例子。如图所示,对于像马变斑马这样的情况,BGU 可能完全忽略新边缘,而我们的方法会导致不光滑的伪影。实际上,由于对于新边缘,源图像中没有引导信息,如果没有任何特定领域的先验知识,就无法得到好的结果,所以在这种情况下使用基于学习的方法应该更好。

对于实际应用,一个实际问题是找到一个适合低分辨率处理的图像运算符。如图 10 所示,输入图像的尺度可能对一些图像处理方法的输出有很大影响。例如,我们发现 BackgroundMattingV2 在应用于 8 倍下采样的输入时会产生明显更多的错误,因为它最初是为高分辨率视频设计的。另一个例子是光流估计 [Teed 和 Deng,2020],其准确性受图像分辨率的极大影响,并且在上采样后需要特殊处理。如何调整这些方法以更好地进行低分辨率图像处理是一个遗留问题。

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

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

相关文章

博客搭建之路:hexo搜索引擎收录

文章目录 hexo搜索引擎收录以百度为例 hexo搜索引擎收录 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 写博客的目的肯定不是就只有自己能看到,想让更多的人看到就需要可以让搜索引擎来收录对应的文章。hexo支持生成站点地图sitemap 在hexo下的_config.yml中配置站点…

问:MySQL表过大,你有哪些优化实践?

当MySQL单表记录数过大时,数据库的CRUD(创建、读取、更新、删除)性能会明显下降。为了提升性能,我们需要采取一些优化措施。本文将详细介绍几种常见的优化方案。 1. 限定数据的范围 描述 务必禁止不带任何限制数据范围条件的查…

优先算法——移动零(双指针)

目录 1. 题目解析 2. 算法原理 3.代码实现 题目: 力扣题目链接:移动零 1. 题目解析 题目截图如下: 不过要注意,这个移动题目要求是在原数组中原地操作,不能新额外开辟一个数组来修改。 2. 算法原理 这个原理可以称之为数…

node和npm

背景(js) 1、为什么js能操作DOM和BOM? 原因:每个浏览器都内置了DOM、BOM这样的API函数 2、浏览器中的js运行环境? v8引擎:负责解析和执行js代码 内置API:由运行环境提供的特殊接口,只能在所…

Python | Leetcode Python题解之第507题完美数

题目&#xff1a; 题解&#xff1a; class Solution:def checkPerfectNumber(self, num: int) -> bool:if num 1:return Falsesum 1d 2while d * d < num:if num % d 0:sum dif d * d < num:sum num / dd 1return sum num

使用预训练的BERT进行金融领域问答

获取更多完整项目代码数据集&#xff0c;点此加入免费社区群 &#xff1a; 首页-置顶必看 1. 项目简介 本项目旨在开发并优化一个基于预训练BERT模型的问答系统&#xff0c;专注于金融领域的应用。随着金融市场信息复杂性和规模的增加&#xff0c;传统的信息检索方法难以高效…

Python 爬虫项目实战:爬取某云热歌榜歌曲

一、网络爬虫的定义 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;也成为网页蜘蛛或者网页机器人&#xff0c;是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索以及内容抓取等。 二、爬虫基本原理 1、种子URL&#xff1a;爬…

01 springboot-整合日志(logback-config.xml)

logback-config.xml 是一个用于配置 Logback 日志框架的 XML 文件&#xff0c;通常位于项目的 classpath 下的根目录或者 src/main/resources 目录下。 Logback 提供了丰富的配置选项&#xff0c;可以满足各种不同的日志需求。需要根据具体情况进行配置。 项目创建&#xff0…

学习规划网络安全工程师之路

要成为一名网络安全工程师&#xff0c;尤其是在物联网安全日渐重要的背景下&#xff0c;你需要制定一个系统的学习规划&#xff0c;以掌握相关知识和技能。以下是一个具体的学习规划&#xff0c;分为基础阶段、进阶阶段和实践阶段。 学习规划 一、基础阶段&#xff08;1-3个月…

CCF-BDCI大数据与计算智能大赛TOP4-京东生鲜

2023 CCF 大数据与计算智能大赛《线上线下全场景生鲜超市库存履约一体化决策》top4南山论剑 摘要1 数据预处理1.1 数据整合1.2 数据划分 2 特征工程2.1 静态特征2.2 动态特征 3 方案设计3.1 数据构造3.2 模型训练3.3 模型融合3.4库存分配3.5 方案对比 链接: CCFBDCI-线上线下全…

Linux下EDAC功能介绍

一、背景介绍 edac 目的是在linux系统运行过程中&#xff0c;当内存错误发生时&#xff0c;能够发现并且报告出硬件错误 当内存硬件有ECC功能时&#xff0c;如果在BIOS中使能了内存ECC&#xff0c;不管内核是否启用edac&#xff0c;内存硬件ECC功能都会使能&#xff0c;由硬件自…

解决:如何在opencv中得到与matlab立体标定一样的矫正图?(python版opencv)

目的&#xff1a;采用一样的标定参数&#xff0c;matlab中和opencv中的立体矫正图像是一样的吗&#xff1f;不一样的话怎么让它们一样&#xff1f; 结论&#xff1a;不一样。后文为解决方案。 原因&#xff1a;注意matlab的标定结果在matlab中的用法和在opencv中的用法不一样&a…

STM32 从0开始系统学习2

目录 C语言基础 位操作 extern 修饰符 typedef 封装复杂的类型 寄存器基础知识 STM32F103架构简单描述&#xff08;建议先不看&#xff09; 存储器映射 寄存器映射 寄存器地址计算 下面简单的聊一聊一些需要的前置知识基础。 C语言基础 位操作 这个在单片机里算基操…

ScrollView 真机微信小程序无法隐藏滚动条

问题描述 根据官方文档&#xff0c;使用:show-scrollbar"false"&#xff0c;隐藏滚动条无效 解决方法 添加一段样式在 scroll-view 上或者父级节点上下 ::-webkit-scrollbar {width: 0;height: 0;color: transparent;display: none;} eg. .inforDetails_app {p…

Windows通过netsh控制安全中心防火墙和网络保护策略

Windows通过netsh控制安全中心防火墙和网络保护策略 1. 工具简介 【1】. Windows安全中心 【2】. netsh工具 netsh(Network Shell) 是一个Windows系统本身提供的功能强大的网络配置命令行工具。 2. 开启/关闭防火墙策略 在设置端口&#xff08;禁用/启用&#xff09;前&am…

中国人寿财险青岛市分公司普惠金融助力民生保障

普惠金融是金融业的重要组成部分&#xff0c;也是服务实体经济、保障民生的重要途径。国寿财险青岛市分公司始终坚持以人民为中心的发展思想&#xff0c;大力发展普惠金融业务&#xff0c;不断提升金融服务的覆盖面和便捷性。 在服务“三农”方面&#xff0c;国寿财险青岛市分…

【宝塔面板】宝塔面板使用docker部署chatGPT-Next-web

1111111 chatGPT-Next-web大家并不陌生&#xff0c;就是下面的这个界面&#xff0c;下面请大家跟随小编部署下这个web 我们先感谢下源码的博主&#xff1a; https://github.com/Dooy/chatgpt-web-midjourney-proxy 本教程部署也很简单&#xff0c;就2步 1、创建容器编排模版 …

循环双链表,将L改造为L=(a1,a3,…,an,a4,a2)

题目&#xff1a;设以带头结点的双向循环链表表示的线性表L&#xff08;a1,a2,…..,an&#xff09;.试写出一时间复杂度为o(n)的算法&#xff0c;将L改造为L&#xff08;a1,a3,…,an,a4,a2&#xff09; 思想&#xff1a;将偶数头插到表尾&#xff0c;奇数顺序保持不变。 代码…

云原生后端概述

目录 云原生后端概述 云原生后端的核心特点 云原生后端的架构组件 云原生后端的常见技术栈 云原生后端与传统后端架构的对比 结论 云原生后端概述 随着企业对数字化转型需求的不断增加&#xff0c;云原生后端逐渐成为构建现代应用程序的核心方法。云原生&#xff08;Clo…

股票基金大通证券申购大宗交易代理-VUE源码开源版

前后端vue开源 服务端java开源 这套是开源的 1.环境 环境 php7.4 sql 5.7 Nginx1.2 tomcat-8 redis 放行1-65535 2.创建5个网站。xxx.com替换你的域名 ftp.xxx.com api.xxx.com agent.xxx.com admin.xxx.com wap.xxx.com api设置反向代理 代理名称 api 目标URL http://127.…