1 泊松图像编辑(Poisson Image Editing )

泊松图像编辑(Poisson Image Editing)的核心观点是图像融合时,用色彩梯度代替色彩强度可以产生更真实的效果。

经无缝融合(seamless cloning)后,融合图像的蒙板区域内色彩强度与源图像的蒙板区域色彩强度不一致;但融合图像的蒙板区域内色彩梯度与源图像的蒙板区域色彩梯度基本相同。此外,融合图像的在蒙板区域边界处色彩强度与目标图像的色彩强度相同

参考文献:Rez P, Gangnet M, Blake A. Poisson image editing.[J]. Acm Transactions on Graphics, 2003, 22(3):313-318.

1.1 引言(Introduction)

该方法的数学思想是给定狄利克雷边界条件的泊松偏微分方程。

(1)图像中,拉普拉斯算子提取的二阶变化量在感知上最明显;

(2)唯一解:有界域上的标量函数可由其边界值和域内拉普拉斯算子唯一确定(即,φ(x,y)\varphi(x, y)φ(x,y)由f(x,y)f(x, y)f(x,y)和g(x,y)g(x, y)g(x,y)唯一确定,见1.2.0 泊松方程)。

泊松方程的求解过程也可理解为最小化问题:给定边界条件,在L2L_2L2​范数意义下,计算梯度最接近引导向量场(guidance vector field)的函数。

1.2 导向插值求解泊松方程(Poisson solution to guided interpolation)

1.2.0 泊松方程(Poisson’s Equation)

  • 泊松方程

−Δφ=f- \Delta \varphi = f−Δφ=f

  • 狄利克雷边界条件(Dirichlet boundary condition)

微分方程的“第一类边界条件”,给定微分方程的解在边界处的值。

  • 给定狄利克雷边界条件的泊松偏微分方程

{−Δφ(x,y)=f(x,y)x,y∈Ωφ(x,y)=g(x,y)x,y∈∂Ω\begin{cases} -\Delta \varphi(x, y) = f(x, y) & x, y \in \Omega \\ \varphi(x, y) = g(x, y)& x, y \in \partial \Omega \end{cases} {−Δφ(x,y)=f(x,y)φ(x,y)=g(x,y)​x,y∈Ωx,y∈∂Ω​

其中Ω⊂Rn\Omega \subset R^nΩ⊂Rn为有界开集,Δ=∂2∂x2+∂2∂y2\Delta = \frac{\partial^2}{\partial x^2} + \frac{\partial^2}{\partial y^2}Δ=∂x2∂2​+∂y2∂2​为拉普拉斯算子(Laplacian operator)。

1.2.1 引导插值(Guided Interpolation)

  • 引导插值:利用引导向量场(guidance vector field)进行图像插值。

SSS:R2R^2R2的闭子集,表示图像的定义域;

Ω\OmegaΩ:SSS的闭子集,其边界为∂Ω\partial \Omega∂Ω;

f∗f^{\ast}f∗:定义在Ω\OmegaΩ域边界及外部(S−Ω+∂ΩS- \Omega + \partial \OmegaS−Ω+∂Ω)上的已知标量函数(scalar function);

fff:定义在Ω\OmegaΩ域内部(Ω−∂Ω\Omega - \partial \OmegaΩ−∂Ω)上的未知标量函数(scalar function);

v\mathbf{v}v:定义在Ω\OmegaΩ域上的矢量场(vector field)

  • 最小化问题:

min⁡f∬Ω∣∇f−v∣2with f∣∂Ω=f∗∣∂Ω\min_f \iint_{\Omega} \left| \nabla f - \mathbf{v} \right|^2 \quad \text{with} \ \left. f \right|_{\partial \Omega} = \left. f^{\ast} \right|_{\partial \Omega}fmin​∬Ω​∣∇f−v∣2with f∣∂Ω​=f∗∣∂Ω​

(3)

其中,∇=[∂∂x,∂∂x]\nabla = \left[ \frac{\partial }{\partial x}, \frac{\partial }{\partial x} \right]∇=[∂x∂​,∂x∂​]为梯度算子(gradient operator),矢量场v\mathbf{v}v为引导场(guidance field)。该问题的解为给定狄利克雷边界条件的泊松偏微分方程的唯一解:

Δf=∇⋅vover Ωwith f∣∂Ω=f∗∣∂Ω\Delta f = \nabla \cdot \mathbf{v} \ \text{over} \ \Omega \quad \text{with} \ \left. f \right|_{\partial \Omega} = \left. f^{\ast} \right|_{\partial \Omega} Δf=∇⋅v over Ωwith f∣∂Ω​=f∗∣∂Ω​

(4)

其中,∇⋅v=∂u∂x+∂v∂y\nabla \cdot \mathbf{v} = \frac{\partial u}{\partial x} + \frac{\partial v}{\partial y}∇⋅v=∂x∂u​+∂y∂v​表示v=(u,v)\mathbf{v} = \left( u, v\right)v=(u,v)的散度(divergence)。

对于三通道彩色图像来说,泊松方程需要在三个通道上分别独立求解。

当v\mathbf{v}v为保守场(conservative)即v=∇g\mathbf{v} = \nabla gv=∇g时,可在Ω\OmegaΩ域上定义校正函数f~\tilde{f}f~​,使得f=g+f~f = g + \tilde{f}f=g+f~​。些时,泊松偏微分方程可转换成拉普拉斯方程:

Δf~=0over Ωwith f~∣∂Ω=(f∗−g)∣∂Ω\Delta \tilde{f} = 0 \ \text{over} \ \Omega \quad \text{with} \ \left. \tilde{f} \right|_{\partial \Omega} = \left. \left( f^{\ast} - g \right) \right|_{\partial \Omega} Δf~​=0 over Ωwith f~​∣∣∣​∂Ω​=(f∗−g)∣∂Ω​

因此,在Ω\OmegaΩ域内,附加校正f~\tilde{f}f~​就是源图像与目标图像之间沿边界∂Ω{\partial \Omega}∂Ω的失配(f∗−g)\left( f^{\ast} - g \right)(f∗−g)的膜插值(membrane interpolant)。

1.2.2 离散泊松解算器(Discrete Poisson solver)

SSS:表示图像的一部分区域;

ppp:表示一个像素点;

NpN_pNp​:表示与像素ppp相邻的四个像素的集合;

<p,q>\left< p, q \right>⟨p,q⟩:表示满足q∈Npq \in N_pq∈Np​的像素对;

域Ω\OmegaΩ的边界表示为:∂Ω={p∈S\Ω:Np⋂Ω̸=∅}\partial \Omega = \left\{ p \in S \backslash \Omega: N_p \bigcap \Omega \not= \emptyset \right\}∂Ω={p∈S\Ω:Np​⋂Ω̸​=∅};

fpf_pfp​表示fff在ppp处的值;

vpqv_{pq}vpq​为v(p+q2)\mathbf{v} \left( \frac{p + q}{2} \right)v(2p+q​)在方向边缘(oriented edge)[p,q]\left[ p, q \right][p,q]上的投影:

vpq=v(p+q2)⋅pq⃗v_{pq} = \mathbf{v} \left( \frac{p + q}{2} \right) \cdot \vec{pq}vpq​=v(2p+q​)⋅pq​

该任务为计算灰度强度的集合f∣Ω={fp,p∈Ω}\left. f \right|_{\Omega} = \left\{ f_p, p \in \Omega \right\}f∣Ω​={fp​,p∈Ω}

对于定义在任意边界上的狄利克雷边界条件问题,最好通过有限差分离散化(finite difference discretization)j将变分问题(variational problem)(3)转化为离散二次最优问题(discrete quadratic optimization problem)直接求解:

min⁡f∣Ω∑<p,q>⋂Ω̸=∅(fp−fq−vpq)2,with fp=fp∗,∀p∈∂Ω\min_{\left. f \right|_{\Omega}} \sum_{\left<p, q\right> \bigcap \Omega \not= \emptyset} \left( f_p - f_q - v_{pq} \right)^2 , \quad \text{with} \ f_p = f_p^{\ast}, \ \forall p \in \partial \Omega f∣Ω​min​⟨p,q⟩⋂Ω̸​=∅∑​(fp​−fq​−vpq​)2,with fp​=fp∗​, ∀p∈∂Ω

(6)

【公式推导】

方程(6)的推导需要注意NpN_pNp​的定义,pq⃗\vec{pq}pq​至多只有000、π2\frac{\pi}{2}2π​、π\piπ、3π2\frac{3 \pi}{2}23π​四个方向,∣Np∣≤4\left| N_p \right| \leq 4∣Np​∣≤4。

其解满足联立线性方程组(simultaneous linear equations):

∣Np∣fp−∑q∈Np⋂Ωfq=∑q∈Np⋂∂Ωfq∗+∑q∈Npvpq,∀p∈Ω\left| N_p \right| f_p - \sum_{q \in N_p \bigcap \Omega} f_q = \sum_{q \in N_p \bigcap \partial \Omega} f^{\ast}_q + \sum_{q \in N_p} v_{pq}, \ \forall p \in \Omega ∣Np​∣fp​−q∈Np​⋂Ω∑​fq​=q∈Np​⋂∂Ω∑​fq∗​+q∈Np​∑​vpq​, ∀p∈Ω

(7)

当p∈∂Ωp \in \partial \Omegap∈∂Ω时,∣Np∣&lt;4\left| N_p \right| \lt 4∣Np​∣<4;当ppp为Ω\OmegaΩ内部点(Np⊂ΩN_p \subset \OmegaNp​⊂Ω)时,方程(7)不包含边界项:

∣Np∣fp−∑q∈Np⋂Ωfq=∑q∈Npvpq\left| N_p \right| f_p - \sum_{q \in N_p \bigcap \Omega} f_q = \sum_{q \in N_p} v_{pq} ∣Np​∣fp​−q∈Np​⋂Ω∑​fq​=q∈Np​∑​vpq​

(8)

方程(7)是带状稀疏(banded sparse)、对称(symmetric)、正定矩阵(positive-definite),可用高斯-塞德尔迭代法求解。

1.3 无缝融合(seamless cloning)

1.3.1 导入梯度(Importing gradients)

源图像中的梯度场可以作为最基本的引导场v\mathbf{v}v:

v=∇g\mathbf{v} = \nabla gv=∇g

其中,ggg表示源图像。代入方程(4)可得:

Δf=Δgover Ωwith f∣∂Ω=f∗∣∂Ω\Delta f = \Delta g \ \text{over} \ \Omega \quad \text{with} \ \left. f \right|_{\partial \Omega} = \left. f^{\ast} \right|_{\partial \Omega} Δf=Δg over Ωwith f∣∂Ω​=f∗∣∂Ω​

(10)

vpq=gp−gq,∀&lt;p,q&gt;v_{pq} = g_p - g_q, \ \forall \left&lt; p, q \right&gt;vpq​=gp​−gq​, ∀⟨p,q⟩

导入梯度在Ω\OmegaΩ域内完全不考虑目标图像。

1.3.2 混合梯度(Mixing gradients)

混合梯度会将f∗f^{\ast}f∗与ggg的特性组合起来。

泊松方法(Poisson methodology)可以使用非保守(non-conservative)引导场,来生成更好的效果。在Ω\OmegaΩ域中任意一点上,选择f∗f^{\ast}f∗和ggg二者之中梯度大的作为引导向量v\mathbf{v}v的值:

v={∇f∗(x)if ∣∇f∗(x)∣&gt;∣∇g(x)∣∇g(x)otherwise,∀x∈Ω\mathbf{v} = \begin{cases} \nabla f^{\ast} \left( \mathbf{x} \right) \quad &amp; \text{if} \ \left| \nabla f^{\ast} \left( \mathbf{x} \right) \right| \gt \left| \nabla g \left( \mathbf{x} \right) \right| \\ \nabla g \left( \mathbf{x} \right) \quad &amp; \text{otherwise} \end{cases}, \quad \forall \mathbf{x} \in \Omega v={∇f∗(x)∇g(x)​if ∣∇f∗(x)∣>∣∇g(x)∣otherwise​,∀x∈Ω

(12)

引导向量v\mathbf{v}v的离散化表示为:

vpq={fp∗−fq∗if ∣fp∗−fq∗∣&gt;∣gp−gq∣gp−gqotherwise,∀&lt;p,q&gt;v_{pq} = \begin{cases} f_p^{\ast} - f_q^{\ast} \quad &amp; \text{if} \ \left| f_p^{\ast} - f_q^{\ast} \right| \gt \left| g_p - g_q \right| \\ g_p - g_q \quad &amp; \text{otherwise} \end{cases}, \quad \forall \left&lt; p, q \right&gt; vpq​={fp∗​−fq∗​gp​−gq​​if ∣∣​fp∗​−fq∗​∣∣​>∣gp​−gq​∣otherwise​,∀⟨p,q⟩

1.3.3 单色迁移(Monochrome transfer)

当无缝融合仅需要源图像纹理(梯度)信息而不需要色彩信息时,可预先将源图像转换成单色图(灰度图)。

1.4 选区编辑(Selection editing)

  • 无缝融合处理的问题是将源图像中的区域融合到目标图像中,引导场部分或完全取决于源图像ggg的梯度。

  • 选区编辑处理的问题是在单一图像上取出一块区域,对这个区域进行处理,使用完全依赖于原始图像的引导场来定义选区图像的变换。主要形式包括:纹理扁平化(Texture flattening)、局部明亮变化(Local illumination changes)、局部色彩变化(Local color changes)以及无缝拼接(seamless tiling)。

  • 纹理扁平化和局部明亮变化是通过对原始梯度场∇f∗\nabla f^{\ast}∇f∗进行非线性修改实现;背景或前景色修改和无缝拼接是通过就地(in-place)无缝融合实现,原始图片经域内(提供新的源图像)或域外(提供新的边界值)修改后作为源。

1.4.1 纹理扁平化(Texture flattening)

利用稀疏筛(sparse sieve)对图像梯度∇f∗\nabla f^{\ast}∇f∗进行处理,只保留最突出的特征:

v(x)=M(x)∇f∗(x),∀x∈Ω\mathbf{v \left( x \right)} = \mathbf{M \left( x \right)} \nabla f^{\ast} \mathbf{\left( x \right)}, \quad \forall \mathbf{x} \in \Omega v(x)=M(x)∇f∗(x),∀x∈Ω

(14)

其中,M(x)\mathbf{M \left( x \right)}M(x)为二进制蒙板,用于开启稀疏筛区域。当M(x)\mathbf{M \left( x \right)}M(x)为边缘检测器时:

vpq={fp∗−fq∗if an edge lies between pand q0otherwise,∀&lt;p,q&gt;v_{pq} = \begin{cases} f_p^{\ast} - f_q^{\ast} \quad &amp; \text{if an edge lies between } p \text{ and } q \\ 0 \quad &amp; \text{otherwise} \end{cases}, \quad \forall \left&lt; p, q \right&gt; vpq​={fp∗​−fq∗​0​if an edge lies between p and qotherwise​,∀⟨p,q⟩

边缘检测器选取的边缘越少(选择性越强),边缘映射就越稀疏,扁平化效果就越明显。

1.4.2 局部明亮变化(Local illumination changes)

Fattal et al. 2002,给出一种平滑修改原始图像动态范围的方法:

(1)对图像对数的梯度场进行变换,用于减小大的梯度值、增加小的梯度

(2)在整个图像域上,给定诺伊曼边界条件(Neumann boundary conditions)下,通过求解泊松方程Δf=∇⋅v\Delta f = \nabla \cdot \mathbf{v}Δf=∇⋅v,用变换后的向量场v\mathbf{v}v重构图像的对数fff。

通过使用合适的狄利克雷边界条件,上述方法应用于校正选区内图像。使用简化版Fattal et al变换,引导场在对数域(log-domain)上定义为

V=αβ∣∇f∗∣−β∇f∗\mathbf{V} = \alpha^{\beta} \left| \nabla f^{\ast} \right|^{- \beta} \nabla f^{\ast} V=αβ∣∇f∗∣−β∇f∗

其中,α=0.2∣∇f∗∣avg\alpha = 0.2 \left| \nabla f^{\ast} \right|_{\mathrm{avg}}α=0.2∣∇f∗∣avg​(在Ω\OmegaΩ域上,f∗f^{\ast}f∗的平均梯度范数的0.2倍),β=0.2\beta = 0.2β=0.2

1.4.3 局部色彩变化(Local color changes)

给定原始图像和选区(Ω\OmegaΩ域),利用无缝融合修改原始图像的前景色和背景色:

(1)修改背景色:给定Ω\OmegaΩ域外目标函数f∗f^{\ast}f∗,例下图中间:通过将选区外图像进行去色处理,得到的图像作为f∗f^{\ast}f∗。

(2)修改前景色:给定Ω\OmegaΩ域内源函数ggg,例下图右侧:将选区内图像各通道灰度值分别乘以1.5、0.5、0.5,得到的图像作为ggg。

1.4.4 无缝拼接(seamless tiling)

选区(Ω\OmegaΩ域)为矩形:

原始图像选区内图像作为源图像ggg,边界条件由g的边界值导出:
fnorth∗=fsouth∗=gnorth+gsouth2fwest∗=feast∗=gwest+geast2\begin{aligned} f^{\ast}_{\mathrm{north}} = f^{\ast}_{\mathrm{south}} = &amp; \frac{g_{\mathrm{north}} + g_{\mathrm{south}}}{2} \\ f^{\ast}_{\mathrm{west}} = f^{\ast}_{\mathrm{east}} = &amp; \frac{g_{\mathrm{west}} + g_{\mathrm{east}}}{2} \\ \end{aligned} fnorth∗​=fsouth∗​=fwest∗​=feast∗​=​2gnorth​+gsouth​​2gwest​+geast​​​

2 OpenCV实现

2.1 函数原型

  • seamlessClone(src, dst, mask, center, flags)

    • 常规融合(Normal Cloning)

    源图像的纹理(梯度)保留在融合区域

    • 混合融合(Mixed Cloning)

    融合区域的纹理(梯度)由源图像和目标图像共同决定。混合融合会选择源图像和目标图像之中的主要纹理(梯度),因此不会产生平滑区域

    • 单色迁移(Monochrome Transfer)

    保留源图像的纹理(梯度),丢弃其色彩信息,使得融合区域色彩与目标图像一致,可以用来进行皮肤质地填充。

  • colorChange(src, mask, result, red_mul, green_mul, blue_mul)

    • 局部颜色改变(Local Color Change)

    同一幅图像的颜色融合,后面三个参数是rgb三个通道的乘数因子,在0.5-2.5之间。值越大起到锐化的作用。

  • illuminationChange(src, mask, result, alpha=0.2f, beta=0.4f)

    • 局部亮度改变(Local Illumination Change)

    对区域内illuminaton 变换明显的地方做修改,beta越大,图片平滑越多,alpha越大,越接近原图细节。alpha和beta都是0-2之间。对于加亮曝光不足的区域比较有效果。

  • textureFlattening(src, mask, result, low_thresh, high_thresh, kernel_size)

    • 纹理平整(Texture Flattening)

    仅仅保留边缘处的梯度,选中区域的质地没有保留。

2.2 Seamless Cloning Examples (Learn OpenCV)

%matplotlib inline
import matplotlib.pyplot as plt
import mathdef plotImgs(idxFig, lstImgs, figsize=(12, 24)):fig = plt.figure(idxFig, figsize=figsize)fig.clf()intNumImgs = len(lstImgs)intNumCols = int(math.sqrt(intNumImgs))intNumRows = int(math.ceil(intNumImgs / intNumCols))idxImg = 0for idxRow in range(intNumRows):for idxCol in range(intNumCols):ax = fig.add_subplot(intNumRows, intNumCols, idxImg + 1, frameon=False)if lstImgs[idxImg].dtype == "uint8":ax.imshow(cv2.cvtColor(lstImgs[idxImg], cv2.COLOR_BGR2RGB))else:ax.imshow(lstImgs[idxImg])ax.get_yaxis().set_visible(False)ax.get_xaxis().set_visible(False)idxImg += 1if idxImg >= intNumImgs:breakplt.show()
# Standard imports
import cv2
import numpy as np # Read images
src = cv2.imread("./img/airplane.jpg")
dst = cv2.imread("./img/sky.jpg")# Create a rough mask around the airplane.
src_mask = np.zeros(src.shape, src.dtype)
poly = np.array([[4,80], [30,54], [151,63], [254,37], [298,90], [272,134], [43,122]], np.int32)
cv2.fillPoly(src_mask, [poly], (255, 255, 255))# This is where the CENTER of the airplane will be placed
center = (800,100)# Clone seamlessly.
# Normal Cloning
output1 = cv2.seamlessClone(src, dst, src_mask, center, cv2.NORMAL_CLONE)
# Mixed Cloning
output2 = cv2.seamlessClone(src, dst, src_mask, center, cv2.MIXED_CLONE)
output3 = cv2.seamlessClone(src, dst, src_mask, center, cv2.MONOCHROME_TRANSFER)# Save result
#cv2.imwrite("./output/opencv-seamless-cloning-example.jpg", output)
idxFig = 1
plotImgs(1, [src, src_mask, dst, output1, output2, output3], figsize=(12, 8))

# Read images : src image will be cloned into dst
im = cv2.imread("./img/wood-texture.jpg")
obj = cv2.imread("./img/iloveyouticket.jpg")# Create an all white mask
mask = 255 * np.ones(obj.shape, obj.dtype)# The location of the center of the src in the dst
width, height, channels = im.shape
center = (height // 2, width // 2)# Seamlessly clone src into dst and put the results in output
normal_clone = cv2.seamlessClone(obj, im, mask, center, cv2.NORMAL_CLONE)
mixed_clone = cv2.seamlessClone(obj, im, mask, center, cv2.MIXED_CLONE)
mono_clone = cv2.seamlessClone(obj, im, mask, center, cv2.MONOCHROME_TRANSFER)# Write results
#cv2.imwrite("images/opencv-normal-clone-example.jpg", normal_clone)
#cv2.imwrite("images/opencv-mixed-clone-example.jpg", mixed_clone)
idxFig += 1
plotImgs(1, [obj, im, normal_clone, mixed_clone, mono_clone], figsize=(12, 8))

文献阅读 - Poisson Image Editing相关推荐

  1. 【转载】关于文献阅读和科研选题

    本文转载自程明明老师博客:https://mmcheng.net/paperreading/ ‎ 对于论文的阅读和研究脉络的梳理很清晰,特别是在于找研究方向的建议上:从开山文献开始,会到当事人的角度去 ...

  2. 关于文献阅读和寻找新的科研题目

    关于文献阅读和寻找新的科研题目 Ming-Ming / April 1, 2014 欢迎转载.本文将随时根据新的经验教训进行更新,因此转载时请附带原始链接: http://mmcheng.net/pa ...

  3. 程明明-关于文献阅读和寻找新的科研题目

    自从2007年一月去我即将读研的清华大学计算机图形学组做本科毕业设计开始,我就陷入了一个困扰我许久的问题之中:如何阅读文献,如何寻找科研题目?之后长达三年的时间,我一直被这个问题深深困扰,直至2009 ...

  4. 四位科研牛人介绍的文献阅读经验

     每天保持读至少2-3 篇的文献的习惯.读文献有不同的读法,但最重要的自己总结概括这篇文献到底说了什么,否则就是白读,读的时候好像什么都明白,一合上就什么都不知道,这是读文献的大忌,既浪费时间,最 ...

  5. Poisson Image Editing 泊松融合 matlab代码完整

    做相关的实验,发现竟然没找到的能直接用的matlab代码,于是 google一下. 原理我觉得这个就讲的挺好的:https://blog.csdn.net/hjimce/article/details ...

  6. 最大熵模型(Maximum Entropy Model)文献阅读指南

    最大熵模型(Maximum Entropy Model)是一种机器学习方法,在自然语言处理的许多领域(如词性标注.中文分词.句子边界识别.浅层句法分析及文本分类等)都有比较好的应用效果.张乐博士的最大 ...

  7. 条件随机场(Conditional random fields,CRFs)文献阅读指南

    与最大熵模型相似,条件随机场(Conditional random fields,CRFs)是一种机器学习模型,在自然语言处理的许多领域(如词性标注.中文分词.命名实体识别等)都有比较好的应用效果.条 ...

  8. 文献阅读疑问(202010)

    学习笔记,仅供参考 文章目录 文献阅读疑问 Unsupervised Deep Embedding for Clustering Analysis 文献阅读疑问 Unsupervised Deep E ...

  9. 那些文献阅读能力爆表的科研学子,都在偷偷做这件事……

    对于广大科研学子来说,阅读文献这件事可谓是贯穿整个学术生涯,因为文献是了解现在所学专业的领域切入点,且做科研遇到难题时还可以在文献中寻找答案. 以及科研实验完毕后,若是准备发表论文,那么还得再看看文献 ...

最新文章

  1. SpringBoot - 构建监控体系03_使用 Admin Server 管理 Spring 应用程序
  2. 27-----BBS论坛
  3. C语言课后习题(39)
  4. There is 和 There are的使用_28
  5. 7. keras - 模型的保存与载入
  6. 介绍几个json在线格式化网站
  7. 木蚂蚁软件光盘 V2.0 2008元旦贺岁版
  8. 异速联客户端未获取到服务器信息,异速联客户端登陆服务器地址
  9. 文本生成图像Text-To-Image评估指标IS、FID、VSS、R-precision
  10. 软件测试预演环境,什么是软件测试用例预演 有何优点?[3]
  11. 计算机类sci四大水刊,官方证实:「四大水刊」之一的 ONCOTARGET 2018年起将不再被 SCI 收录,你怎么看?...
  12. 行星介绍html页面布局,css3 html5实现太阳系行星公转动画实例
  13. 计算机科学与技术专业考研方向有哪些,计算机科学与技术专业考研方向有哪些?...
  14. 如何提取Excel中部分内容?
  15. Designing Data-Intensive Applications翻译
  16. java手机游戏ios_我的世界JAVA版本ios版
  17. 软件测试外包的战术有哪些
  18. 台湾国立大学郭彦甫Matlab教程笔记(6)user define function
  19. X86实模式与保护模式简介
  20. echarts rich设置动态图片/动态数据;echarts 人均收入柱状图 window系统显示不出国旗;echarts动态rich

热门文章

  1. 什么是人工智能自动编程?它只是一个噱头吗?
  2. 投资效率模型两个版本(含stata代码以及计算参考文献)
  3. (课程学习笔记)Excel学习
  4. linux下搭建游戏服务器运行环境
  5. 用python实现打字练习网站第一
  6. 极客时间和极客学院_极客奔跑
  7. 怎么申请企业电子邮箱?TOM企业邮箱注册电子邮件流程详解
  8. 【MySQL】多表联合查询、连接查询、子查询
  9. 高项.十大管理47个过程
  10. element ui 表格内容 合计