机器视觉入门基础相关概念一 ——单目相机模型

机器视觉入门基础相关概念

相机模型

引言介绍:如果只是希望获取图像上的一些信息(例如特征提取拟合等),那么我们不会对三维空间中相机的位置有所要求。但如果希望通过二维的图像去理解三维空间中摄像机的信息,或者是图像中物体在三维空间中的信息,那么就不得不考虑成像过程中三维变化为二维时的具体过程。而摄像机模型就是三维到二维的一种映射。本文简要总结了单目相机的成像过程,以便于读者将相机模型作为一种基础的工具理解更深层次的内容。

简单来说,相机模型是3维空间如何在摄像机中变成2维图像的一个过程。

2d坐标变换

结合之前查看的一些资料进行总结:坐标变换常用的变换就是平移和旋转两种变换的方式。(尺度缩放

  1. 用矩阵的齐次方程形式表示平移变换

在xy坐标系下的平移变换也就是,在x轴方向加tx 在y轴的方向加ty来进行表示。P’=P+t=(x+tx,y+ty)

在这里插入图片描述

P = (x,y)t = (tx,ty) 因为我们用齐次的坐标形式来进行表达,也就是要多P增加一个维度信息 P(x,y,1)

P = ( x , y ) → ( x , y , 1 ) \mathbf{P}=(x, y) \rightarrow(x, y, 1) P=(x,y)(x,y,1)

P ′ → [ x + t x y + t y 1 ] = [ 1 0 t x 0 1 t y 0 0 1 ] ⋅ [ x y 1 ] = [ I t 0 1 ] ⋅ [ x y 1 ] = T ⋅ [ x y 1 ] \begin{array}{r} \mathbf{P}^{\prime} \rightarrow\left[\begin{array}{c} x+t_{x} \\ y+t_{y} \\ 1 \end{array}\right]=\left[\begin{array}{lll} 1 & 0 & t_{x} \\ 0 & 1 & t_{y} \\ 0 & 0 & 1 \end{array}\right] \cdot\left[\begin{array}{c} x \\ y \\ 1 \end{array}\right] \\ =\left[\begin{array}{ll} \mathbf{I} & \mathbf{t} \\ \mathbf{0} & 1 \end{array}\right] \cdot\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right]=\mathbf{T} \cdot\left[\begin{array}{c} x \\ y \\ 1 \end{array}\right] \end{array} P x+txy+ty1 = 100010txty1 xy1 =[I0t1] xy1 =T xy1

也就是说可以将平移变换写成一个坐标与矩阵相乘的形式来表达,或者更加通俗的来说就是进行了一次矩阵的变换。

  1. 用矩阵齐次方程的形式表示尺度变换

将x轴方向放大sx倍,将y轴方向放大sy倍,根据图示其实也可以看出它属于是一种特殊的平移变换操作。

P = (x,y) P’ = (sx,sy)

P = ( x , y ) → P ′ = ( s x x ,   s y y ) P = ( x , y ) → ( x , y , 1 ) \begin{array}{c} \mathbf{P}=(\mathrm{x}, \mathrm{y}) \rightarrow \mathbf{P}^{\prime}=\left(\mathrm{s}_{\mathrm{x}} \mathrm{x}, \mathrm{~s}_{\mathrm{y}} \mathrm{y}\right) \\ \mathbf{P}=(x, y) \rightarrow(x, y, 1) \end{array} P=(x,y)P=(sxx, syy)P=(x,y)(x,y,1)
在这里插入图片描述

我们同样也是增加一个维度的信息值P(x,y,1)三个维度的表示形式。

P ′ → [ s x x s y y 1 ] = [ s x 0 0 0 s y 0 0 0 1 ] ⋅ [ x y 1 ] = [ S ′ 0 0 1 ] ⋅ [ x y 1 ] = S ⋅ [ x y 1 ] \mathbf{P}^{\prime} \rightarrow\left[\begin{array}{c} s_{x} x \\ s_{y} y \\ 1 \end{array}\right]=\left[\begin{array}{ccc} s_{x} & 0 & 0 \\ 0 & s_{y} & 0 \\ 0 & 0 & 1 \end{array}\right] \cdot\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right]=\left[\begin{array}{cc} \mathbf{S}^{\prime} & \mathbf{0} \\ \mathbf{0} & 1 \end{array}\right] \cdot\left[\begin{array}{c} x \\ y \\ 1 \end{array}\right]=\mathbf{S} \cdot\left[\begin{array}{c} x \\ y \\ 1 \end{array}\right] P sxxsyy1 = sx000sy0001 xy1 =[S001] xy1 =S xy1

尺度的变换也可以看作是一次矩阵变换的表达形式。

  1. 那么如何用矩阵的形式来表示旋转变换呢?

我们在线性代数的矩阵乘法运算的部分其实就提到了通过三角函数与矩阵结合的形式进行矩阵变换。下面我们就用这种思想。

在这里插入图片描述
x ′ = cos ⁡ θ x − sin ⁡ θ y y ′ = cos ⁡ θ y + sin ⁡ θ x \begin{array}{l} x^{\prime}=\cos \theta x-\sin \theta y \\ y^{\prime}=\cos \theta y+\sin \theta x \end{array} x=cosθxsinθyy=cosθy+sinθx

P ′ → [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] [ x y 1 ] \mathbf{P}^{\prime} \rightarrow\left[\begin{array}{ccc} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right] P cosθsinθ0sinθcosθ0001 xy1

我们在近似极坐标系下,同样也可以将P’表示为RP这种矩阵相乘的形式。

将这几种情况进行综合就可以得到2d空间的一个变换方法。

P ′ → [ 1 0 t x 0 1 t y 0 0 1 ] [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] [ s x 0 0 0 s y 0 0 0 1 ] x y 1 ] = [ cos ⁡ θ − sin ⁡ θ t x sin ⁡ θ cos ⁡ θ t y 0 0 1 ] [ s x 0 0 0 s y 0 0 0 1 ] [ x y 1 ] \begin{aligned} & \left.\mathbf{P}^{\prime} \rightarrow\left[\begin{array}{lll} 1 & 0 & t_{x} \\ 0 & 1 & t_{y} \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{ccc} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{ccc} s_{x} & 0 & 0 \\ 0 & s_{y} & 0 \\ 0 & 0 & 1 \end{array}\right] \begin{array}{l} x \\ y \\ 1 \end{array}\right] \\ = & {\left[\begin{array}{ccc} \cos \theta & -\sin \theta & t_{x} \\ \sin \theta & \cos \theta & t_{y} \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{ccc} s_{x} & 0 & 0 \\ 0 & s_{y} & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{c} x \\ y \\ 1 \end{array}\right] } \end{aligned} =P 100010txty1 cosθsinθ0sinθcosθ0001 sx000sy0001 xy1 cosθsinθ0sinθcosθ0txty1 sx000sy0001 xy1

最后综合在一起就可以写成一个完成的坐标表示形式了

= [ R t 0 1 ] [ S 0 0 1 ] [ x y 1 ] = [ R S t 0 1 ] ] [ x y 1 ] \left.=\left[\begin{array}{cc} \mathbf{R} & \mathbf{t} \\ \mathbf{0} & 1 \end{array}\right]\left[\begin{array}{ll} \mathbf{S} & \mathbf{0} \\ \mathbf{0} & 1 \end{array}\right]\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right]=\left[\begin{array}{cc} \mathbf{R} \mathbf{S} & \mathbf{t} \\ \mathbf{0} & 1 \end{array}\right]\right]\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right] =[R0t1][S001] xy1 =[RS0t1] xy1

在这里插入图片描述

上面提到的变换可以统一的称为是进行了欧式变换,它属于是一种特殊的单应变换((homography))添加了部分的约束条件

x ′ ≅ H x = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] x \mathbf{x}^{\prime} \cong H \mathbf{x}=\left[\begin{array}{lll} h_{11} & h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \\ h_{31} & h_{32} & h_{33} \end{array}\right] \mathbf{x} xHx= h11h21h31h12h22h32h13h23h33 x

3d坐标变换

我们说3d的坐标变换和2d的坐标变换基本上是相同的思想和步骤,不同之处就在于多增加了一个坐标的位置。

我们就用3d空间中的平移变换来举一个例子吧。

在这里插入图片描述

T = [ T x T y T z ] T=\left[\begin{array}{c} T_{x} \\ T_{y} \\ T_{z} \end{array}\right] T= TxTyTz

P ′ → [ I T 0 1 ] 4 × 4 [ x y z 1 ] P^{\prime} \rightarrow\left[\begin{array}{cc} I & T \\ 0 & 1 \end{array}\right]_{4 \times 4}\left[\begin{array}{c} x \\ y \\ z \\ 1 \end{array}\right] P[I0T1]4×4 xyz1

但是在3d的旋转变换就会有一定的区别,主要就在3d我们使用的是球坐标系,就包括了两个角度嘛。

它的旋转矩阵R就需要连续相乘得到(可以绕x y z三个轴旋转)

在这里插入图片描述

R = R x ( α ) R y ( β ) R z ( γ ) R=R_{x}(\alpha) R_{y}(\beta) R_{z}(\gamma) R=Rx(α)Ry(β)Rz(γ)

R x ( α ) = [ 1 0 0 0 cos ⁡ α − sin ⁡ α 0 sin ⁡ α cos ⁡ α ] R y ( β ) = [ cos ⁡ β 0 sin ⁡ β 0 1 0 − sin ⁡ β 0 cos ⁡ β ] R z ( γ ) = [ cos ⁡ γ − sin ⁡ γ 0 sin ⁡ γ cos ⁡ γ 0 0 0 1 ] \begin{array}{l} R_{x}(\alpha)=\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos \alpha & -\sin \alpha \\ 0 & \sin \alpha & \cos \alpha \end{array}\right] \\ R_{y}(\beta)=\left[\begin{array}{ccc} \cos \beta & 0 & \sin \beta \\ 0 & 1 & 0 \\ -\sin \beta & 0 & \cos \beta \end{array}\right] \\ R_{z}(\gamma)=\left[\begin{array}{ccc} \cos \gamma & -\sin \gamma & 0 \\ \sin \gamma & \cos \gamma & 0 \\ 0 & 0 & 1 \end{array}\right] \end{array} Rx(α)= 1000cosαsinα0sinαcosα Ry(β)= cosβ0sinβ010sinβ0cosβ Rz(γ)= cosγsinγ0sinγcosγ0001

P ′ → [ R 0 0 1 ] 4 × 4 [ x y z 1 ] P^{\prime} \rightarrow\left[\begin{array}{cc} R & 0 \\ 0 & 1 \end{array}\right]_{4 \times 4}\left[\begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right] P[R001]4×4 xyz1

相机模型中的四个坐标系

最简单有效的是针孔相机模型(pinhole camera model),这是最基本且最常用的相机模型,提供了一个简单的方法来描述相机如何将三维世界转化为二维图像。(小孔成像原理)
该模型假定光线通过相机的一个小孔穿过并投影到影像平面(这个平面就是感光元件,如CCD或CMOS上。

该模型基于几何光学理论,忽视了透镜的畸变效应。针孔相机模型是理想状态下的相机模型,一个重要参数是:焦距f,决定了相机的视场角。

在这里插入图片描述
从参考资料上截取了一种很直观的图,来对这个模型进行说明

相机模型中的四个坐标系主要为一下的四个坐标系。

  1. 世界坐标系P_w:通常是三维空间中人为选择的一个参考坐标系。单位为物理单位,例如m。
  2. 相机坐标系P_c:三维空间中,通常以摄像机的光心作为原点,光轴作为z轴的一个坐标系。可以通过世界坐标系的平移和旋转来获得。单位为物理单位,例如m。
  3. 成像平面坐标系P:通过相机模型映射得到的一个二维坐标系。单位为物理单位,例如m。
  4. 图像坐标系P_uv:通过所成像转换获得的在计算机内部可以存储的矩阵图像上的坐标系。单位为像素。

在这里插入图片描述

世界到相机坐标系

选取O点作为坐标系的原点,以光轴作为Z轴,X,Y轴与成像平面平行,构建一个坐标系

在这里插入图片描述

在我自己学习计算机视觉相关知识的时候,也经常听说要结合相机的内外参,这里我们从3d真实空间下的世界坐标系,通过相机的外参做一个刚体的变换,就可以得到以光心为原点的相机坐标系下的3d坐标了

实际上就是通过旋转和平移两部分操作,完成两个坐标系之间的坐标变换。 M是我们在世界坐标系下的坐标,通过下面的公式得到MC(相机坐标系下的坐标)

R ⋅ [ M ~ − C ~ ] R \cdot[\widetilde{M}-\widetilde{C}] R[M C ]

C~是光心在世界坐标系下的坐标

[ x M C y M C z M C 1 ] = [ R − R C ~ 0 1 ] [ X M W Y M W Z M W 1 ] \left[\begin{array}{c} x_{M}^{C} \\ \mathrm{y}_{M}^{C} \\ z_{M}^{C} \\ 1 \end{array}\right]=\left[\begin{array}{cc} \mathbf{R} & -\mathbf{R} \widetilde{\mathbf{C}} \\ \mathbf{0} & 1 \end{array}\right]\left[\begin{array}{c} X_{M}^{W} \\ Y_{M}^{W} \\ Z_{M}^{W} \\ 1 \end{array}\right] xMCyMCzMC1 =[R0RC 1] XMWYMWZMW1

[ x c y c z c 1 ] = [ R 3 × 3 T 3 × 1 O 1 ] ⋅ [ x w y w z w 1 ] \left[\begin{array}{c} x_{c} \\ y_{c} \\ z_{c} \\ 1 \end{array}\right]=\left[\begin{array}{cc} R_{3 \times 3} & T_{3 \times 1} \\ O & 1 \end{array}\right] \cdot\left[\begin{array}{c} x_{w} \\ y_{w} \\ z_{w} \\ 1 \end{array}\right] xcyczc1 =[R3×3OT3×11] xwywzw1

T:平移 R:旋转。

一个三维目标点在世界坐标系和摄像机空间坐标系两套三维坐标系的下转换关系,能够通过一个旋转和一个平移矩阵计算。

这里的矩阵我们称之为外参矩阵

在这里插入图片描述

相机坐标系到图像坐标系

在这里插入图片描述

假设点p(xc yc zc)在图像坐标系的成像点是p’(x,y) 我们需要在她们中间完成映射的操作步骤。

我们根据相似的关系可以得到。

x x c = y y c = f z c \frac{x}{x_{c}}=\frac{y}{y_{c}}=\frac{f}{z_{c}} xcx=ycy=zcf

化简之后就可以得到:

x = f z c ⋅ x c y = f z c ⋅ y c \begin{aligned} x & =\frac{f}{z_{c}} \cdot x_{c} \\ y & =\frac{f}{z_{c}} \cdot y_{c} \end{aligned} xy=zcfxc=zcfyc

按照和之前同样的思想我们可以将其表示为矩阵的形式同时完成降维。

z c ⋅ [ x y 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] ⋅ [ x c y c z c 1 ] z_{c} \cdot\left[\begin{array}{c} x \\ y \\ 1 \end{array}\right]=\left[\begin{array}{cccc} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{array}\right] \cdot\left[\begin{array}{c} x_{c} \\ y_{c} \\ z_{c} \\ 1 \end{array}\right] zc xy1 = f000f0001000 xcyczc1

相机内参:相机的焦距,像素坐标系的相对偏移量。对于这个矩阵我们也可以理解为内参矩阵的一部分。

从图像坐标到像素坐标的转换

图像坐标系的点p’(x,y)到像素坐标系的(u,v)的转换。

  1. 图像坐标系的原点在sensor的中央,单位是mm。
  2. 像素坐标系的原点在sensor的左上角,单位是Pixel,也就是像素的行数和列。

在这里插入图片描述
其实也就是两个红色的点之间的转换。从毫米单位的成像平面中心点,转换为我们的左上角用像素的格数来进行表示。

要想明确转换关系最重要的一点就是要明确u0 和 v0指的是这个中心点在像素坐标系下的坐标位置。

  • dx,dy:是sensor的固有参数,代表每个像素的毫米数。

  • u0,vo:代表图像坐标系原点(光心)相对像素坐标系原点的偏移量。

转换关系就为:

u = x d x + u 0 , v = y d y + v 0 u=\frac{x}{d x}+u_{0}, v=\frac{y}{d y}+v_{0} u=dxx+u0,v=dyy+v0

对应的矩阵表示形式即为:

[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ x y 1 ] \left[\begin{array}{l} u \\ v \\ 1 \end{array}\right]=\left[\begin{array}{ccc} \frac{1}{d x} & 0 & u_{0} \\ 0 & \frac{1}{d y} & v_{0} \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right] uv1 = dx1000dy10u0v01 xy1

整体一次变换

z c ⋅ [ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] ⋅ [ R 3 × 3 T 3 × 1 O 1 ] ⋅ [ x w y w z w 1 ] = M 1 M 2 [ x w y w z w 1 ] \begin{array}{r} z_{c} \cdot\left[\begin{array}{l} u \\ v \\ 1 \end{array}\right]=\left[\begin{array}{lll} \frac{1}{d x} & 0 & u_{0} \\ 0 & \frac{1}{d y} & v_{0} \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{cccc} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{array}\right] \cdot\left[\begin{array}{cc} R_{3 \times 3} & T_{3 \times 1} \\ O & 1 \end{array}\right] \cdot\left[\begin{array}{c} x_{w} \\ y_{w} \\ z_{w} \\ 1 \end{array}\right] \\ =\mathbf{M}_{1} \mathbf{M}_{2}\left[\begin{array}{c} x_{w} \\ y_{w} \\ z_{w} \\ 1 \end{array}\right] \end{array} zc uv1 = dx1000dy10u0v01 f000f0001000 [R3×3OT3×11] xwywzw1 =M1M2 xwywzw1

 相机内参 : 相机的焦距,像素坐标系的相对偏移量  M 1 = [ f x 0 u 0 0 f y v 0 0 0 1 ] \begin{array}{l} \text { 相机内参 : 相机的焦距,像素坐标系的相对偏移量 }\\ M_{1}=\left[\begin{array}{lll} f_{x} & 0 & u_{0} \\ 0 & f_{y} & v_{0} \\ 0 & 0 & 1 \end{array}\right] \end{array}  相机内参 : 相机的焦距,像素坐标系的相对偏移量 M1= fx000fy0u0v01

 相机外参 : 世界坐标系到相机坐标系的转换关系,相机在世界坐标系的位姿矩阵  M 2 = [ R 3 × 3 T 3 × 1 ] = [ r 11 r 12 r 13 t 1 r 21 r 22 r 23 t 2 r 31 r 32 r 33 t 3 ] \begin{array}{l} \text { 相机外参 : 世界坐标系到相机坐标系的转换关系,相机在世界坐标系的位姿矩阵 }\\ M_{2}=\left[\begin{array}{cc} R_{3 \times 3} & T_{3 \times 1} \end{array}\right]=\left[\begin{array}{llll} r_{11} & r_{12} & r_{13} & t_{1} \\ r_{21} & r_{22} & r_{23} & t_{2} \\ r_{31} & r_{32} & r_{33} & t_{3} \end{array}\right] \end{array}  相机外参 : 世界坐标系到相机坐标系的转换关系,相机在世界坐标系的位姿矩阵 M2=[R3×3T3×1]= r11r21r31r12r22r32r13r23r33t1t2t3

在这里插入图片描述

畸变模型

经过透镜后的实际成像和理想成像之间的误差即为镜头畸变。主要分为径向畸变和切向畸变。

在这里插入图片描述

径向畸变

  • 相加的透镜形状造成,沿透镜的径向分布
  • 分为桶形畸变和枕形畸变
  • 原理透镜中心的地方比靠近中心的地方更加弯曲
  • 光心处的畸变为0,距离光心越远畸变越大
  • 廉价相机,畸变更严重

给出径向畸变的多项式数学表达形式:

{ x distorted  = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y distorted  = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) \left\{\begin{array}{l} x_{\text {distorted }}=x\left(1+k_{1} r^{2}+k_{2} r^{4}+k_{3} r^{6}\right) \\ y_{\text {distorted }}=y\left(1+k_{1} r^{2}+k_{2} r^{4}+k_{3} r^{6}\right) \end{array}\right. {xdistorted =x(1+k1r2+k2r4+k3r6)ydistorted =y(1+k1r2+k2r4+k3r6)

  • (x,y)是没有畸变的像素点,(x distorted,y distortea)畸变后的位置。

  • k,k2,k3:径向畸变系数,摄像头的内参,一般使用前两项,鱼眼相机会使用第三项。

切向畸变

切向畸变这种情况产生的比较少。

产生的原因:相机sensor和镜头不平行导致

在这里插入图片描述
切向畸变的数学表示形式为:

{ x distorted  = x + [ 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) ] y distorted  = y + [ 2 p 2 x y + p 1 ( r 2 + 2 y 2 ) ] \left\{\begin{array}{l} \mathrm{x}_{\text {distorted }}=x+\left[2 p_{1} x y+p_{2}\left(r^{2}+2 x^{2}\right)\right] \\ y_{\text {distorted }}=y+\left[2 p_{2} x y+p_{1}\left(r^{2}+2 y^{2}\right)\right] \end{array}\right. {xdistorted =x+[2p1xy+p2(r2+2x2)]ydistorted =y+[2p2xy+p1(r2+2y2)]

综上将两种情况进行合并可以得到最后的结果:

{ x distorted  = x ( 1 + k 1 r 2 + k 2 r 4 + + k 3 r 6 ) + [ 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) ] y distorted  = y ( 1 + k 1 r 2 + k 2 r 4 + + k 3 r 6 ) + [ 2 p 2 x y + p 1 ( r 2 + 2 y 2 ) ] \left\{\begin{array}{l} \mathrm{x}_{\text {distorted }}=x\left(1+k_{1} r^{2}+k_{2} r^{4}++k_{3} r^{6}\right)+\left[2 p_{1} x y+p_{2}\left(r^{2}+2 x^{2}\right)\right] \\ y_{\text {distorted }}=y\left(1+k_{1} r^{2}+k_{2} r^{4}++k_{3} r^{6}\right)+\left[2 p_{2} x y+p_{1}\left(r^{2}+2 y^{2}\right)\right] \end{array}\right. {xdistorted =x(1+k1r2+k2r4++k3r6)+[2p1xy+p2(r2+2x2)]ydistorted =y(1+k1r2+k2r4++k3r6)+[2p2xy+p1(r2+2y2)]

以上就是个人学习到的单目的相机模型建模和坐标转换的有关问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

简单三步完成 Telegram 生态的 Web3 冷启动

在竞争激烈的 Web3 领域,强有力的启动往往能决定成败。Telegram 无疑当下最火热的流量池,是很多 Web3 项目冷启动阶段的必选项。 但眼看着好多项目在 Telegram 生态火速获取百万级甚至千万级别的用户,自己的项目要怎么开始做增长,…

【记录】Django数据库的基础操作

数据库连接 在Django中使用 mysqlclient 这个包用于数据库的连接,切换至 Django环境中直接 pip install mysqlclient 安装此包 1 数据库连接配置 在项目目录下的setting.py中配置 DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: mini,#数据库名US…

nginx过滤模块怎么生效的

在nginx中,如果你要开发一个过滤模块,config中必须要加 HTTP_FILTER_MODULES$HTTP_FILTER_MODULES xxx 否则,即使在postconfiguration回调中加了ngx_http_top_header_filtermy_xxxx_filter_handle,最终my_xxxx_filter_handle也不…

PTA L1系列题解(C语言)(L1_081 -- L1_088)

L1-081 今天我要赢 题目内容: 2018 年我们曾经出过一题,是输出“2018 我们要赢”。今年是 2022 年,你要输出的句子变成了“我要赢!就在今天!”然后以比赛当天的日期落款。 输入格式: 本题没有输入。 输…

聊聊ASSERT处理在某些场景下的合理用法

先看看ASSERT的介绍: 编写代码时,我们总是会做出一些假设,ASSERT断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真…

数据结构编程实践20讲(Python版)—20并查集

本文目录 20 并查集(Union-Find Set)S1 说明并查集的定义并查集基本操作并查集优化并查集特点应用领域 S2 示例S3 问题1:朋友圈问题S4 问题2:网络连接恢复问题S5 问题3:随机生成迷宫 往期链接 01 数组02 链表03 栈04 …

【热门】用ChatGPT做智慧农业云平台——农业ERP管控系统

随着科技的进步,原有农业种植方式已经不能满足社会发展的需要,必须对传统的农业进行技术更新和改造。经过多年的实践,人们总结出一种新的种植方法——温室农业,即“用人工设施控制环境因素,使作物获得最适宜的生长条件,从而延长生产季节,获得最佳的产出”。这种农业生产方式…

vue3中监视 Reactive对象中的属性

watch 的第一个参数可以是不同形式的“数据源”&#xff1a;它可以是一个 ref (包括计算属性)、一个响应式对象、一个 getter 函数、或多个数据源组成的数组 一、框架&#xff1a; <template><div class"divBox"><h2>姓名&#xff1a;{{ person.…

2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(一级)答案 + 解析

一、单选题 1、下列选项中关于 turtle.color(red) 语句的作用描述正确的是&#xff1f;&#xff08; &#xff09; A. 只设置画笔的颜色为红色 B. 只设置填充的颜色为红色 C. 设置画笔和填充的颜色为红色 D. 设置画笔的颜色为红色&#xff0c;设置画布背景的颜色为红色 正…

告别ELK,APO提供基于ClickHouse开箱即用的高效日志方案——APO 0.6.0发布

ELK一直是日志领域的主流产品&#xff0c;但是ElasticSearch的成本很高&#xff0c;查询效果随着数据量的增加越来越慢。业界已经有很多公司&#xff0c;比如滴滴、B站、Uber、Cloudflare都已经使用ClickHose作为ElasticSearch的替代品&#xff0c;都取得了不错的效果&#xff…

C#教程笔记

C#开发的程序依附.NET平台 编译器->IL中间语言->CLR->机器指令 .NET CORE平台 跨平台 .cs后缀名 快捷键 CtrlKD格式化CtrlL或CtrlX删除一行CtrlY反撤销cwTab快速生成命令行输出Ctrl空格或CtrlJ获取提示///方法注释CtrlMO代码全部折叠CtrlML代码全部展开 上升沿0变1 安…

【AIGC】优化长提示词Prompt:提升ChatGPT输出内容的准确性与实用性

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;长提示词的挑战&#x1f4af;谷歌的优化长提示词技术关键因素分析 &#x1f4af;长提示词的设计原则&#x1f4af;优化长提示词的新框架方法&#x1f4af;实验结果分析不…

Qt第十三天:网络编程:TCP和UDP的使用

我发现了有些人喜欢静静看博客不聊天呐&#xff0c; 但是ta会点赞。 这样的人呢帅气低调有内涵&#xff0c; 美丽大方很优雅。 说的就是你&#xff0c; 不用再怀疑哦 ❤️TCP&#xff1a; 一、创建项目&#xff0c;命名为Server&#xff0c;继承QWidget 二、添加Qt设计师…

【JavaEE初阶】深入透析文件-IO关于文件内容的操作(四种文件流)

前言 &#x1f31f;&#x1f31f;本期讲解关于CAS的补充和JUC中有用的类&#xff0c;这里涉及到高频面试题哦~~~ &#x1f308;上期博客在这里&#xff1a;【JavaEE初阶】文件-IO之实现文件系统的操作如何进行实现-CSDN博客 &#x1f308;感兴趣的小伙伴看一看小编主页&…

Server-Sent Event(SSE) GPT场景实现

关于SSE的基本概念可以看一下阮一峰老师的这篇文章&#xff1a;Server-Sent Events教程。 现在比较常见的场景是gpt回答的时候类似下图这种打字机的情况&#xff0c;因为AI一般响应时间会比较长&#xff0c;使用这种方式能让人别等那么久&#xff0c;是一个相对比较良好的用户…

JVM篇(学习预热 - JVM正式展开 - (实战课程学习总结))(持续更新迭代)

目录 除了了解JVM的一些基本常识&#xff0c;我们并没有提到JVM的架构&#xff0c;就像我们做项目之前的预热&#xff0c;还是有必要先了解好它的架构&#xff0c;让我们开始吧&#xff01; 一、JVM程序执行流程 1. 执行流程图 2. 热点代码 3. 热点检测方式 方法一&#x…

离散数学实验二c语言(输出关系矩阵,输出矩阵性质,输出自反闭包,对称闭包,传递闭包,判断矩阵是否为等价关系,相容关系,偏序关系)

离散数学实验二 一、算法描述&#xff0c;算法思想 &#xff08;一&#xff09;相关数据结构 typedef struct Set *S; //存放集合 struct Set {int size; //集合的元素个数char *A; //存放该集合的元素 }; Set存放有限集合A&#xff0c;该集合的元素个数为size&#xff0…

数据分析方法(回归分析,决策树与神经网络,提升树,时间序列分析,假设检验,用户画像,竞品分析)等

1.回归分析 回归分析是一种统计方法&#xff0c;用于探索自变量&#xff08;预测变量&#xff09;和因变量&#xff08;目标变量&#xff09;之间的关系。它可以帮助预测变量的变化对目标变量的影响大小。例如&#xff0c;简单线性回归用于分析两个变量之间的线性关系&#xf…

能源领域下暖通行业现状-研究

基于AI大语言模型的暖通行业能源管理系统构建研究 一、能源管理中的突出问题 1. **能源消耗监测不准确** 现有的监测系统在获取设备实时能耗数据方面存在精度不足的问题&#xff0c;难以准确反映能源的实际使用情况。这使得节能决策缺乏可靠的数据支持&#xff0c;无法精准定位…

react18中的计算属性及useMemo的性能优化技巧

react18里面的计算属性和使用useMemo来提升组件性能的方法 计算属性 实现效果 代码实现 函数式组件极简洁的实现&#xff0c;就这样 import { useState } from "react"; function FullName() {const [firstName, setFirstName] useState("");const [la…