Skip to content

Instantly share code, notes, and snippets.

@seaside2mm
Last active December 16, 2022 09:22
Show Gist options
  • Save seaside2mm/43c8a92ec0b061e55396eea39bbf652c to your computer and use it in GitHub Desktop.
Save seaside2mm/43c8a92ec0b061e55396eea39bbf652c to your computer and use it in GitHub Desktop.
[camera] #cv

2D

*单应(Homography)变换 **

3D

**射影(Projective)变换 **

https://docs.opencv.org/4.x/dd/d53/tutorial_py_depthmap.html https://www.cnblogs.com/zyly/p/9373991.html

  • 双目测距

双目校正

根据摄像头定标后获得的单目内参数据(焦距、成像原点、畸变系数)和双目相对位置关系(旋转矩阵和平移向量),分别对左右视图进行消除畸变行对准(得到两个平行的摄像头),使得左右视图的成像原点坐标一致。 openCV Doc: stereoRectify

视差d: 双目匹配特征点x坐标的差的绝对值 基线b: 双目光学距离 深度z: 为了精确地求得某个点在三维空间里的距离Z,我们需要获得的参数有焦距f、视差d、摄像头中心距B。 如果还需要获得X坐标和Y坐标的话,那么还需要额外知道左右像平面的坐标系与立体坐标系中原点的偏移cx和cy。 其中f, B, cx和cy可以通过立体标定获得初始值,并通过立体校准优化,使得两个摄像头在数学上完全平行放置,也就是实现左右视图完全平行对准的理想形式。

$$ 深度z = f * 基线b / 视差d $$

在OpenCV中,f的量纲是像素点,d的量纲也是像素点, B的量纲一般是以毫米为单位。因此分子分母约去,Z的量纲与B相同。 f = 焦距(mm)/像元大小(mm/像素),得到量纲为像素点

世界坐标系中的坐标 求解以左摄像头光心为原点的世界坐标系中的坐标为(X,Y,Z)

openCV Doc: reprojectImageTo3D

存在变换矩阵Q,使得 $$ Q * \left[ \begin{matrix} u_x \ u_y \ d \ 1 \end{matrix} \right] = \left[ \begin{matrix} X \ Y \ Z \ W \end{matrix} \right]
$$ 其中, $$ Q =
\begin{bmatrix} 1 & 0 & 0 & -c_x \ 0 & 1 & 0 & -c_y \ 0 & 0 & 0 & f \ 0 & 0 & \frac{-1}{b} & \frac{c_x^l-c_x^r}{b} \end{bmatrix} \tag{4} $$

硬件相关名词

  • 焦距 成像平面到光学距离 一般3~7[mm]

  • CCD单位像素宽高 一般 0.001[mm] <= value <= 0.005[mm]

  • 基线baseline 双目相机的光圈中心长度

  • 视场角fov: 光学仪器的视野范围,视场角大小和CCD传感器尺寸和镜头焦距有关: $像素高度 = 焦距 * tan(视场角/2)$ $水平视场角 = 2 × arctan(w / 2f)$ $垂直视场角 = 2 × arctan(h / 2f$ $视场角 = 2 × arctan(d / 2f)$

w为CCD的宽,h为CCD的高,d为CCD对角线长。

相机模型

多视图几何

单应性变换 将一个平面内的点映射到另一个平面内的二维投影变换。

在图像校正、视角变换、图像拼接、增强现实、相机位姿估计、视觉SLAM等领域有非常重要的作用

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment