《计算机视觉中的多视图几何》笔记(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…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...