《计算机视觉中的多视图几何》笔记(12)
12 Structure Computation
本章讲述如何在已知基本矩阵 F F F和两幅图像中若干对对应点 x ↔ x ′ x \leftrightarrow x' x↔x′的情况下计算三维空间点 X X X的位置。
文章目录
- 12 Structure Computation
- 12.1 Problem statement
- 12.2 Linear triangulation methods
- 12.3 Geometric error cost function
- 12.4 Sampson approximation (first-order geometric correction)
- 12.5 An optimal solution
- 12.5.1 Reformulation of the minimization problem
- 12.5.2 Details of the minimization
- 12.5.3 Local minima
- 12.5.4 Evaluation on real images
- 12.6 Probability distribution of the estimated 3D point
- 12.7 Line Reconstruction
12.1 Problem statement
我们假设已知摄像机矩阵 P P P和 P ′ P' P′,基本矩阵 F F F,还有两幅图像中若干对对应点 x ↔ x ′ x \leftrightarrow x' x↔x′。因为有噪声的存在,图像中的点反投影回去的两条射线不一定相交, x F x ′ xFx' xFx′也不一定等于0,所以简单三角化不一定可行。
我们先回忆一下第10章三维重建的知识。我们介绍了好几种不同种类的三维重建,这取决于我们对摄像机矩阵的知晓程度。那么结合本章的三角化,我们希望三角化在不同种类的重建之间能给出同样的结果。我们首先用 τ \tau τ来代表三角化的过程,如果 τ \tau τ能满足下式,那么我们就说三角化在变换 H H H下是不变的:
τ ( x , x ′ , P , P ′ ) = H − 1 τ ( x , x ′ , P H − 1 , P ′ H − 1 ) \tau(x,x',P,P') = H^{-1}\tau(x,x',PH^{-1},P'H^{-1}) τ(x,x′,P,P′)=H−1τ(x,x′,PH−1,P′H−1)
为什么需要讨论这个?这是因为我们首先需要确定三维重建的种类,才能决定优化目标的形式。如果我们只知道摄像机矩阵是一个projective matrix,那么我们就不能在三维空间最优化目标函数。因为这样的优化函数在投影变换中不能给出唯一的结果,因为距离和垂直度等概念在projective geometry的背景下无效。所以,本章给出的三角化方法优化的是二维图像上的距离,所以本章的方法在投影变换(projective transformation)中是不变的。

12.2 Linear triangulation methods
对于两幅图像,我们分别有 x = P X , x ′ = P X ′ x=PX,x'=PX' x=PX,x′=PX′,我们可以将第一个方程改成 x × P X = 0 x \times PX=0 x×PX=0,第二幅图也一样。我们继续改写就可以有 A X = 0 AX=0 AX=0。
Homogeneous method 找出 A A A最小特征值对应的特征向量
Inhomogeneous method 参见4.1.2节,原书P90
讨论
Inhomogeneous method假设点不在无穷远处,不适合projective reconstruction。其实这两个方法都不适合。
Inhomogeneous method适合affine reconstruction。
Homogeneous method不适合affine reconstruction。
12.3 Geometric error cost function

由于图像中有噪声的存在, x ↔ x ′ x \leftrightarrow x' x↔x′其实不能满足极线的约束,我们用 x ˉ , x ′ ˉ \bar{x},\bar{x'} xˉ,x′ˉ表示没有噪声的点。那么我们可以构建以下优化函数:
C ( x , x ′ ) = d ( x , x ^ ) 2 + d ( x ′ , x ^ ′ ) 2 s u b j e c t t o x ′ ^ T F x ^ = 0 C(x,x') = d(x,\hat{x})^2 + d(x',\hat{x}')^2 \\ subject \ to \ \hat{x'}^{T}F\hat{x} = 0 C(x,x′)=d(x,x^)2+d(x′,x^′)2subject to x′^TFx^=0
其中 d d d表示两点之间的欧氏距离。这相当于最小化点 X X X的重投影误差,该点 X X X通过与 F F F一致的投影矩阵映射到两个点,如图12.2。
12.4 Sampson approximation (first-order geometric correction)

我们定义 X X X与 X ^ \hat{X} X^之间的差为 δ X \delta_X δX:
δ X = − J T ( J J T ) − 1 ϵ \delta_X = -J^T(JJ^T)^{-1} \epsilon δX=−JT(JJT)−1ϵ
其中
ϵ = x ′ T F x J = ∂ ϵ / ∂ x = [ ( F T x ′ ) 1 , ( F T x ′ ) 2 , ( F X ) 1 , ( F X ) 2 ] \epsilon = x'^{T}Fx \\ J = \partial \epsilon/ \partial x=[(F^{T}x')_{1}, (F^{T}x')_{2},(FX)_{1},(FX)_{2}] ϵ=x′TFxJ=∂ϵ/∂x=[(FTx′)1,(FTx′)2,(FX)1,(FX)2]
其中 ( F T x ′ ) 1 = f 11 x ′ + f 21 y ′ + f 31 (F^{T}x')_{1}=f_{11}x'+f_{21}y'+f_{31} (FTx′)1=f11x′+f21y′+f31,以此类推。
所以我们可以看出该差值其实是基本矩阵方程关于 x x x的导数
那么 X X X和 X ^ \hat{X} X^之间的关系可以写成:
X ^ = X + δ X \hat{X} = X + \delta_X X^=X+δX
我们只需要把 δ X \delta_X δX算出来,然后对计算出的理论点 X X X按照上式进行一个纠正就可以了。

12.5 An optimal solution
本节介绍一种可以找到全局最优解的优化函数,并且是非迭代的,我们同时假设噪声服从高斯分布。
12.5.1 Reformulation of the minimization problem
先对问题进行一个梳理。
我们知道第一幅图的极点一定在极线上,第二幅图的极点也满足这个性质。反过来,在极线上的点也满足基本矩阵的约束。那么就能让观测到的点尽可能靠近极线,也就是找观测点到极线的距离,并使其最小。
所以我们就可以构建出以下损失函数
d ( x , l ) 2 + d ( x ′ + l ′ ) 2 d(x,l)^2 + d(x'+l')^2 d(x,l)2+d(x′+l′)2
我们的策略如下:
- 将极线方程参数化,所以第一幅图像中的极线方程就可以写为 l ( t ) l(t) l(t)
- 利用基本矩阵 F F F,和 l ( t ) l(t) l(t)来计算第二幅图像中的极线l ′ ( t ) '(t) ′(t)
- 将损失函数写成 d ( x , l ( t ) ) 2 + d ( x ′ + l ′ ( t ) ) 2 d(x,l(t))^2 + d(x'+l'(t))^2 d(x,l(t))2+d(x′+l′(t))2
- 求解最优的 t t t
12.5.2 Details of the minimization
接下来我们讲一下需要注意的一些细节。
首先,两幅图中对应点都不能与极点重合。
并且,我们可以对两幅图都做一个刚体变换,那么 x , x ′ x,x' x,x′就可以被放置在原点 ( 0 , 0 , 1 ) (0,0,1) (0,0,1),那么两幅图的极点分别是 ( 1 , 0 , f ) , ( 1 , 0 , f ′ ) (1,0,f),(1,0,f') (1,0,f),(1,0,f′)。我们知道极点也是要满足 F F F的,所以我们有 F ( 1 , 0 , f ) T = ( 1 , 0 , f ′ ) F = 0 F(1,0,f)^T = (1,0,f')F = 0 F(1,0,f)T=(1,0,f′)F=0,如此以来我们就可以把基本矩阵表示为一种特殊形式:
F = [ f f ′ d − f ′ c − f ′ d − f b a b − f d c d ] F = \left[ \begin{matrix} ff'd & -f'c & -f'd \\ -fb & a & b\\ -fd & c & d \\ \end{matrix} \right] F= ff′d−fb−fd−f′cac−f′dbd
同时我们也知道极线会通过极点 ( 1 , 0 , f ) (1,0,f) (1,0,f),我们再找一个特殊点,那就是极线与 y y y轴的交点 ( 0 , t , 1 ) (0,t,1) (0,t,1),所以极线就可以写成 ( 1 , 0 , f ) × ( 0 , t , 1 ) = ( t f , 1 , − t ) (1,0,f) \times (0,t,1) = (tf,1,-t) (1,0,f)×(0,t,1)=(tf,1,−t),那么该直线到原点的距离就是:
d ( x , l ( t ) ) 2 = t 2 1 + ( t f ) 2 d(x,l(t))^2 = \frac{t^2}{1+(tf)^2} d(x,l(t))2=1+(tf)2t2
紧接着我们找下一个极线:
l ′ ( t ) = F ( 0 , t , 1 ) T = ( − f ′ ( c t + d ) , a t + b , c t + d ) T l'(t) = F(0,t,1)T=(-f'(ct+d),at+b,ct+d)^T l′(t)=F(0,t,1)T=(−f′(ct+d),at+b,ct+d)T
该极线到原点的距离:
d ( x ′ , l ′ ( t ) ) 2 = ( c t + d ) 2 ( a t + v ) 2 + f ′ 2 ( c t + d ) 2 d(x',l'(t))^2 = \frac{(ct+d)^2}{(at+v)^2 +f'^2(ct+d)^2} d(x′,l′(t))2=(at+v)2+f′2(ct+d)2(ct+d)2
于是我们把 d ( x ′ , l ′ ( t ) ) 2 , d ( x , l ( t ) ) 2 d(x',l'(t))^2, d(x,l(t))^2 d(x′,l′(t))2,d(x,l(t))2 加在一起,记为 s ( t ) s(t) s(t)求导数,令导数等于0,就可以了。
一些讨论 s ( t ) s(t) s(t)是6次多项式,那么它就有6个实根,对应于3个最小值和3个最大值。顺便别忘了检查 x → ∞ x \rightarrow \infty x→∞的情况。
下面我们把整个算法流程重复一遍,对应于P318算法12.1。
算法输入:观测到的对应点 x ↔ x ′ x \leftrightarrow x' x↔x′,基本矩阵 F F F
算法输出:寻找一对 x ^ ↔ x ^ ′ \hat{x} \leftrightarrow \hat{x}' x^↔x^′可以使几何损失函数最小,同时这一对点满足 x ^ ′ T F x ^ = 0 \hat{x}'^{T}F\hat{x} = 0 x^′TFx^=0
算法步骤:
-
定义一对转换矩阵,可以把 x = ( x , y , 1 ) T , x ′ = ( x ′ , y ′ , t ) T x=(x,y,1)^{T},x'=(x',y',t)^{T} x=(x,y,1)T,x′=(x′,y′,t)T转换到原点
T = [ 1 − x 1 − y 1 ] T=\left[ \begin{matrix} 1 & & -x \\ &1 & -y \\ & & 1\\ \end{matrix} \right] T= 11−x−y1 T ′ T' T′的形式与 T T T是类似的
-
将基本矩阵 F F F变成 T ′ − T F T − 1 T'^{-T}FT^{-1} T′−TFT−1
-
计算左极点 e = ( e 1 , e 2 , e 3 ) e=(e_1,e_2,e_3) e=(e1,e2,e3)和右极点 e ′ = ( e 1 ′ , e 2 ′ , e 3 ′ ) e'=(e'_1,e'_2,e'_3) e′=(e1′,e2′,e3′),并且归一化,使得 e 1 + e 2 = 1 e_1+e_2=1 e1+e2=1
-
构造两个旋转矩阵,这两个矩阵可以把 e e e旋转到 ( 1 , 0 , e 3 ) (1,0,e_3) (1,0,e3) ( 1 , 0 , e 3 ′ ) (1,0,e'_3) (1,0,e3′).
R = [ e 1 e 2 − e 2 e 1 1 ] R=\left[ \begin{matrix} e_1 &e_2 & \\ -e_2 &e_1 & \\ & & 1\\ \end{matrix} \right] R= e1−e2e2e11
R ′ R' R′与 R R R类似 -
把 F F F改成 R ′ F R T R'FR^{T} R′FRT
-
设置以下等式 f = e 3 , f ′ = e 3 , a = F 22 , b = F 23 , c = F 32 , d = F 33 f=e_3,f'=e_3,a=F_{22},b=F_{23},c=F_{32},d=F_{33} f=e3,f′=e3,a=F22,b=F23,c=F32,d=F33
-
将第6步中的等式带入 s ( t ) s(t) s(t)中,求解t
-
对求得的解进行验证,同时检查 t → ∞ t \rightarrow \infty t→∞ 的情况
-
将 t t t带入极线方程,找到 x ^ , x ^ ′ \hat{x},\hat{x}' x^,x^′,极线知道了,观测点 x , x ′ x,x' x,x′也知道,求直线上某个点,它要满足到已知点距离最近,由于我们把 x , x ′ x,x' x,x′转到了原点,那么问题就转变成了直线上求某一点,它到原点距离最近。书中给出了一个公式,对于一个一般的直线 ( λ , μ , ν ) (\lambda, \mu, \nu) (λ,μ,ν),直线上到原点最近的点是 ( − λ ν , − μ ν , λ 2 + μ 2 ) (-\lambda \nu, -\mu \nu, \lambda^2+\mu^2) (−λν,−μν,λ2+μ2)
-
知道 x ^ , x ^ ′ \hat{x},\hat{x}' x^,x^′后,再把他们旋转到原坐标, x ^ = T − 1 R T x ^ \hat{x} = T^{-1} R^{T} \hat{x} x^=T−1RTx^ x ^ ′ = T − 1 R T x ^ ′ \hat{x}' = T^{-1} R^{T} \hat{x}' x^′=T−1RTx^′
-
可以顺便利用 x ^ , x ^ ′ \hat{x},\hat{x}' x^,x^′计算出三维空间点 X ^ \hat{X} X^(三角化,12.2)
12.5.3 Local minima
g ( t ) g(t) g(t)有6个自由度,所以它最多有三个最小值。那么如果用迭代的方法去寻找最小值,可能陷在局部最小值里出不来。
12.5.4 Evaluation on real images
本节大概展示了一些实验结果,在P320
12.6 Probability distribution of the estimated 3D point
估计三维点的概率分布。
通过两幅图像估计出来的三维空间点应该是满足一定概率分布的。其准确与否主要取决于从摄像机出发的,两条射线之间的角度。本节就对这个问题进行建模。书中为了简化这个问题,只考虑空间某平面上的点 X = ( x , y ) T X=(x,y)^T X=(x,y)T,其图像上的点分别表示为 x = f ( X ) , x ′ = f ′ ( X ) x=f(X), x'=f'(X) x=f(X),x′=f′(X), f , f ′ f,f' f,f′是 2 × 3 2 \times 3 2×3的矩阵,而不是 3 × 4 3 \times 4 3×4 如果忘了可以复习一下p175 6.4.2节
我们线考虑第一幅图像上的点 x x x,并且我们假设噪声服从均值为0,方差为 σ 2 \sigma^2 σ2的高斯分布,那么在已知 X X X的条件下 x x x的概率分布可以表示为 p ( x ∣ X ) p(x|X) p(x∣X),对第二幅图上的点 x ′ x' x′有相同的结论 p ( x ′ ∣ X ) p(x'|X) p(x′∣X)。那么当 x , x ′ x,x' x,x′已知的时候,我们可以用贝叶斯公式反推 X X X的概率分布
p ( X ∣ x , x ′ ) = p ( x , x ′ ∣ X ) p ( X ) / p ( x , x ′ ) p(X|x,x') = p(x,x'|X)p(X) / p(x,x') p(X∣x,x′)=p(x,x′∣X)p(X)/p(x,x′)
再加上 x , x ′ x,x' x,x′独立的假设,上式就可以化成
p ( X ∣ x , x ′ ) ∼ p ( x ∣ X ) p ( x ′ ∣ X ) p(X|x,x') \sim p(x|X)p(x'|X) p(X∣x,x′)∼p(x∣X)p(x′∣X)
12.7 Line Reconstruction
我们现在要重建空间中的一个线段。它在两幅图像上分别表示为 l , l ′ l, l' l,l′。我们可以把 l , l ′ l,l' l,l′反投影回去,那么他们在空间中就是两个平面 π , π ′ \pi, \pi' π,π′, 这两个平面的交点就是所求直线。我们可以形式化的表示为 π = P T l , π ′ = P ′ T l ′ \pi = P^Tl, \pi' = P'^T l' π=PTl,π′=P′Tl′,那么三维空间中的线就可以用这两个平面来表示 ( L L L是一个 2 × 4 2 \times 4 2×4的矩阵)
L = [ l T P l ′ T P ′ ] L = \left[ \begin{matrix} l^T P \\ l'^T P' \end{matrix} \right] L=[lTPl′TP′]
空间中的点 X X X在 L L L上,所以 L X = 0 LX=0 LX=0


退化的情况
如果这个直线在极平面上,那么上一节的方法就失效了,而且这样直线会和基线相交。在实际情况下,几乎要和基线相交的线也不能用以上方法来重建.
多平面相交的重建
假设有 n n n个平面,那么我们就他们像前文 L L L一样放在一起,形成一个 n × 4 n \times 4 n×4的矩阵 A A A。对 A A A做SDV分解 A = U D V T A=UDV^T A=UDVT,从 D D D中找出两个最大的特征值对应的特征向量,用他们来表示平面,也可以假设空间中直线 L L L投影到各个平面,然后计算投影直线和观测直线之间的几何损失函数,用极大似然估计求解。
相关文章:
《计算机视觉中的多视图几何》笔记(12)
12 Structure Computation 本章讲述如何在已知基本矩阵 F F F和两幅图像中若干对对应点 x ↔ x ′ x \leftrightarrow x x↔x′的情况下计算三维空间点 X X X的位置。 文章目录 12 Structure Computation12.1 Problem statement12.2 Linear triangulation methods12.3 Geomet…...
TFT LCD刷新原理及LCD时序参数总结(LCD时序,写的挺好)
cd工作原理目前不了解,日后会在博客中添加这一部分的内容。 1.LCD工作原理[1] 我对LCD的工作原理也仅仅处在了解的地步,下面基于NXP公司对LCD工作原理介绍的ppt来学习一下。 LCD(liquid crystal display,液晶显示屏) 是由液晶段阵列组成,当…...
基于Java的电影院购票系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…...
Linux基础指令(六)
目录 前言1. man 指令2. date 指令3. cal 指令4. bc 指令5. uname 指令结语: 前言 欢迎各位伙伴来到学习 Linux 指令的 第六天!!! 在上一篇文章 Linux基本指令(五) 中,我们通过一段故事线,带大家感性的了…...
Anderson-Darling正态性检验【重要统计工具】
Anderson-Darling正态性检验是一种用于确定数据集是否服从正态分布(也称为高斯分布或钟形曲线分布)的统计方法。它基于Anderson和Darling于1954年提出的检验统计量。该检验的基本原理和用途如下: 基本原理: 零假设(Nu…...
Ubuntu基于Docker快速配置GDAL的Python、C++环境
本文介绍在Linux的Ubuntu操作系统中,基于Docker快速配置Python、C等不同编程语言均可用的地理数据处理库GDAL的方法。 首先,我们访问GDAL库的Docker镜像官方网站(https://github.com/OSGeo/gdal/tree/master/docker)。其中&#x…...
<C++> 哈希表模拟实现STL_unordered_set/map
哈希表模板参数的控制 首先需要明确的是,unordered_set是K模型的容器,而unordered_map是KV模型的容器。 要想只用一份哈希表代码同时封装出K模型和KV模型的容器,我们必定要对哈希表的模板参数进行控制。 为了与原哈希表的模板参数进行区分…...
【数据结构与算法】通过双向链表和HashMap实现LRU缓存 详解
这个双向链表采用的是有伪头节点和伪尾节点的 与上一篇文章中单链表的实现不同,区别于在实例化这个链表时就初始化了的伪头节点和伪尾节点,并相互指向,在第一次添加节点时,不需要再考虑空指针指向问题了。 /*** 通过链表与HashMa…...
MySQL的内置函数
文章目录 1. 聚合函数2. group by子句的使用3. 日期函数4. 字符串函5. 数学函数6. 其它函数 1. 聚合函数 COUNT([DISTINCT] expr) 返回查询到的数据的数量 用SELECT COUNT(*) FROM students或者SELECT COUNT(1) FROM students也能查询总个数。 统计本次考试的数学成绩分数去…...
数据结构与算法-(7)---栈的应用-(3)表达式转换
🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…...
Lilliefors正态性检验(一种非参数统计方法)
Lilliefors检验(也称为Kolmogorov-Smirnov-Lilliefors检验)是一种用于检验数据是否符合正态分布的统计检验方法,它是Kolmogorov-Smirnov检验的一种变体,专门用于小样本情况。与K-S检验不同,Lilliefors检验不需要假定数…...
【云原生】配置Kubernetes CronJob自动备份MySQL数据库(单机版)
文章目录 每天自动备份数据库MySQL【云原生】配置Kubernetes CronJob自动备份Clickhouse数据库 每天自动备份数据库 MySQL 引用镜像:databack/mysql-backup,使用文档:https://hub.docker.com/r/databack/mysql-backup 测试、开发环境:每天0点40分执行全库备份操作,备份文…...
基于PSO算法的功率角摆动曲线优化研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
数论知识点总结(一)
文章目录 目录 文章目录 前言 一、数论有哪些 二、题法混讲 1.素数判断,质数,筛法 2.最大公约数和最小公倍数 3.快速幂 4.约数 前言 现在针对CSP-J/S组的第一题主要都是数论,换句话说,持数论之剑,可行天下矣! 一、数论有哪些 数论 原根,素数判断,质数,筛法最大公约数…...
知识分享 钡铼网关功能介绍:使用SSLTLS 加密,保证MQTT通信安全
背景 为了使不同的设备或系统能够相互通信,让旧有系统和新的系统可以集成,通信更加灵活和可靠。以及将数据从不同的来源收集并传输到不同的目的地,实现数据的集中管理和分发。 通信网关完美克服了这一难题,485或者网口的设备能通过…...
asp.net core mvc区域路由
ASP.NET Core 区域路由(Area Routing)是一种将应用程序中的路由划分为多个区域的方式,类似于 MVC 的控制器和视图的区域划分。区域路由可以帮助开发人员更好地组织应用程序的代码和路由,并使其更易于维护。 要使用区域路由&#…...
KNN(下):数据分析 | 数据挖掘 | 十大算法之一
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…...
Servlet开发-session和cookie理解案例-登录页面
项目展示 进入登录页面,输入正确的用户名和密码以后会自动跳到主页 登录成功以后打印用户名以及上次登录的时间,如果浏览器和客户端都保存有上次登录的信息,则不需要登录就可以进入主页 编码思路 1.首先提供一个登录的前端页面&…...
Polygon Miden:扩展以太坊功能集的ZK-optimized rollup
1. 引言 Polygon Miden定位为zkVM,定于2023年Q4上公开测试网。 zk、zkVM、zkEVM及其未来中指出,当前主要有3种类型的zkVM,括号内为其相应的指令集: mainstream(WASM, RISC-V)EVM(EVM bytecod…...
[题]宝物筛选 #单调队列优化
五、宝物筛选(洛谷P1776) 题目链接 好家伙,找到了一个之前学习多重背包优化时的错误…… 之前记的笔记还是很有用的…… #include<bits/stdc.h> using namespace std; const int N 1e5 10; int f[N]; int n, m; int v, w, s; int l…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。
2024 年,高端封装市场规模为 80 亿美元,预计到 2030 年将超过 280 亿美元,2024-2030 年复合年增长率为 23%。 细分到各个终端市场,最大的高端性能封装市场是“电信和基础设施”,2024 年该市场创造了超过 67% 的收入。…...
