【立体视觉(三)】之张正友标定法原理

news2024/11/28 8:59:26

【立体视觉(三)】之张正友标定法原理

  • 一、相机标定
  • 二、参数求解
    • 一)闭合解
    • 二)极大似然解
    • 三)考虑相机畸变
  • 三、实验流程

此为个人学习笔记,在各处借鉴了不少好图好文(参考文献在文末),主要是对相关知识进行梳理,以期形成自己的体系。文字表述东拼西凑,符号公式手动输入,若有错误烦请指出。

一、相机标定

所谓标定(calibration),即是由大量观测值拟合参数模型的过程,且在此拟合的参数模型是已知的,所以应尽可能探索能便捷获取大量观测值的方案,如果观测值之间还满足一些其他的几何约束就更有助于求解具体单个参数值。
相机标定,目的是确定相机的内参矩阵 K K K,外参矩阵 R 、 T R、T RT 和畸变系数 k 1 , k 2 , k 3 , p 1 , p 2 k_1,k_2,k_3,p_1,p_2 k1,k2,k3,p1,p2

张氏标定法即提供了一种便捷获取大量观测值的的方案,同时观测值之间还满足一类明显的几何约束(即平面约束),可直接求解出内外参。其操作方式非常简单,只需要拍摄带有标定板图案的平面,即可完成相机标定,使标定难度极大降低,如果不追求高精度,打印一张棋盘格标定板图案粘贴到近似平的硬纸板上即可完成标定,加快了立体视觉的入门和普及,影响深远,是相机标定领域绝对的经典。
暂且先不考虑畸变系数,已知图像坐标 p p p 和世界坐标 P w P_w Pw 之间通过内外参(投影矩阵)建立投影关系:

λ p = K [ R 3 × 3 T 3 × 1 ] [ P w 1 ] = M [ P w 1 ] \lambda {p}=K \begin{bmatrix} {R_{3\times3}}&{T_{3\times1}}\\ \end{bmatrix} \begin{bmatrix} {P_w}\\ {1}\\ \end{bmatrix}=M\begin{bmatrix} {P_w}\\ {1}\\ \end{bmatrix} λp=K[R3×3T3×1][Pw1]=M[Pw1]

r i r_i ri 表示旋转矩阵 R R R 的第 i i i 列,并用 t t t 代替 T 3 × 1 T_{3\times1} T3×1,假定模型平面在世界坐标系的 W = 0 W=0 W=0 平面上(为符号统一,在这里的世界坐标系与之前表述一致,为 P w ( U , V , W ) P_w(U,V,W) Pw(U,V,W) ),则

λ p = K [ r 1 r 2 r 3 t ] [ U V 0 1 ] = K [ r 1 r 2 t ] [ U V 1 ] \lambda {p}=K \begin{bmatrix} r_1&r_2&r_3&t\\ \end{bmatrix} \begin{bmatrix} U\\V\\0\\1 \end{bmatrix}= K \begin{bmatrix} r_1&r_2&t\\ \end{bmatrix} \begin{bmatrix} U\\V\\1 \end{bmatrix} λp=K[r1r2r3t] UV01 =K[r1r2t] UV1

如前所述,世界坐标系平面上的点与其图像上点通过单应矩阵相关:

λ p = H P \lambda {p}=HP λp=HP
此处, p = [ u , v , 1 ] T p=[u,v,1]^T p=[u,v,1]T P = [ U , V , 1 ] P=[U,V,1] P=[U,V,1] H = R [ r 1 , , r 2 , t ] H=R[r_1,,r_2,t] H=R[r1,,r2,t] 3 × 3 3\times 3 3×3 矩阵。依然用 h i h_i hi 来代表 H H H 中的第 i i i 列。有

[ h 1 , h 2 , h 3 ] = Λ K [ r 1 , r 2 , t ] [h_1,h_2,h_3]=\Lambda K[r_1,r_2,t] [h1,h2,h3]=ΛK[r1,r2,t]
其中 Λ \Lambda Λ 是任意标量( Λ \Lambda Λ 的存在是因为齐次坐标的尺度不变性,也可以认为其就等于1,在这里就让它为1,后面不管它了)。 r 1 r_1 r1 r 2 r_2 r2 是旋转矩阵 R R R 的列分量,是一对标准正交基。满足 r 1 T r 2 = 0 , r 1 T r 1 = r 2 T r 2 = 1 r_1^Tr_2=0,r_1^Tr_1=r_2^Tr_2=1 r1Tr2=0,r1Tr1=r2Tr2=1。联系上式:
r 1 = K − 1 h 1 r 2 = K − 1 h 2 r_1=K^{-1}h_1\\r_2=K^{-1}h_2 r1=K1h1r2=K1h2
所以有:
h 1 T K − T K − 1 h 2 = 0 h_1^TK^{-T}K^{-1}h_2=0 h1TKTK1h2=0 h 1 T K − T K − 1 h 1 = h 2 T K − T K − 1 h 2 h_1^TK^{-T}K^{-1}h_1=h_2^TK^{-T}K^{-1}h_2 h1TKTK1h1=h2TKTK1h2

可以看出,单应矩阵 H H H 和内参矩阵 K K K 的元素之间满足两个线性方程约束。单应矩阵有 8 个自由度并且有 6 个外参(3 个用于旋转,3 个用于平移),我们只能获得对内参的 2 个约束。

二、参数求解

按论文结构,从解析解开始,然后是基于极大似然准则的非线性优化技术,最后考虑相机畸变。

一)闭合解

同样,用一个简单的矩阵替换上式中间的部分(常见操作),令
B = K − T K − 1 = [ B 11 B 12 B 13 B 12 B 22 B 23 B 13 B 23 B 33 ] B=K^{-T}K^{-1}=\begin{bmatrix} B_{11}&B_{12}&B_{13}\\B_{12}&B_{22}&B_{23}\\B_{13}&B_{23}&B_{33}\\ \end{bmatrix} B=KTK1= B11B12B13B12B22B23B13B23B33
具体地:
B = [ 1 f x 2 − s f x 2 f y v 0 s − u 0 f y f x 2 f y − s f x 2 f y s 2 f x 2 f y 2 + 1 f y 2 − s ( v 0 s − u 0 f y f x 2 f y 2 ) − v 0 f y 2 v 0 s − u 0 f y f x 2 f y − s ( v 0 s − u 0 f y ) f x 2 f y 2 − v 0 f y 2 ( v 0 s − u 0 f y ) 2 f x 2 f y 2 + v 0 2 f y 2 + 1 ] B=\begin{bmatrix} \Large \frac{1}{f_x^2} & \Large -\frac{s}{f_x^2f_y} & \Large \frac{v_0s-u_0f_y}{f_x^2f_y}\\ \Large-\frac{s}{f_x^2f_y} &\Large \frac{s^2}{f_x^2f_y^2}+\frac{1}{f_y^2} &\Large -\frac{s(v_0s-u_0f_y}{f_x^2f_y^2)} -\frac{v_0}{f_y^2}\\ \Large \frac{v_0s-u_0f_y}{f_x^2f_y} & \Large -\frac{s(v_0s-u_0f_y)}{f_x^2f_y^2} -\frac{v_0}{f_y^2}& \Large\frac{(v_0s-u_0f_y)^2}{f_x^2f_y^2} +\frac{v_0^2}{f_y^2}+1\\ \end{bmatrix} B= fx21fx2fysfx2fyv0su0fyfx2fysfx2fy2s2+fy21fx2fy2s(v0su0fy)fy2v0fx2fyv0su0fyfx2fy2)s(v0su0fyfy2v0fx2fy2(v0su0fy)2+fy2v02+1

上文已设 H H H 的第 i i i 个列向量为 h i = [ h i 1 , h i 2 , h i 3 ] T h_i=[h_{i1},h_{i2},h_{i3}]^T hi=[hi1,hi2,hi3]T 。则有
h i T B h j = [ h i 1 h i 2 h i 3 ] [ B 11 B 12 B 13 B 12 B 22 B 23 B 13 B 23 B 33 ] [ h j 1 h j 2 h j 3 ] = [ h i 1 B 11 + h i 2 B 12 + h i 3 B 13 h i 1 B 12 + h i 2 B 22 + h i 3 B 23 h i 1 B 13 + h i 2 B 23 + h i 3 B 33 ] [ h j 1 h j 2 h j 3 ] h_i^TBh_j=\begin{bmatrix}h_{i1}&h_{i2}&h_{i3}\end{bmatrix} \begin{bmatrix} B_{11}&B_{12}&B_{13}\\B_{12}&B_{22}&B_{23}\\B_{13}&B_{23}&B_{33}\\ \end{bmatrix} \begin{bmatrix}h_{j1}\\h_{j2}\\h_{j3}\end{bmatrix} \\=\begin{bmatrix}h_{i1}B_{11}+h_{i2}B_{12}+h_{i3}B_{13}&h_{i1}B_{12}+h_{i2}B_{22}+h_{i3}B_{23}&h_{i1}B_{13}+h_{i2}B_{23}+h_{i3}B_{33}\end{bmatrix}\begin{bmatrix}h_{j1}\\h_{j2}\\h_{j3}\end{bmatrix} hiTBhj=[hi1hi2hi3] B11B12B13B12B22B23B13B23B33 hj1hj2hj3 =[hi1B11+hi2B12+hi3B13hi1B12+hi2B22+hi3B23hi1B13+hi2B23+hi3B33] hj1hj2hj3 = h i 1 h j 1 B 11 + h i 2 h j 1 B 12 + h i 3 h j 1 B 13 + h i 1 h j 2 B 12 + h i 2 h j 2 B 22 + h i 3 h j 2 B 23 + h i 1 h j 3 B 13 + h i 2 h j 3 B 23 + h i 3 h j 3 B 33 =h_{i1}h_{j1}B_{11}+h_{i2}h_{j1}B_{12}+h_{i3}h_{j1}B_{13}+h_{i1}h_{j2}B_{12}+h_{i2}h_{j2}B_{22}+h_{i3}h_{j2}B_{23}+h_{i1}h_{j3}B_{13}+h_{i2}h_{j3}B_{23}+h_{i3}h_{j3}B_{33} =hi1hj1B11+hi2hj1B12+hi3hj1B13+hi1hj2B12+hi2hj2B22+hi3hj2B23+hi1hj3B13+hi2hj3B23+hi3hj3B33 = [ h i 1 h j 1 h i 1 h j 2 + h i 2 h j 1 h i 2 h j 2 h i 3 h j 1 + h i 1 h j 3 h i 3 h j 2 + h i 2 h j 3 h i 3 h j 3 ] [ B 11 B 12 B 22 B 13 B 23 B 33 ] =\begin{bmatrix}h_{i1}h_{j1}&h_{i1}h_{j2}+h_{i2}h_{j1}&h_{i2}h_{j2}&h_{i3}h_{j1}+h_{i1}h_{j3}&h_{i3}h_{j2}+h_{i2}h_{j3}&h_{i3}h_{j3}\end{bmatrix}\begin{bmatrix}B_{11}\\B_{12} \\B_{22}\\B_{13} \\B_{23} \\B_{33}\end{bmatrix} =[hi1hj1hi1hj2+hi2hj1hi2hj2hi3hj1+hi1hj3hi3hj2+hi2hj3hi3hj3] B11B12B22B13B23B33

b = [ B 11 , B 12 , B 22 , B 13 , B 23 , B 33 ] T b=[B_{11} ,B_{12} ,B_{22},B_{13} ,B_{23} ,B_{33}]^T b=[B11,B12,B22,B13,B23,B33]T v i j = [ h i 1 h j 1 , h i 1 h j 2 + h i 2 h j 1 , h i 2 h j 2 , h i 3 h j 1 + h i 1 h j 3 , h i 3 h j 2 + h i 2 h j 3 , h i 3 h j 3 ] T v_{ij}=[h_{i1}h_{j1},h_{i1}h_{j2}+h_{i2}h_{j1},h_{i2}h_{j2},h_{i3}h_{j1}+h_{i1}h_{j3},h_{i3}h_{j2}+h_{i2}h_{j3},h_{i3}h_{j3}]^T vij=[hi1hj1,hi1hj2+hi2hj1,hi2hj2,hi3hj1+hi1hj3,hi3hj2+hi2hj3,hi3hj3]T
则有:
h i T B h j = v i j T b h_i^TBh_j=v_{ij}^Tb hiTBhj=vijTb

(注:原论文直接给出了上面这个式子,给我看楞了,才发现这个式子不是推导的,而是先计算再提取的系数,所以这里我选择推算一遍,有助于理解。)

h i T B h j = v i j T b h_i^TBh_j=v_{ij}^Tb hiTBhj=vijTb
再联系以上单应矩阵 H H H 和内参矩阵 K K K 的元素之间满足两个线性方程约束,有

[ v 11 T ( v 11 − v 22 ) T ] b = 0 \begin{bmatrix}v_{11}^T\\(v_{11}-v_{22})^T\end{bmatrix}b=0 [v11T(v11v22)T]b=0
当相机在1个位姿下拍摄标定板图案后,经过角点的像素坐标提取,可得所有角点的世界坐标系和像素坐标系的对应关系,进而通过线性方程组的最小二乘解法求解当前位姿下的单应矩阵 H H H ,可得以上公式。但其只有两行,用来求解6维的 b b b 向量至少需要3个单应矩阵,即至少需要3张图片才能完成相机标定,总方程组可表达为:
V b = 0 Vb=0 Vb=0

  • 如果图片数量为 n ≥ 3 n≥3 n3 ,通常可以获得 b b b 的一个唯一解(由于尺度等价性,求出的 b b b 的任意倍数仍是正确解)。
  • 如果图片数量为 n = 2 n=2 n=2,可以施加无偏约束 s = 0 s=0 s=0,将 [ 0 , 1 , 0 , 0 , 0 , 0 ] b [0,1,0,0,0,0]b [0,1,0,0,0,0]b 作为附加方程添加到上式中。
  • 如果图片数量为 n = 2 n=2 n=2,可以假设 u 、 v 0 、 s u_、v_0、s uv0s 已知(比如说都为0),将 f x 、 f y f_x、f_y fxfy 求解出来。

求解出 b b b后,就可以按如下方式计算所有相机内在参数(因为由 b b b 组成的矩阵 B B B 不严格满足 B = K − T K − 1 B=K^{-T}K^{-1} B=KTK1,而是存在一个任意的尺度因子 λ \lambda λ (又来了)满足 B = λ K − T K − 1 B=\lambda K^{-T}K^{-1} B=λKTK1):

v 0 = B 12 B 13 − B 11 B 23 B 11 B 22 − B 22 2 v_0=\frac{B_{12}B_{13}-B_{11}B_{23}}{B_{11}B_{22}-B_{22}^2} v0=B11B22B222B12B13B11B23
λ = B 33 − B 13 2 + v 0 ( B 12 B 13 − B 11 B 23 ) B 11 \lambda =B_{33}-\frac{B_{13}^2+v_0(B_{12}B_{13}-B_{11}B_{23})}{B_{11}} λ=B33B11B132+v0(B12B13B11B23)
f x = λ B 11 f_x=\sqrt{\frac{\lambda }{B_{11}}} fx=B11λ
f y = λ B 11 B 11 B 22 − B 22 2 f_y=\sqrt{\frac{\lambda B_{11}}{B_{11}B_{22}-B_{22}^2}} fy=B11B22B222λB11

s = − B 12 f x 2 f y λ s=-\frac{B_{12}f_x^2f_y}{\lambda} s=λB12fx2fy
u 0 = s v 0 f x − B 13 f x 2 λ u_0=\frac{sv_0}{f_x}-\frac{B_{13}f_x^2}{\lambda} u0=fxsv0λB13fx2

当内参矩阵 K K K 求解出后,每个位姿的外参矩阵 R 、 T R、T RT 可以进一步求出:
r 1 = λ K − 1 h 1 r 2 = λ K − 1 h 2 r 3 = r 1 × r 2 t = λ K − 1 h 3 r_1=\lambda K^{-1}h_1\\ r_2=\lambda K^{-1}h_2\\ r_3=r_1 \times r_2\\ t=\lambda K^{-1}h_3 r1=λK1h1r2=λK1h2r3=r1×r2t=λK1h3
其中, λ = 1 ∣ ∣ K − 1 h 1 ∣ ∣ = 1 ∣ ∣ K − 1 h 2 ∣ ∣ \lambda=\frac{1}{|| K^{-1}h_1 ||}=\frac{1}{|| K^{-1}h_2 ||} λ=∣∣K1h1∣∣1=∣∣K1h2∣∣1。由于数据中存在噪声,因此计算出的矩阵 R R R 通常不满足旋转矩阵的性质,可以通过奇异值分解来获得最佳旋转矩阵。

二)极大似然解

上述解是通过最小化一个没有物理意义的代数距离得到的,由于噪声的存在,其解并不会非常精确。我们可以通过最大似然估计法来获取更精确的解。
给定标定板平面的 n n n 个图像,模型平面上有 m m m 个点。假设图像点的噪声独立且同分布。可以通过最小化以下函数来获得极大似然估计:

∑ i = 1 n ∑ j = 1 m ∣ ∣ p i j − p ^ ( K , R i , t i , P j ) ∣ ∣ 2 \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}||p_{ij}-\hat p(K,R_i,t_i,P_j)||^2 i=1nj=1m∣∣pijp^(K,Ri,ti,Pj)2

其中 p ^ ( K , R i , t i , P j ) \hat p(K,R_i,t_i,P_j) p^(K,Ri,ti,Pj) 是空间点 P j P_j Pj 在图像 i i i 上的投影点。旋转矩阵 R R R 可由三个向量 r r r 表示, r r r平行于旋转轴并且其大小(模长)等于旋转角。 R R R r r r 通过 Rodrigues (罗德里格斯)公式联系起来。对上式最小化是一个非线性最小化问题,可用 Levenberg-Marquardt 算法求解。该类问题需要有一个较准确的初始值,可以用上文所提到的闭合解来作为初始值。

三)考虑相机畸变

在前文中有提到,畸变校正时一般会考虑3个径向畸变参数 k 1 、 k 2 、 k 3 k_1、k_2、k_3 k1k2k3 和2个切向畸变参数 p 1 、 p 2 p_1、p_2 p1p2,在张氏标定中,只考虑了2个径向畸变参数 k 1 、 k 2 k_1、k_2 k1k2。实际应用时会考虑更多项,原理相同。
精准的未畸变坐标在内外参未知时是无法计算的(观测值总是有误差的),但在估计内外参时又没有考虑畸变参数(咬尾巴了)。无所谓,概念论会出手:将闭合解得到的内外参作为初始值,求出近似理想坐标,然后根据畸变校正公式建立线性方程组来求解近似的 k 1 、 k 2 k_1、k_2 k1k2 作为以下极大似然估计的初始值:
∑ i = 1 n ∑ j = 1 m ∣ ∣ p i j − p ^ ( K , k 1 , k 2 , R i , t i , P j ) ∣ ∣ 2 \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}||p_{ij}-\hat p(K,k_1,k_2,R_i,t_i,P_j)||^2 i=1nj=1m∣∣pijp^(K,k1,k2,Ri,ti,Pj)2
通过非线性求解方法来求解所有内外参数和畸变系数。
实际上,因为畸变系数值很小,所以直接将畸变系数的初值全部设置为0也是可以的,这就不需要解线性方程组了。

三、实验流程

总结一下张氏标定流程:

  1. 打印标定图案并粘贴至一个平面上,称之为标定板。
  2. 通过移动相机或移动标定板在不同的位姿拍摄多张标定板图像(图像数>=3)。
  3. 在所有图像上检测特征点(角点或者圆心点)。
  4. 使用闭合解法求解所有内参外参。
  5. 通过非线性优化计算精确的内外参数和畸变系数(畸变系数初始值可通过畸变校正线性方程组求解或直接赋值为0)。

在这里插入图片描述

论文中使用的标定板

在这里插入图片描述

其他类型的标定板

纸上得来终觉浅,后续考虑上手实践一下。


参考:
[1] Zhang Z . A Flexible New Technique for Camera Calibration[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2000, 22(11):1330-1334.
[2] 立体视觉入门指南(3):相机标定之Zhang式标定法
[3] Calibration Patterns Explained

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/628626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目中常用的linux命令总结大全

哈喽 大家好啊,相信大家在项目中都会常常部署服务器,就涉及到一些常见的linux命令了 1.命令提示符表示命令输入 ps aux | grep nginx(查看nginx进程运行状态)whereis nginx 查找哪里有nginxlsof -i:5300 查看端口状态kill -9 xxx进…

攻防世界-Crypto-转轮机加密

1. 题目如下&#xff1a; 1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE < 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 3: < BDMAIZVRNSJUWFHTEQGYXPLOCK < 4: < RPLNDVHGFCUKTEBSXQYIZMJWAO < 5: < IHFRLABEUOTSGJVDKCPMNZQWXY < 6: < AMKGHIWPNYCJBFZDR…

大数据需要学习哪些内容?

大数据技术的体系庞大且复杂&#xff0c;每年都会涌现出大量新的技术&#xff0c;目前大数据行业所涉及到的核心技术主要就是&#xff1a;数据采集、数据存储、数据清洗、数据查询分析和数据可视化。 Python 已成利器 在大数据领域中大放异彩 Python&#xff0c;成为职场人追求…

论文阅读和分析:Binary CorNET Accelerator for HR Estimation From Wrist-PPG

主要贡献&#xff1a; 一种完全二值化网络(bCorNET)拓扑结构及其相应的算法-架构映射和高效实现。对CorNET进行量化后&#xff0c;减少计算量&#xff0c;又能实现减轻运动伪影的效果。 该框架在22个IEEE SPC受试者上的MAE为6.675.49 bpm。该设计采用ST65 nm技术框架&#xff…

04_两种常见的网页反爬措施及应对方法

一、封禁IP地址反爬 1、应对思路: 理解这种反爬方法的含义:当我们用自己电脑的ip地址短时间,高频率访问某个具有此类反爬设置的网站,这种网站就会把我们的ip地址封禁,一般都是封24小时或者其他时间。解决方案:通过代理ip访问,这种方式只不过就是让你有了重新访问网页的…

宝塔面板搭建thinkphp后请求中去除index.php后缀

宝塔面板搭建thinkphp后请求中去除index.php后缀 nginx配置 在宝塔面板网站中绑定thinkphp的public&#xff0c;添加站点 点击站点设置按钮打开项目设置页面 找到配置文件 选项&#xff0c;然后在 22行 后添加一下代码 location / {if (!-f $request_filename) {rewrite …

一学就会----链表的中间节点

文章目录 题目描述思路代码示例在原题上增加难度思路代码示例 题目描述 给定一个头结点为 head 的非空单链表&#xff0c;返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 图片示例&#xff1a; 思路 因为这道题目并没有时间复杂度的规定&#xf…

iOS17beta有哪些Bug?iOS17值得升级吗?iOS17Bug大汇总!

iOS17Beta已上线几天&#xff0c;带来了新增横屏待机、“嘿Siri”去除了“嘿”、联系人海报、NameDrop等新功能。 做为第一个beta版本&#xff0c;避免不了许多Bug的出现。 小编收集了目前体验遇到和网上反馈的所有BUG&#xff0c;还没更新iOS17的小伙伴们可以看看截止目前升级…

C++ 类型转换:类型萃取器进行类型转换和cast类操作符进行转换的区别?

区别 类型萃取器和cast类操作符都可以用于类型转换&#xff0c;但它们的用途和工作方式有所不同。 类型萃取器&#xff0c;如 std::remove_reference<T>、std::remove_const<T>、std::add_pointer<T> 等&#xff0c;主要用于在编译时修改类型&#xff0c;它…

# WGCNA | 不止一个组的WGCNA怎么分析嘞!?~(四)(共识网络分析-第四步-共识模块与性状相关联)

1写在前面 最近稍微没有那么忙了&#xff0c;好好搞一下公众号吧&#xff0c;好久没怎么认真做了。&#x1f637; 有的时候你会发现坏事不一定是坏事&#xff0c;塞翁失马&#xff0c;焉知非福啊&#xff01;~&#x1f643; "我只担心一件事,我怕我配不上自己所受的苦难。…

springcloud-alibaba (06)RocketMQ下载安装和单机启动个人笔记

RocketMQ 01 下载RocketMQ02 安装RocketMQ03 启动RocketMQ1. 内存分配1.1 第一步1.2 第二步1.3 第三步 2. 启动RocketMQ2.1 启动NameServer2.2 启动Broker 04 测试RocketMQ05 关闭RocketMQ 01 下载RocketMQ 下载 RocketMQ 即可以从 Apache 官网下载&#xff0c;也可以从 gitHu…

C#调用C++的动态链接库

C#调用C的动态链接库 问题所在使用VS编辑所需要调用的函数&#xff08;c&#xff09;创建c#项目&#xff0c;调用c动态库 这是一个测试代码。 问题所在 c# 调用c的dll库不能引用 解决办法是 1&#xff1a;在写c代码的时候&#xff0c;把他加入到dll中 2&#xff1a;将c的dll库…

Selenium自动化测试框架工作原理你明白了吗?

一、Selenium是什么&#xff1f; 用官网的一句话来讲&#xff1a;Selenium automates browsers. Thats it&#xff01;简单来讲&#xff0c;Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作浏览器一样。支持的…

零基础学网络安全的心得

我的学习心得&#xff0c;我认为能不能自学成功的要素有两点。 第一点就是自身的问题&#xff0c;虽然想要转行学习安全的人很多&#xff0c;但是非常强烈的想要转行学好的人是小部分。而大部分人只是抱着试试的心态来学习安全&#xff0c;这是完全不可能的。 所以能不能学成并…

神经网络:卷积的padding为SAME或VALID

1&#xff1a;卷积运算原理&#xff08;直接看图&#xff09; ①由图可知&#xff0c;output[0][0] 视野域 * 卷积核&#xff08;矩阵点击运算&#xff0c;对应位相乘然后求和&#xff0c;视野域形状与卷积核一致&#xff09;&#xff0c;而output[0][1] 下一视野域 * 卷积核…

软件测试的案例分析 - 闰年4.1

文章目的 显示不同的博客能获得多少博客质量分 &#xff08;这是关于博客质量分的测试 https://www.csdn.net/qc) 这个博客得了 60 分。 希望获得 70 分左右 正文 我们谈了不少测试的名词, 软件是人写的, 测试计划和测试用例也是人写的, 人总会犯错误。错误发生之后, 总有人…

docker安装rabbitmq以及rabbitmq_management、rabbitmqctl管理工具

&#x1f4a7; d o c k e r 安装 r a b b i t m q 以及 r a b b i t m q m a n a g e m e n t 、 r a b b i t m q c t l 管理工具 \color{#FF1493}{docker安装rabbitmq以及rabbitmq_management、rabbitmqctl管理工具} docker安装rabbitmq以及rabbitmqm​anagement、rabbitmqct…

[Eigen中文文档] 稠密矩阵分解函数对比

文档总目录 英文原文(Benchmark of dense decompositions) 本页介绍了 Eigen 为各种方阵和过约束问题提供的稠密矩阵分解的速度比较。 有关线性求解器、分解的特征和数值鲁棒性的更一般概述&#xff0c;请查看 此表。 该基准测试已在配备英特尔酷睿 i7 2.6 GHz 的笔记本电…

HIVE获取json字段特定值(单个json或者json数组)

1.获取单个json字符串里的某一特定值 函数&#xff1a;get_json_object(单个json,‘$.要获取的字段’) 示例&#xff1a; 代码&#xff1a;SELECT get_json_object(‘{“NAME”:“张三”,“ID”:“1”}’,‘$.NAME’) as name; SELECT get_json_object(‘{“NAME”:“张三”…

【 Python 全栈开发 - WEB开发篇 - 31 】where条件查询

文章目录 一、where条件查询1.关系运算符查询2.IN关键字查询3.BETWEEN AND关键字查询4.空值查询5.AND关键字查询6.OR关键字查询7.LIKE关键字查询普通字符串含有%通配的字符串含有_通配的字符串 一、where条件查询 MySQL 的 where 条件查询是指在查询数据时&#xff0c;通过 wh…