首页 > 其他分享 >NDT的原理分析与实现

NDT的原理分析与实现

时间:2024-10-17 19:50:54浏览次数:3  
标签:分析 sz sy sx mathbf cz cx 原理 NDT

文章目录


前言

相关中文博客1:CSDN
强烈推荐相关中文博客2:CSDN
3D变换雅可比海森矩阵计算:CSDN

一、基本原理

1.原理介绍

在使用NDT(Normal Distributions Transform)进行扫描配准时,目标是找到当前扫描的姿态,使得当前扫描的点云落在参考扫描表面上的可能性最大。姿态的旋转和平移可以用向量 p \mathbf{p} p 表示:
p = [ t x t y t z ϕ θ ψ ] \mathbf{p} = \begin{bmatrix} t_x \\ t_y \\ t_z \\ \phi \\ \theta \\ \psi \end{bmatrix} p= ​tx​ty​tz​ϕθψ​
给定一组点云 X = { x 1 , … , x n } X = \{\mathbf{x}_1, \dots, \mathbf{x}_n\} X={x1​,…,xn​},并假设有一个空间变换函数 T ( p , x ) T(\mathbf{p}, \mathbf{x}) T(p,x) 可以根据姿态 p \mathbf{p} p 移动点 x \mathbf{x} x。对于正态分布部分,其概率密度函数的形式为:

p ( x ) = 1 ( 2 π ) d / 2 ∣ Σ ∣ 1 / 2 exp ⁡ ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) p(\mathbf{x}) = \frac{1}{(2\pi)^{d/2} |\Sigma|^{1/2}} \exp\left( -\frac{1}{2} (\mathbf{x} - \mathbf{\mu})^T \Sigma^{-1} (\mathbf{x} - \mathbf{\mu}) \right) p(x)=(2π)d/2∣Σ∣1/21​exp(−21​(x−μ)TΣ−1(x−μ))

  • d d d 是数据的维度(例如,对于三维点云, d = 3 d = 3 d=3)
  • ∣ Σ ∣ |\Sigma| ∣Σ∣ 是协方差矩阵的行列式

在NDT中,通常使用一个混合模型来描述点的概率分布。该模型结合了正态分布和均匀分布,以提高对异常值的鲁棒性。

具体形式如下:

p ˉ ( x ) = c 1 exp ⁡ ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) + c 2 p 0 \bar{p}(\mathbf{x}) = c_1 \exp\left( -\frac{1}{2} (\mathbf{x} - \mathbf{\mu})^T \Sigma^{-1} (\mathbf{x} - \mathbf{\mu}) \right) + c_2 p_0 pˉ​(x)=c1​exp(−21​(x−μ)TΣ−1(x−μ))+c2​p0​

其中:

  • p ˉ ( x ) \bar{p}(\mathbf{x}) pˉ​(x) 是点 x \mathbf{x} x 的混合概率密度函数。
  • c 1 c_1 c1​ 和 c 2 c_2 c2​ 是归一化常数,确保整个概率分布的总和为1。
  • μ \mathbf{\mu} μ 是NDT单元内的均值。
  • Σ \Sigma Σ 是NDT单元内的协方差矩阵。
  • p 0 p_0 p0​ 是均匀分布的概率密度,用于表示异常值的期望比例。

在NDT中,优化目标是最小化负对数似然函数,它是基于概率密度函数的。给定点云 X = { x 1 , … , x n } X = \{\mathbf{x}_1, \ldots, \mathbf{x}_n\} X={x1​,…,xn​},NDT的负对数似然函数可以写为:

− log ⁡ Ψ = − ∑ k = 1 n log ⁡ ( p ( T ( p , x k ) ) ) -\log \Psi = -\sum_{k=1}^{n} \log \left( p(T(\mathbf{p}, \mathbf{x}_k)) \right) −logΨ=−k=1∑n​log(p(T(p,xk​)))

这里的 p ( T ( p , x k ) p(T(\mathbf{p}, \mathbf{x}_k) p(T(p,xk​) 是在变换后的点 T ( p , x k ) T(\mathbf{p}, \mathbf{x}_k) T(p,xk​) 下的概率密度函数值。通过最小化这个负对数似然函数,我们可以优化姿态参数,使得当前扫描点云与参考扫描的匹配度最大化。对于优化目的,可以将上述混合模型近似为高斯分布:
p ~ ( x ) = − d 1 exp ⁡ ( − d 2 2 ( x − μ ) T Σ − 1 ( x − μ ) ) \tilde{p}(\mathbf{x}) = -d_1 \exp \left( -\frac{d_2}{2} (\mathbf{x} - \mathbf{\mu})^T \Sigma^{-1} (\mathbf{x} - \mathbf{\mu}) \right) p~​(x)=−d1​exp(−2d2​​(x−μ)TΣ−1(x−μ))
其中, d 1 d_1 d1​, d 2 d_2 d2​ 和 d 3 d_3 d3​ 是通过拟合得到的参数。对于NDT配准, d 3 d_3 d3​ 常数被省略,因为它不影响优化过程中的结果。
给定一组点云 X = { x 1 , … , x n } X = \{\mathbf{x}_1, \dots, \mathbf{x}_n\} X={x1​,…,xn​},姿态 p \mathbf{p} p,以及变换函数 T ( p , x ) T(\mathbf{p}, \mathbf{x}) T(p,x),NDT得分函数为:
s ( p ) = − ∑ k = 1 n p ~ ( T ( p , x k ) ) s(\mathbf{p}) = -\sum_{k=1}^{n} \tilde{p}(T(\mathbf{p}, \mathbf{x}_k)) s(p)=−k=1∑n​p~​(T(p,xk​))
这个函数对应的是点 x k \mathbf{x}_k xk​ 在经过变换后的姿态 p \mathbf{p} p 下,落在参考扫描表面上的可能性。

2.优化流程

(1) 初始化阶段

  1. 初始化时,分配网格结构   B \ B  B。
  2. 对参考点云   Y \ Y  Y 中的每个点   y k ∈ Y \ \mathbf{y}_k \in Y  yk​∈Y,进行如下操作:
    • 找到包含点   y k \ \mathbf{y}_k  yk​ 的网格单元   b i ∈ B \ b_i \in B  bi​∈B。
    • 将点   y k \ \mathbf{y}_k  yk​ 存储到网格单元   b i \ b_i  bi​ 中。
  3. 对所有的网格单元   b i ∈ B \ b_i \in B  bi​∈B,进行如下操作:
    • 从网格单元   b i \ b_i  bi​ 中提取所有的点   Y ′ = { y 1 ′ , … , y m ′ } \ Y' = \{\mathbf{y}_1', \dots, \mathbf{y}_m'\}  Y′={y1′​,…,ym′​}。
    • 计算点的均值 μ i \mathbf{\mu}_i μi​,公式如下:
      μ i = 1 m ∑ k = 1 m y k ′ \mathbf{\mu}_i = \frac{1}{m} \sum_{k=1}^{m} \mathbf{y}_k' μi​=m1​k=1∑m​yk′​
    • 计算协方差矩阵 Σ i \Sigma_i Σi​,公式如下:
      Σ i = 1 m − 1 ∑ k = 1 m ( y k ′ − μ i ) ( y k ′ − μ i ) T \Sigma_i = \frac{1}{m-1} \sum_{k=1}^{m} (\mathbf{y}_k' - \mathbf{\mu}_i)(\mathbf{y}_k' - \mathbf{\mu}_i)^T Σi​=m−11​k=1∑m​(yk′​−μi​)(yk′​−μi​)T

(2) 配准阶段

  1. 初始化目标函数得分 score = 0 \text{score} = 0 score=0,梯度 g = 0 \mathbf{g} = 0 g=0,以及海森矩阵   H = 0 \ H = 0  H=0。
  2. 对扫描点云   X \ X  X 中的每个点   x k ∈ X \ \mathbf{x}_k \in X  xk​∈X,进行如下操作:
    • 找到包含变换后点   T ( p , x k ) \ T(\mathbf{p}, \mathbf{x}_k)  T(p,xk​) 的网格单元   b i \ b_i  bi​。
    • 更新得分  score \ \text{score}  score,公式如下:
      score = score + p ~ ( T ( p , x k ) ) \text{score} = \text{score} + \tilde{p}(T(\mathbf{p}, \mathbf{x}_k)) score=score+p~​(T(p,xk​))
      其中,   p ~ ( T ( p , x k ) ) \ \tilde{p}(T(\mathbf{p}, \mathbf{x}_k))  p~​(T(p,xk​)) 是根据方程计算的概率值:
      p ~ ( x k ) = − d 1 exp ⁡ ( − d 2 2 ( x k − μ k ) T Σ k − 1 ( x k − μ k ) ) p̃(\mathbf{x}_k) = -d_1 \exp\left( -\frac{d_2}{2} (\mathbf{x}_k - \mathbf{\mu}_k)^T \Sigma_k^{-1} (\mathbf{x}_k - \mathbf{\mu}_k) \right) p~​(xk​)=−d1​exp(−2d2​​(xk​−μk​)TΣk−1​(xk​−μk​))
    • 更新梯度 g \mathbf{g} g,参考方程:

g i = ∂ s ∂ p i = ∑ k = 1 n d 1 d 2 x k ′ T Σ k − 1 ∂ x k ′ ∂ p i exp ⁡ ( − d 2 2 x k ′ T Σ k − 1 x k ′ ) g_i = \frac{\partial s}{\partial p_i} = \sum_{k=1}^{n} d_1 d_2 \mathbf{x}_k'^T \Sigma_k^{-1} \frac{\partial \mathbf{x}_k'}{\partial p_i} \exp\left( -\frac{d_2}{2} \mathbf{x}_k'^T \Sigma_k^{-1} \mathbf{x}_k' \right) gi​=∂pi​∂s​=k=1∑n​d1​d2​xk′T​Σk−1​∂pi​∂xk′​​exp(−2d2​​xk′T​Σk−1​xk′​)
其中, x k ′ = T ( p , x k ) − μ k \mathbf{x}_k' = T(\mathbf{p}, \mathbf{x}_k) - \mathbf{\mu}_k xk′​=T(p,xk​)−μk​。
∂ x k ′ ∂ p i = [ 1 0 0 0 c f 0 1 0 a d g 0 0 1 b e h ] \frac{\partial \mathbf{x}_k'}{\partial p_i}= \begin{bmatrix} 1 & 0 & 0 & 0 & c & f \\ 0 & 1 & 0 & a & d & g \\ 0 & 0 & 1 & b & e & h \end{bmatrix} ∂pi​∂xk′​​= ​100​010​001​0ab​cde​fgh​
其中:

  • a = x 1 ( − s x s z + c x s y c z ) + x 2 ( − s x c z − c x s y s z ) + x 3 ( − c x c y ) a = x_1(-s_x s_z + c_x s_y c_z) + x_2(-s_x c_z - c_x s_y s_z) + x_3(-c_x c_y) a=x1​(−sx​sz​+cx​sy​cz​)+x2​(−sx​cz​−cx​sy​sz​)+x3​(−cx​cy​)
  • b = x 1 ( c x s z + s x s y c z ) + x 2 ( − s x s y s z + c x c z ) + x 3 ( − s x c y ) b = x_1(c_x s_z + s_x s_y c_z) + x_2(-s_x s_y s_z + c_x c_z) + x_3(-s_x c_y) b=x1​(cx​sz​+sx​sy​cz​)+x2​(−sx​sy​sz​+cx​cz​)+x3​(−sx​cy​)
  • c = x 1 ( − s y c z ) + x 2 ( s y s z ) + x 3 ( c y ) c = x_1(-s_y c_z) + x_2(s_y s_z) + x_3(c_y) c=x1​(−sy​cz​)+x2​(sy​sz​)+x3​(cy​)
  • d = x 1 ( s x c y c z ) + x 2 ( − s x c y s z ) + x 3 ( s x s y ) d = x_1(s_x c_y c_z) + x_2(-s_x c_y s_z) + x_3(s_x s_y) d=x1​(sx​cy​cz​)+x2​(−sx​cy​sz​)+x3​(sx​sy​)
  • e = x 1 ( − c x c y c z ) + x 2 ( c x c y s z ) + x 3 ( − c x s y ) e = x_1(-c_x c_y c_z) + x_2(c_x c_y s_z) + x_3(-c_x s_y) e=x1​(−cx​cy​cz​)+x2​(cx​cy​sz​)+x3​(−cx​sy​)
  • f = x 1 ( − c y s z ) + x 2 ( − c y c z ) f = x_1(-c_y s_z) + x_2(-c_y c_z) f=x1​(−cy​sz​)+x2​(−cy​cz​)
  • g = x 1 ( c x c z − s x s y s z ) + x 2 ( − c x s z − s x s y c z ) g = x_1(c_x c_z - s_x s_y s_z) + x_2(-c_x s_z - s_x s_y c_z) g=x1​(cx​cz​−sx​sy​sz​)+x2​(−cx​sz​−sx​sy​cz​)
  • h = x 1 ( s x c z + c x s y s z ) + x 2 ( c x s y c z − s x s z ) h = x_1(s_x c_z + c_x s_y s_z) + x_2(c_x s_y c_z - s_x s_z) h=x1​(sx​cz​+cx​sy​sz​)+x2​(cx​sy​cz​−sx​sz​)
  • 更新海森矩阵   H \ H  H,参考方程:

H i j = ∂ 2 s ∂ p i ∂ p j = ∑ k = 1 n d 1 d 2 exp ⁡ ( − d 2 2 x k ′ T Σ k − 1 x k ′ ) [ − d 2 ( x k ′ T Σ k − 1 ∂ x k ′ ∂ p i ) ( x k ′ T Σ k − 1 ∂ x k ′ ∂ p j ) + x k ′ T Σ k − 1 ∂ 2 x k ′ ∂ p i ∂ p j + ∂ x k ′ ∂ p j T Σ k − 1 ∂ x k ′ ∂ p i ] H_{ij} = \frac{\partial^2 s}{\partial p_i \partial p_j} = \sum_{k=1}^{n} d_1 d_2 \exp\left( -\frac{d_2}{2} \mathbf{x}_k'^T \Sigma_k^{-1} \mathbf{x}_k' \right) \left[ -d_2 \left( \mathbf{x}_k'^T \Sigma_k^{-1} \frac{\partial \mathbf{x}_k'}{\partial p_i} \right) \left( \mathbf{x}_k'^T \Sigma_k^{-1} \frac{\partial \mathbf{x}_k'}{\partial p_j} \right) + \mathbf{x}_k'^T \Sigma_k^{-1} \frac{\partial^2 \mathbf{x}_k'}{\partial p_i \partial p_j} + \frac{\partial \mathbf{x}_k'}{\partial p_j}^T \Sigma_k^{-1} \frac{\partial \mathbf{x}_k'}{\partial p_i} \right] Hij​=∂pi​∂pj​∂2s​=k=1∑n​d1​d2​exp(−2d2​​xk′T​Σk−1​xk′​)[−d2​(xk′T​Σk−1​∂pi​∂xk′​​)(xk′T​Σk−1​∂pj​∂xk′​​)+xk′T​Σk−1​∂pi​∂pj​∂2xk′​​+∂pj​∂xk′​​TΣk−1​∂pi​∂xk′​​]
∂ 2 x k ′ ∂ p i ∂ p j = [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 a b c 0 0 0 b d e 0 0 0 c e f ] \frac{\partial^2 \mathbf{x}_k'}{\partial p_i \partial p_j} = \begin{bmatrix} \begin{array}{cccccc} \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{a} & \mathbf{b} & \mathbf{c} \\ \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{b} & \mathbf{d} & \mathbf{e} \\ \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{c} & \mathbf{e} & \mathbf{f} \end{array} \end{bmatrix} ∂pi​∂pj​∂2xk′​​= ​000000​000000​000000​000abc​000bde​000cef​​
其中:

  • a = [ 0 x 1 ( − c x s z − s x s y c z ) + x 2 ( − c x c z + s x s y s z ) + x 3 ( s x c y ) x 1 ( − s x s z + c x s y c z ) + x 2 ( − s x s y s z − c x c z ) + x 3 ( − c x c y ) ] \mathbf{a} = \begin{bmatrix} 0 \\ x_1(-c_x s_z - s_x s_y c_z) + x_2(-c_x c_z + s_x s_y s_z) + x_3(s_x c_y) \\ x_1(-s_x s_z + c_x s_y c_z) + x_2(-s_x s_y s_z - c_x c_z) + x_3(-c_x c_y) \end{bmatrix} a= ​0x1​(−cx​sz​−sx​sy​cz​)+x2​(−cx​cz​+sx​sy​sz​)+x3​(sx​cy​)x1​(−sx​sz​+cx​sy​cz​)+x2​(−sx​sy​sz​−cx​cz​)+x3​(−cx​cy​)​
  • b = [ 0 x 1 ( c x c y c z ) + x 2 ( − c x c y s z ) + x 3 ( c x s y ) x 1 ( s x c y c z ) + x 2 ( − s x c y s z ) + x 3 ( s x s y ) ] \mathbf{b} = \begin{bmatrix} 0 \\ x_1(c_x c_y c_z) + x_2(-c_x c_y s_z) + x_3(c_x s_y) \\ x_1(s_x c_y c_z) + x_2(-s_x c_y s_z) + x_3(s_x s_y) \end{bmatrix} b= ​0x1​(cx​cy​cz​)+x2​(−cx​cy​sz​)+x3​(cx​sy​)x1​(sx​cy​cz​)+x2​(−sx​cy​sz​)+x3​(sx​sy​)​
  • c = [ 0 x 1 ( − s x c z − c x s y s z ) + x 2 ( − s x s z − s x s y c z ) x 1 ( c x c z − s x s y s z ) + x 2 ( − s x s y c z − s x s z ) ] \mathbf{c} = \begin{bmatrix} 0 \\ x_1(-s_x c_z - c_x s_y s_z) + x_2(-s_x s_z - s_x s_y c_z) \\ x_1(c_x c_z - s_x s_y s_z) + x_2(-s_x s_y c_z - s_x s_z) \end{bmatrix} c= ​0x1​(−sx​cz​−cx​sy​sz​)+x2​(−sx​sz​−sx​sy​cz​)x1​(cx​cz​−sx​sy​sz​)+x2​(−sx​sy​cz​−sx​sz​)​
  • d = [ x 1 ( − c y c z ) + x 2 ( c y s z ) + x 3 ( − s y ) x 1 ( − s x s y c z ) + x 2 ( s x s y s z ) + x 3 ( s x c y ) x 1 ( c x s y c z ) + x 2 ( − c x s y s z ) + x 3 ( − c x c y ) ] \mathbf{d} = \begin{bmatrix} x_1(-c_y c_z) + x_2(c_y s_z) + x_3(-s_y) \\ x_1(-s_x s_y c_z) + x_2(s_x s_y s_z) + x_3(s_x c_y) \\ x_1(c_x s_y c_z) + x_2(-c_x s_y s_z) + x_3(-c_x c_y) \end{bmatrix} d= ​x1​(−cy​cz​)+x2​(cy​sz​)+x3​(−sy​)x1​(−sx​sy​cz​)+x2​(sx​sy​sz​)+x3​(sx​cy​)x1​(cx​sy​cz​)+x2​(−cx​sy​sz​)+x3​(−cx​cy​)​
  • e = [ x 1 ( s y s z ) + x 2 ( s y c z ) x 1 ( − s x c y s z ) + x 2 ( − s x c y c z ) x 1 ( c x c y s z ) + x 2 ( c x c y c z ) ] \mathbf{e} = \begin{bmatrix} x_1(s_y s_z) + x_2(s_y c_z) \\ x_1(-s_x c_y s_z) + x_2(-s_x c_y c_z) \\ x_1(c_x c_y s_z) + x_2(c_x c_y c_z) \end{bmatrix} e= ​x1​(sy​sz​)+x2​(sy​cz​)x1​(−sx​cy​sz​)+x2​(−sx​cy​cz​)x1​(cx​cy​sz​)+x2​(cx​cy​cz​)​
  • f = [ x 1 ( − c y c z ) + x 2 ( c y s z ) x 1 ( − c x s z − s x s y c z ) + x 2 ( − c x c z + s x s y s z ) x 1 ( − s x s z + c x s y c z ) + x 2 ( − c x s y s z − s x s z ) ] \mathbf{f} = \begin{bmatrix} x_1(-c_y c_z) + x_2(c_y s_z) \\ x_1(-c_x s_z - s_x s_y c_z) + x_2(-c_x c_z + s_x s_y s_z) \\ x_1(-s_x s_z + c_x s_y c_z) + x_2(-c_x s_y s_z - s_x s_z) \end{bmatrix} f= ​x1​(−cy​cz​)+x2​(cy​sz​)x1​(−cx​sz​−sx​sy​cz​)+x2​(−cx​cz​+sx​sy​sz​)x1​(−sx​sz​+cx​sy​cz​)+x2​(−cx​sy​sz​−sx​sz​)​
  1. 求解线性方程   H Δ p = − g \ H \Delta \mathbf{p} = -\mathbf{g}  HΔp=−g。
  2. 更新参数 p \mathbf{p} p,公式如下:
    p = p + Δ p \mathbf{p} = \mathbf{p} + \Delta \mathbf{p} p=p+Δp

标签:分析,sz,sy,sx,mathbf,cz,cx,原理,NDT
From: https://blog.csdn.net/weixin_41331879/article/details/142980041

相关文章

  • 常用Python数据分析开源库:Numpy、Pandas、Matplotlib、Seaborn、Sklearn介绍
    文章目录1.常用Python数据分析开源库介绍1.1Numpy1.2Pandas1.3Matplotlib1.4Seaborn1.5Sklearn1.常用Python数据分析开源库介绍1.1NumpyNumpy(NumericalPython)是Python数据分析必不可少的第三方库,Numpy的出现一定程度上解决了Python运算性能不佳的问题,同......
  • AI 3D拣选系统行业分析:物流行业是最主要的需求来源
    AI3D拣选系统是一种集成了先进传感技术、机器人技术和计算机视觉技术的自动化分拣解决方案。它能够在三维空间内快速、准确地识别和分拣各种形状、大小和材质的物品,大大提高了物流效率和准确性。该系统通过高精度的3D传感器和先进的视觉算法,能够实时捕捉物品的三维信息,并据此......
  • OCR文字识别:深入剖析原理与技术实现全流程
    在当今信息化时代,OCR(OpticalCharacterRecognition,光学字符识别)技术已经成为我们日常生活和工作中不可或缺的一部分。无论是证件识别、名片识别,还是车牌识别,OCR技术都发挥着重要作用。本文将深入剖析OCR文字识别的原理与技术实现全流程,帮助读者更好地理解这一技术。一、OCR技......
  • 《柯娜:精神之桥》游戏未响应弹窗“缺少msvcp100.dll”文件的原因分析及处理教程
    当玩家们兴致勃勃地准备开启《柯娜:精神之桥》的游戏之旅时,却突然遭遇游戏未响应,弹窗提示“缺少msvcp100.dll”文件,这无疑给玩家们的热情浇上了一盆冷水。究竟是什么原因导致了这一情况的发生?又该如何去解决呢?下面将为大家详细分析原因并给出处理教程。未响应弹窗“缺少msvcp1......
  • SQL 分析函数看这篇函数就够了
    数据库SQL分析函数/窗口函数专题,绝对值得收藏!此专题几乎涵盖所有主流数据库,如Oracle、Hive、MySQL8.0、MaxComputer等。在企业面试中,分析函数问题更是备受青睐,无论是笔试还是面试,基本都绕不开。分析函数主要分为以下四类:聚合分析函数SUM:用于计算组中表达式的累积......
  • Fault Domain深入分析
    FaultDomain深入分析......
  • ros2_control 架构分析(2)-HardwareInterface
    1.介绍在ROS2_control框架中,hardware模块负责与物理硬件进行直接通信。它抽象了三类硬件:system、sensor和actuator,分别对应复杂的系统、仅输出数据的传感器和仅接收输入的执行器。2.类与接口在ROS2_control中,system、sensor和actuator作为三个核心类存在被上层调用,它们各自......
  • 图像cv常用操作原理和方法说明
    图像cv常用操作原理和方法说明灰度、平滑、滤波、仿射变化、形态学BORDERTYPE边填充边扩展时填充值的方式cv.BORDER_DEFAULT等同于BORDER_REFLECT_101可通过cv.copyMakeBorder查看效果灰度变化作用如果拍照时曝光不足或曝光过度,照片会灰蒙蒙的或者过白,这实......
  • 如何通过K线图分析进行决策?
    K线图,又称蜡烛图,是源自日本的技术分析工具,广泛用于股票、期货、外汇等金融市场的价格趋势分析。每根K线由实体部分(蜡烛体)和影线组成,展示出某一时间段内市场的开盘价、收盘价、最高价和最低价。通过分析K线图,投资者可以识别市场趋势、支撑与阻力位、以及潜在的反转信号。K线图......
  • 剖析线程池实现原理
    前置推荐阅读:java并发之线程池使用-CSDN博客自定义实现一个带监控的线程池首先我们继承ThreadPoolExecutor,实现构造函数以及重写beforeExecute和afterExecute两个函数,具体调用我们会在代码实现层面进行详细的分析。importjava.util.concurrent.*;publicclassAsyncTh......