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

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

相关文章

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN