[三维重建] 对极几何约束、本质矩阵、基础矩阵、单应矩阵

2023-10-08 06:20

本文主要是介绍[三维重建] 对极几何约束、本质矩阵、基础矩阵、单应矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、对极几何约束在这里插入图片描述

假设相机从 O 1 O_1 O1经过旋转平移运动, R , t R,t Rt,到达新的位置 O 2 O_2 O2 I 1 , I 2 I_1,I_2 I1I2分别为相机在两个位置的成像平面,空间中同一点 P P P,在两个成像平面上的投影分别为 p 1 , p 2 p_1,p_2 p1p2

极平面: O 1 , P , O 2 O_1,P,O_2 O1PO2三点确定的平面( Δ O 1 P O 2 \Delta O_1PO_2 ΔO1PO2所在的平面)
极点: O 1 , O 2 O_1,O_2 O1O2连线与两个成像平面 I 1 , I 2 I_1,I_2 I1I2的交点 e 1 , e 2 e_1,e_2 e1e2
基线:两个相机光心的连线 O 1 O 2 O_1O_2 O1O2
极线:极平面与两个成像平面之间的相交线 l 1 , l 2 l_1,l_2 l1l2

1、本质矩阵

假设在第一帧所在坐标系下,点P的坐标为:
P = [ X Y Z ] P=\begin{bmatrix} X\\ Y\\ Z\\ \end{bmatrix} P= XYZ
根据针孔相机模型的投影公式,两个成像平面上像素点 p 1 , p 2 p_1,p_2 p1p2的坐标位置为:
s 1 p 1 = K P (1) s_1p_1=KP\tag{1} s1p1=KP(1)
s 2 p 2 = K ( R P + t ) (2) s_2p_2=K(RP+t)\tag{2} s2p2=K(RP+t)(2)
这里, K K K 3 × 3 3×3 3×3的相机内参数矩阵; R , t R,t Rt为相机的运动,具体来说,这里应该是 R 21 , t 21 R_{21},t_{21} R21t21,将 O 1 O_1 O1坐标系下的坐标 P P P转换到了 O 2 O_2 O2坐标系下的坐标 ( R 21 P + t 21 ) (R_{21}P+t_{21}) (R21P+t21) s 1 s_1 s1为深度信息,即空间点 P P P到相机光心 O 1 O_1 O1的距离, s 2 s_2 s2则为空间点 P P P到相机光心 O 2 O_2 O2的距离,两者并不相等; p 1 , p 2 p_1,p_2 p1p2 3 × 1 3\times 1 3×1的齐次坐标形式, P P P 3 × 1 3\times 1 3×1的欧氏坐标形式。

根据针孔相机模型的投影公式:
Z [ u v 1 ] = K [ X Y Z ] Z\begin{bmatrix}u\\v\\1\end{bmatrix}=K\begin{bmatrix}X\\Y\\Z\end{bmatrix} Z uv1 =K XYZ
令等式两边同时乘 1 Z \frac{1}{Z} Z1
[ u v 1 ] = K [ X Z Y Z 1 ] \begin{bmatrix}u\\v\\1\end{bmatrix}=K\begin{bmatrix}\frac{X}{Z}\\\\\frac{Y}{Z}\\\\1\end{bmatrix} uv1 =K ZXZY1
令等式两边同时左乘 K − 1 K^{-1} K1
K − 1 [ u v 1 ] = [ X Z Y Z 1 ] K^{-1}\begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}\frac{X}{Z}\\\\\frac{Y}{Z}\\\\1\end{bmatrix} K1 uv1 = ZXZY1
可以看出,对像素点二维坐标的齐次坐标左乘 K − 1 K^{-1} K1后,并不能恢复到空间点的三维坐标 [ X Y Z ] \begin{bmatrix} X\\ Y\\ Z\\ \end{bmatrix} XYZ ,而是得到这个三维坐标在归一化平面( Z = 1 的平面 Z=1的平面 Z=1的平面)上的坐标: [ X Z Y Z 1 ] \begin{bmatrix}\frac{X}{Z}\\\\\frac{Y}{Z}\\\\1\end{bmatrix} ZXZY1

现在,取:
x 1 = K − 1 p 1 (3) x_1=K^{-1}p_1\tag{3} x1=K1p1(3)
x 2 = K − 1 p 2 (4) x_2=K^{-1}p_2\tag{4} x2=K1p2(4)

可知, x 1 , x 2 x_1,x_2 x1x2是两个像素点的归一化平面上的坐标。

联立式(1)(2)(3)(4):

s 2 p 2 = K ( R P + t ) s_2p_2=K(RP+t) s2p2=K(RP+t)等式两边左乘 K − 1 K^{-1} K1
K − 1 s 2 p 2 = R P + t K^{-1}s_2p_2=RP+t K1s2p2=RP+t
s 2 K − 1 p 2 = R P + t s_2K^{-1}p_2=RP+t s2K1p2=RP+t
s 2 x 2 = R P + t (5) s_2x_2=RP+t\tag{5} s2x2=RP+t(5)
s 1 p 1 = K P s_1p_1=KP s1p1=KP等式两边左乘 K − 1 K^{-1} K1
K − 1 s 1 p 1 = P K^{-1}s_1p_1=P K1s1p1=P
s 1 K − 1 p 1 = P s_1K^{-1}p_1=P s1K1p1=P
s 1 x 1 = P s_1x_1=P s1x1=P
s 1 x 1 = P s_1x_1=P s1x1=P代入式(5),得:
s 2 x 2 = R s 1 x 1 + t s_2x_2=Rs_1x_1+t s2x2=Rs1x1+t
在等式两侧同时左乘 t ∧ t^{\wedge} t
s 2 t ∧ x 2 = s 1 t ∧ R x 1 + t ∧ t = s 1 t ∧ R x 1 ( 后面那块 t × t 的结果是零向量,所以没有了 ) s_2t^{\wedge}x_2=s_1t^{\wedge}Rx_1+t^{\wedge}t\\ =s_1t^{\wedge}Rx_1\\ (后面那块t\times t的结果是零向量,所以没有了) s2tx2=s1tRx1+tt=s1tRx1(后面那块t×t的结果是零向量,所以没有了)
∧ ^{\wedge} 的定义:在《视觉SLAM十四讲》中, a ∧ a^{\wedge} a是与向量 a a a一一对应的一个反对称矩阵, a ∧ b = a × b a^{\wedge}b=a\times b ab=a×b,实际上就是一个叉乘的矩阵表达形式,在某些地方 a ∧ a^{\wedge} a也可能写成 a × a_{×} a×,知道是同一个意思就好

上式中,再同时左乘 x 2 T x_2^T x2T
s 2 x 2 T t ∧ x 2 = s 1 x 2 T t ∧ R x 1 s_2x_2^Tt^{\wedge}x_2=s_1x_2^Tt^{\wedge}Rx_1 s2x2Ttx2=s1x2TtRx1
观察上述等式的左侧, t ∧ x 2 t^{\wedge}x_2 tx2的结果是一个与 t , x 2 t,x_2 tx2均垂直的向量,左乘 x 2 T x_2^T x2T相当于 x 2 x_2 x2点乘向量 t ∧ x 2 t^{\wedge}x_2 tx2。由于向量 t ∧ x 2 t^{\wedge}x_2 tx2必定与 x 2 x_2 x2垂直,因此 x 2 x_2 x2点乘向量 t ∧ x 2 t^{\wedge}x_2 tx2的结果自然是0。
s 2 s 1 x 2 T t ∧ x 2 = x 2 T t ∧ R x 1 \frac{s_2}{s_1}x_2^Tt^{\wedge}x_2=x_2^Tt^{\wedge}Rx_1 s1s2x2Ttx2=x2TtRx1
由于 x 2 T t ∧ x 2 = 0 x_2^Tt^{\wedge}x_2=0 x2Ttx2=0 s 1 , s 2 s_1,s_2 s1s2是常数,最终得到结果:
x 2 T t ∧ R x 1 = 0 (6) x_2^Tt^{\wedge}Rx_1=0\tag{6} x2TtRx1=0(6)
将式(6)的中间部分 t ∧ R t^{\wedge}R tR记作 E E E ,即本质矩阵:
x 2 T E x 1 = 0 x_2^TEx_1=0 x2TEx1=0

从式子中可以看到,本质矩阵约束了空间中同一个三维点,在两个归一化平面坐标之间的联系

2、基础矩阵

再将归一化坐标与像素点坐标的关系 x 1 = K − 1 p 1 x_1=K^{-1}p_1 x1=K1p1 x 2 = K − 1 p 2 x_2=K^{-1}p_2 x2=K1p2 代入式(6),得:
( K − 1 p 2 ) T t ∧ R K − 1 p 1 = 0 (K^{-1}p_2)^Tt^{\wedge}RK^{-1}p_1=0 (K1p2)TtRK1p1=0
p 2 T K − T t ∧ R K − 1 p 1 = 0 (7) p_2^TK^{-T}t^{\wedge}RK^{-1}p_1=0\tag{7} p2TKTtRK1p1=0(7)
将式(7)的中间部分 K − T t ∧ R K − 1 K^{-T}t^{\wedge}RK^{-1} KTtRK1记作 F F F ,即基础矩阵:
p 2 T F p 1 = 0 p_2^TFp_1=0 p2TFp1=0
从式子中可以看到,基础矩阵约束了空间中同一个三维点,在两个成像平面上,像素坐标之间的联系,记住这里的 p 1 , p 2 p_1,p_2 p1p2 3 × 1 3\times 1 3×1 的齐次坐标形式。

可以看出,基础矩阵 F F F 与本质矩阵 E E E 之间只相差相机内参数矩阵 K K K
F = K − T E K − 1 F=K^{-T}EK^{-1} F=KTEK1

3、单应矩阵

(1)前置知识:

平面的表示形式:
n T P + d = 0 n^TP+d=0 nTP+d=0
其中,n是平面的单位法向量,P是平面上一点,d是该平面距离坐标原点的有向距离,如果平面面向原点,则d为正,如果平面背向原点,则d为负。

推导:来自于平面的一般式
A x + B y + C z + D = 0 Ax+By+Cz+D=0 Ax+By+Cz+D=0
一般式中,(A,B,C)为平面的法向量,(x,y,z)为平面上任意一点。而D实际是平面距原点的有向距离。

(0,0,0)到平面的距离:
d = ∣ A × 0 + B × 0 + C × 0 + D ∣ A 2 + B 2 + C 2 = ∣ D ∣ 1 = ∣ D ∣ d=\frac{|A×0+B×0+C×0+D|}{\sqrt{A^2+B^2+C^2}}=\frac{|D|}{1}=|D| d=A2+B2+C2 A×0+B×0+C×0+D=1D=D
在这里,d是无向距离,D是有向距离,有正负的。

所以,由一般式:
A x + B y + C z + 有向距离 = 0 Ax+By+Cz+有向距离=0 Ax+By+Cz+有向距离=0
n T P + 有向距离 = 0 n^TP+有向距离=0 nTP+有向距离=0

(2)单应矩阵:

单应矩阵用于描述处于共同平面上的一些点(三维空间中)在两张图像(二维图像)之间的对应关系。
在这里插入图片描述
如上图所示,空间中存在一平面Π,平面的单位法向量为n,平面上一点P在两台摄像机所拍摄到的图像上的投影为 p 1 , p 2 p_1,p_2 p1p2

设平面Π满足方程:
n T P + d = 0 n^TP+d=0 nTP+d=0
− n T P d = 1 -\frac{n^TP}{d}=1 dnTP=1
由于P在图像 I 2 I_2 I2上的投影为 p 2 p_2 p2
s 2 p 2 = K ( R P + t ) s_2p_2=K(RP+t) s2p2=K(RP+t)
= K ( R P + t ⋅ ( − n T P d ) ) =K(RP+t·(-\frac{n^TP}{d})) =K(RP+t(dnTP))
将P提公因式:
= K ( R − t n T d ) P =K(R-\frac{tn^T}{d})P =K(RdtnT)P
由于:
s 1 p 1 = K P s_1p_1=KP s1p1=KP
s 1 K − 1 p 1 = P s_1K^{-1}p_1=P s1K1p1=P
有:
s 2 p 2 = K ( R − t n T d ) s 1 K − 1 p 1 s_2p_2=K(R-\frac{tn^T}{d})s_1K^{-1}p_1 s2p2=K(RdtnT)s1K1p1
s 2 s 1 p 2 = K ( R − t n T d ) K − 1 p 1 \frac{s_2}{s_1}p_2=K(R-\frac{tn^T}{d})K^{-1}p_1 s1s2p2=K(RdtnT)K1p1

s 1 , s 2 s_1,s_2 s1s2 为尺度,在尺度等价下,有:

p 2 ≅ K ( R − t n T d ) K − 1 p 1 p_2\cong K(R-\frac{tn^T}{d})K^{-1}p_1 p2K(RdtnT)K1p1


K ( R − t n T d ) K − 1 = H K(R-\frac{tn^T}{d})K^{-1}=H K(RdtnT)K1=H
即单应矩阵

p 2 ≅ H p 1 p_2\cong Hp_1 p2Hp1

观察 H H H 的形式能发现,单应矩阵的定义中包含了摄像机的旋转、平移以及平面的相关参数。

4、总结

本质矩阵

x 2 T E x 1 = 0 x_2^TEx_1=0 x2TEx1=0
E = t ∧ R E=t^{\wedge}R E=tR
本质矩阵约束了空间中同一个三维点,在两个归一化平面坐标之间的联系。(归一化平面即Z=1的平面)

基础矩阵

p 2 T F p 1 = 0 p_2^TFp_1=0 p2TFp1=0
F = K − T t ∧ R K − 1 F=K^{-T}t^{\wedge}RK^{-1} F=KTtRK1
F = K − T E K − 1 F=K^{-T}EK^{-1} F=KTEK1
基础矩阵约束了空间中同一个三维点,在两个成像平面上的像素坐标之间的联系。

且基础矩阵 F F F 与本质矩阵 E E E 之间只相差相机内参数矩阵 K K K

单应矩阵

p 2 ≅ H p 1 p_2\cong Hp_1 p2Hp1
H = K ( R − t n T d ) K − 1 H=K(R-\frac{tn^T}{d})K^{-1} H=K(RdtnT)K1
单应矩阵约束了空间中处于某一已知平面上的同一个三维点,在两个成像平面上的像素坐标之间的联系

二、本质矩阵求解

本质矩阵的自由度: E = t ∧ R E=t^{\wedge}R E=tR,是一个 3 × 3 3\times 3 3×3的矩阵,内有9个未知数,因此存在9个自由度。

1.八点法

由于对极约束 x 2 T E x 1 = 0 x_2^TEx_1=0 x2TEx1=0 是等式为零的约束,意思是中间的本质矩阵 E E E 即使经过任意常数 k k k 倍的缩放,等式仍然成立: x 2 T k E x 1 = 0 x_2^TkEx_1=0 x2TkEx1=0
意味着本质矩阵 E E E 与它的 k k k 倍缩放 k E kE kE 是等价效果的,即 E E E 在不同尺度下是等价的:
E ≃ k E E\simeq kE EkE
由于这种性质,可以将 E E E 中所有元素均除以矩阵内任意一个非零元素,如 e 1 e_1 e1
E = [ e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ] ≃ [ e 1 e 1 e 2 e 1 e 3 e 1 e 4 e 1 e 5 e 1 e 6 e 1 e 7 e 1 e 8 e 1 e 9 e 1 ] ≃ [ 1 e 2 e 1 e 3 e 1 e 4 e 1 e 5 e 1 e 6 e 1 e 7 e 1 e 8 e 1 e 9 e 1 ] E=\begin{bmatrix} e_1&e_2&e_3\\ e_4&e_5&e_6\\ e_7&e_8&e_9 \end{bmatrix}\simeq\begin{bmatrix} \frac{e_1}{e_1}&\frac{e_2}{e_1}&\frac{e_3}{e_1}\\ \frac{e_4}{e_1}&\frac{e_5}{e_1}&\frac{e_6}{e_1}\\ \frac{e_7}{e_1}&\frac{e_8}{e_1}&\frac{e_9}{e_1} \end{bmatrix}\simeq\begin{bmatrix} 1&\frac{e_2}{e_1}&\frac{e_3}{e_1}\\ \frac{e_4}{e_1}&\frac{e_5}{e_1}&\frac{e_6}{e_1}\\ \frac{e_7}{e_1}&\frac{e_8}{e_1}&\frac{e_9}{e_1} \end{bmatrix} E= e1e4e7e2e5e8e3e6e9 e1e1e1e4e1e7e1e2e1e5e1e8e1e3e1e6e1e9 1e1e4e1e7e1e2e1e5e1e8e1e3e1e6e1e9
使其中某个元素处的值为1,从而减少一个自由度

在这种情况下,9个自由度的本质矩阵 E E E 可变成8个自由度

考虑一对匹配点,它们的归一化坐标为 x 1 = [ U 1 V 1 1 ] x_1=\begin{bmatrix}U_1\\V_1\\1\end{bmatrix} x1= U1V11 x 2 = [ U 2 V 2 1 ] x_2=\begin{bmatrix}U_2\\V_2\\1\end{bmatrix} x2= U2V21 ,根据本质矩阵约束有:
x 2 T E x 1 = [ U 2 V 2 1 ] [ e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ] [ U 1 V 1 1 ] = 0 x_2^TEx_1=\begin{bmatrix} U_2&V_2&1 \end{bmatrix} \begin{bmatrix} e_1&e_2&e_3\\ e_4&e_5&e_6\\ e_7&e_8&e_9 \end{bmatrix} \begin{bmatrix} U_1\\V_1\\1 \end{bmatrix}=0 x2TEx1=[U2V21] e1e4e7e2e5e8e3e6e9 U1V11 =0
[ U 2 U 1 U 2 V 1 U 2 V 2 U 1 V 2 V 1 V 2 U 1 V 1 1 ] [ e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ] = 0 \begin{bmatrix} U_2U_1&U_2V_1&U_2&V_2U_1&V_2V_1&V_2&U_1&V_1&1 \end{bmatrix}\begin{bmatrix} e_1\\e_2\\e_3\\e_4\\e_5\\e_6\\e_7\\e_8\\e_9 \end{bmatrix}=0 [U2U1U2V1U2V2U1V2V1V2U1V11] e1e2e3e4e5e6e7e8e9 =0
可见,一对匹配点能得到一条方程,求解一个未知数,针对本质矩阵 E E E 的八个自由度,需要求解八个未知数,即需要八对匹配点,组成一个齐次线性方程组:
[ U 2 1 U 1 1 U 2 1 V 1 1 U 2 1 V 2 1 U 1 1 V 2 1 V 1 1 V 2 1 U 1 1 V 1 1 1 U 2 2 U 1 2 U 2 2 V 1 2 U 2 2 V 2 2 U 1 2 V 2 2 V 1 2 V 2 2 U 1 2 V 1 2 1 ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ U 2 8 U 1 8 U 2 8 V 1 8 U 2 8 V 2 8 U 1 8 V 2 8 V 1 8 V 2 8 U 1 8 V 1 8 1 ] 8 × 9 [ e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ] = 0 \begin{bmatrix} U_2^1U_1^1&U_2^1V_1^1&U_2^1&V_2^1U_1^1&V_2^1V_1^1&V_2^1&U_1^1&V_1^1&1\\ U_2^2U_1^2&U_2^2V_1^2&U_2^2&V_2^2U_1^2&V_2^2V_1^2&V_2^2&U_1^2&V_1^2&1\\ \vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots\\ U_2^8U_1^8&U_2^8V_1^8&U_2^8&V_2^8U_1^8&V_2^8V_1^8&V_2^8&U_1^8&V_1^8&1 \end{bmatrix}_{8\times 9}\begin{bmatrix} e_1\\e_2\\e_3\\e_4\\e_5\\e_6\\e_7\\e_8\\e_9 \end{bmatrix}=0 U21U11U22U12U28U18U21V11U22V12U28V18U21U22U28V21U11V22U12V28U18V21V11V22V12V28V18V21V22V28U11U12U18V11V12V18111 8×9 e1e2e3e4e5e6e7e8e9 =0
解上述齐次线性方程组,即可得到本质矩阵 E E E

2.五点法

本质矩阵 E = t ∧ R E=t^{\wedge}R E=tR,根据本质矩阵的定义,平移有3个自由度,旋转有3个自由度,因此本质矩阵可以缩小到6个自由度,再根据八点法中提到的尺度等价约束,可以再缩小一个自由度,最终本质矩阵实际上可以是5个自由度,即由5对匹配点就可以进行求解。

但由于这种做法形式复杂,而从工程实际角度考虑,实际上两幅图片大概率会有非常多对匹配点,甚至多达上百对,从八点法降低到五点法的意义并不明显。

参考:
1.对极几何 Epipolar Geometry
https://zhuanlan.zhihu.com/p/79845576
2.《视觉SLAM十四讲》——高翔、张涛
3.视觉SLAM中,本质矩阵、基础矩阵、单应性矩阵自由度和秩分析。
https://blog.csdn.net/Walking_roll/article/details/119343924
4.SLAM基础知识补充:多视图几何
https://note.youdao.com/ynoteshare1/index.html?id=5e98f487c40ef22f90e1177f29271be5&type=note

这篇关于[三维重建] 对极几何约束、本质矩阵、基础矩阵、单应矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/163295

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 3159 (spfa差分约束最短路) poj 1201

poj 3159: 题意: 每次给出b比a多不多于c个糖果,求n最多比1多多少个糖果。 解析: 差分约束。 这个博客讲差分约束讲的比较好: http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 套个spfa。 代码: #include <iostream>#include <cstdio>#i

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

poj 3169 spfa 差分约束

题意: 给n只牛,这些牛有些关系。 ml个关系:fr 与 to 牛间的距离要小于等于 cost。 md个关系:fr 与 to 牛间的距离要大于等于 cost。 隐含关系: d[ i ] <= d[ i + 1 ] 解析: 用以上关系建图,求1-n间最短路即可。 新学了一种建图的方法。。。。。。 代码: #include <iostream>#include

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念