結構光三維重建原理詳解(1)

1. 基本原理概述

結構光三維重建(Structured Light 3D Reconstruction)是一種主動式光學測量方法。其核心思想是:

  • 向物體表面投射一組 已知的、編碼好的光柵/條紋圖案
  • 使用一個或多個攝像機拍攝這些條紋在物體表面的變形情況;
  • 根據條紋變形推算物體表面點的空間三維坐標。

結構光的本質是 將三維重建問題轉化為已知投影模式與變形觀測之間的幾何約束問題


2. 系統組成

一個完整的結構光三維重建系統通常由 硬件部分軟件部分 共同構成。硬件負責信號的產生與采集,軟件負責數據處理與三維重建。


2.1 投影模塊

投影模塊的作用是 將已知的結構光編碼圖案投射到被測物體表面。它通常由以下幾部分構成:

  • 投影器(Projector)

    • 類似微型投影儀(DLP、LCD、LCOS 技術常見),可以精確控制每個像素的光強。

    • 要求:

      • 高分辨率(保證投影條紋精細度)。
      • 高對比度(保證條紋邊界清晰,便于后續解碼)。
      • 穩定光源(避免閃爍造成相機曝光差異)。
  • 投影圖案(Patterns)

    • 根據編碼方式的不同,投影的圖案可能是:

      • 二值條紋、Gray 編碼、彩色編碼。
      • 正弦相移條紋。
      • 隨機散斑。
    • 投影圖案的選擇直接決定了 解碼方式測量精度

    • 一般投影儀與相機需固定在剛性支架上,保證幾何關系穩定。


2.2 成像模塊(相機)

成像模塊的任務是 采集被投影圖案調制后的物體表面圖像
關鍵要點:

  • 相機類型

    • 工業相機、單反相機或高速相機。
    • 彩色相機可直接解碼彩色結構光,黑白相機常配合多幀灰度圖案。
  • 成像質量要求

    • 高分辨率(保證三角測量點的稠密性)。
    • 高幀率(保證動態物體測量)。
    • 低畸變鏡頭(減少幾何誤差)。
    • 良好的信噪比(避免光強抖動影響條紋識別)。
  • 幾何參數

    • 相機的 內參(焦距、主點、畸變系數)和 外參(相機與投影儀之間的相對位姿)是三角測量計算三維點的關鍵。

2.3 控制與同步模塊

結構光測量需要 投影與拍攝嚴格同步,否則條紋會錯位,導致解碼失敗。

  • 觸發機制

    • 硬件觸發:由控制電路統一觸發相機和投影儀。
    • 軟件觸發:通過高精度時鐘協調,但誤差較大。
  • 同步方式

    • 幀同步:相機在投影儀更新一幅圖案時準確曝光。
    • 多機同步:若采用多相機測量,必須保證它們在同一時刻采集數據。

2.4 數據處理模塊(軟件部分)

這是系統的核心,主要包括以下幾個步驟:

  1. 圖案解碼

    • 根據投影方式提取相機圖像中的條紋信息。

    • 示例:

      • Gray 編碼:逐位解碼條紋編號。
      • 相移法:通過多幅相移正弦圖案,計算相位分布。
  2. 匹配與相位展開

    • 將相機中每個像素與投影圖案中的像素位置對應起來。
    • 相移法還需解決“相位模糊(2π周期性)”,常用相位展開算法。
  3. 三角測量

    • 根據相機與投影儀的幾何模型,利用三角測量公式計算三維點坐標:

      Z=f?Bd Z = \frac{f \cdot B}{d} Z=df?B?

      其中 fff 為相機焦距,BBB 為基線長度,ddd 為視差。

  4. 點云生成與優化

    • 將所有像素解算得到的三維點集合形成點云。
    • 對點云進行去噪、濾波、重采樣,提高表面質量。
  5. 后處理

    • 點云拼接(多視角融合)。
    • 表面重建(Poisson 重建、Delaunay 三角化等)。
    • 紋理映射。

2.5 校準模塊

投影儀和相機的幾何關系是三維重建的基礎,必須通過 系統校準 獲取。

  • 相機標定:求取內參(焦距、主點、畸變系數)。
  • 投影儀標定:把投影儀當作“反向相機”,通過投影標定板圖案進行標定。
  • 系統標定:得到相機與投影儀的外參(旋轉矩陣和平移向量)。

只有完成標定,三角測量才能保證三維重建的精度。


3. 數學原理與推導

3.1 三角測量原理(詳細推導與數值實現)

3.1.1 基本模型(相機 / 投影儀 都按針孔模型)
  • 相機內參:KcK_cKc?。投影儀內參:KpK_pKp?(把 projector 當“反向相機”建模)。
  • 相機坐標系到投影儀坐標系的外參:旋轉 RRR、平移 ttt(將投影儀坐標變換到相機坐標:xc=Rxp+t\mathbf{x}_c = R\mathbf{x}_p + txc?=Rxp?+t)。
  • 相機像素 uc=[uc,vc,1]?\mathbf{u}_c=[u_c,v_c,1]^\topuc?=[uc?,vc?,1]?,投影儀像素/投影坐標 up=[up,vp,1]?\mathbf{u}_p=[u_p,v_p,1]^\topup?=[up?,vp?,1]?

針孔投影給出射線方向(未縮放):

dc∝Kc?1uc,dp∝Kp?1up. \mathbf{d}_c \propto K_c^{-1}\mathbf{u}_c,\qquad \mathbf{d}_p \propto K_p^{-1}\mathbf{u}_p. dc?Kc?1?uc?,dp?Kp?1?up?.

dc,dp\mathbf{d}_c,\mathbf{d}_pdc?,dp? 都歸一化(或不歸一化也可,但后續公式需一致)。

空間約束(理想無噪聲):某個三維點在相機系的坐標可以寫成沿相機射線的參數化:

Xc=λcdc, \mathbf{X}_c = \lambda_c \mathbf{d}_c, Xc?=λc?dc?,

在投影儀系中為

Xp=λpdp, \mathbf{X}_p = \lambda_p \mathbf{d}_p, Xp?=λp?dp?,

二者由外參聯系:

λcdc=R(λpdp)+t. \lambda_c \mathbf{d}_c = R(\lambda_p \mathbf{d}_p) + t. λc?dc?=R(λp?dp?)+t.

這是三維向量方程(3 個標量方程),未知為兩個尺度因子 λc,λp\lambda_c,\lambda_pλc?,λp?

3.1.2 解析求解(最小二乘 / 最近點法)

把上式重寫為線性系統(矩陣形式):

A[λcλp]=t,A=[?dc??,???Rdp?](3×2). A \begin{bmatrix}\lambda_c\\ \lambda_p\end{bmatrix} = t,\quad A = \big[\,\mathbf{d}_c \;,\; -R\mathbf{d}_p\,\big]\quad(3\times2). A[λc?λp??]=t,A=[dc?,?Rdp?](3×2).

這是一個過約束的線性系統(3 eq, 2 unknowns),在存在噪聲時用最小二乘求解:

[λcλp]=(A?A)?1A?t. \begin{bmatrix}\lambda_c\\ \lambda_p\end{bmatrix} = (A^\top A)^{-1} A^\top t. [λc?λp??]=(A?A)?1A?t.

得到 λc\lambda_cλc? 后,三維點取為 Xc=λcdc\mathbf{X}_c=\lambda_c \mathbf{d}_cXc?=λc?dc?。由于兩條射線通常不嚴格相交(噪聲、標定誤差),更穩健的做法是計算兩條最近點并取中點:

設兩條線 L1:p1+sv1L_1: \mathbf{p}_1 + s\mathbf{v}_1L1?:p1?+sv1?(攝像機中心 p1\mathbf{p}_1p1?,方向 v1=dc\mathbf{v}_1=\mathbf{d}_cv1?=dc?), L2:p2+tv2L_2: \mathbf{p}_2 + t\mathbf{v}_2L2?:p2?+tv2?(投影儀中心 p2=t\mathbf{p}_2=tp2?=t 在相機系,方向 v2=Rdp\mathbf{v}_2 = R\mathbf{d}_pv2?=Rdp?)。求使距離最小的參數 s,ts,ts,t

w=p1?p2\mathbf{w}=\mathbf{p}_1-\mathbf{p}_2w=p1??p2?,則求解線性系統(見推導):

[v1?v1?v1?v2v1?v2?v2?v2][st]=[v1?wv2?w]. \begin{bmatrix} \mathbf{v}_1\cdot\mathbf{v}_1 & -\mathbf{v}_1\cdot\mathbf{v}_2\\[2pt] \mathbf{v}_1\cdot\mathbf{v}_2 & -\mathbf{v}_2\cdot\mathbf{v}_2 \end{bmatrix} \begin{bmatrix}s\\ t\end{bmatrix} =\begin{bmatrix}\mathbf{v}_1\cdot\mathbf{w}\\[2pt]\mathbf{v}_2\cdot\mathbf{w} \end{bmatrix}. [v1??v1?v1??v2???v1??v2??v2??v2??][st?]=[v1??wv2??w?].

求出 s,ts,ts,t,對應最近點 P1=p1+sv1\mathbf{P}_1=\mathbf{p}_1+s\mathbf{v}_1P1?=p1?+sv1?P2=p2+tv2\mathbf{P}_2=\mathbf{p}_2+t\mathbf{v}_2P2?=p2?+tv2?,最后取 (P1+P2)/2(\mathbf{P}_1+\mathbf{P}_2)/2(P1?+P2?)/2 作為估計點。

推薦數值實現:用小矩陣解方程(2×2)或 SVD/QR 保證穩定性;當兩條射線接近共面/共線時矩陣條件數惡化,需特殊處理(丟棄或標記為不可靠)。

3.1.3 特殊簡化:標定已做且已矩形化(rectified) — “視差”公式

若系統做成與傳統立體視覺類似(基線平行于像平面 x 軸,視差 d=uc?upd=u_c-u_pd=uc??up?),有經典深度公式:

Z=fBd, Z = \frac{f B}{d}, Z=dfB?,

其中 fff 是(等效)焦距(像素),BBB 是相機-投影儀基線(米),ddd 是視差(像素)。這個公式便于快速估計誤差傳播。

3.1.4 誤差傳播(深度對視差的敏感度)

對視差誤差 σd\sigma_dσd? 的一階近似:

σZ≈∣?Z?d∣σd=fBd2σd. \sigma_Z \approx \left|\frac{\partial Z}{\partial d}\right|\sigma_d = \frac{fB}{d^2}\sigma_d. σZ???d?Z??σd?=d2fB?σd?.

舉例:f=1000f=1000f=1000 px, B=0.1B=0.1B=0.1 m, d=20d=20d=20 px, σd=0.1\sigma_d=0.1σd?=0.1 px,則

σZ=1000×0.1202×0.1=100400×0.1=0.25×0.1=0.025?m=25?mm. \sigma_Z = \frac{1000\times 0.1}{20^2}\times 0.1 = \frac{100}{400}\times 0.1 = 0.25\times 0.1 = 0.025\ \text{m} =25\ \text{mm}. σZ?=2021000×0.1?×0.1=400100?×0.1=0.25×0.1=0.025?m=25?mm.

說明:視差小(遠景)時深度誤差會迅速變大;提高基線 BBB、焦距 fff、或減小視差噪聲(提升亞像素精度)可以降低深度不確定性。


3.2 圖案編碼與相位解碼

結構光的目標是為每個相機像素找到對應投影儀像素。實現這一步通常用“編碼(coarse) + 相位(fine)”的混合策略,以兼顧絕對值(哪一條條紋)和亞像素精度

3.2.1 格雷碼(Gray code)——獲得絕對條紋序號(粗匹配)

  • 思路:在投影器上按列(或行)投射一系列二值條紋位平面,每個位平面代表二進制的一個位(從高位到低位)。相機記錄每幀,可靠地判斷 0/1 后就能恢復每個投影器列的二進制編號(經過 Gray->binary 轉換)。
  • Gray code 的優點:相鄰列只有 1 位不同,減小邊緣抖動導致多位錯誤的概率。
  • 缺點:分辨率受限于投影器像素間隔(只能得到整像素級對應);對遮擋/陰影敏感(那些像素無法解碼)。

工程實踐:常把 Gray code 得到的“整數列索引”當作相位解包(unwrap)時的粗索引(fringe order),與相移相位結合得到絕對亞像素位置。

3.2.2 相移法(Phase-shifting)——獲得亞像素精度(細匹配)

模型(N 步相移)

投影正弦條紋(例如沿 x 方向),第 kkk 幀投影相移 δk\delta_kδk?。相機在像素 (x,y)(x,y)(x,y) 記錄強度:

Ik(x,y)=Ia(x,y)+Im(x,y)cos?(?(x,y)+δk)+nk, I_k(x,y) = I_a(x,y) + I_m(x,y)\cos(\phi(x,y) + \delta_k) + n_k, Ik?(x,y)=Ia?(x,y)+Im?(x,y)cos(?(x,y)+δk?)+nk?,

  • IaI_aIa? 背景平均亮度;ImI_mIm? 調制幅度(對比度);?(x,y)\phi(x,y)?(x,y) 為該像素的相位(與投影器坐標線性相關);nkn_knk? 為噪聲。
  • 典型 δk=2πkN\delta_k = \frac{2\pi k}{N}δk?=N2πk?(等間隔),常用 N=3,4,5…N=3,4,5\ldotsN=3,4,5
相位解法(通用 N 步公式)

定義:

C=∑k=0N?1Ikcos?δk,S=∑k=0N?1Iksin?δk. C = \sum_{k=0}^{N-1} I_k \cos\delta_k,\qquad S = \sum_{k=0}^{N-1} I_k \sin\delta_k. C=k=0N?1?Ik?cosδk?,S=k=0N?1?Ik?sinδk?.

那么**包裝相位(wrapped phase)**由

?wrap=atan2?(S,C) \phi_{\text{wrap}} = \operatorname{atan2}(S, C) ?wrap?=atan2(S,C)

得到,范圍 (?π,π](-\pi, \pi](?π,π](或 [0,2π)[0,2\pi)[0,2π) 視實現)。

特殊常見公式(N=3,δ∈{0,2π/3,4π/3}\delta\in\{0,2\pi/3,4\pi/3\}δ{0,2π/3,4π/3}):

?=arctan?3(I1?I3)2I2?I1?I3. \phi = \arctan\frac{\sqrt{3}(I_1 - I_3)}{2I_2 - I_1 - I_3}. ?=arctan2I2??I1??I3?3?(I1??I3?)?.

同時可以估計平均亮度與幅度:

Ia=1N∑kIk,Im≈2NC2+S2. I_a = \frac{1}{N}\sum_k I_k,\qquad I_m \approx \frac{2}{N}\sqrt{C^2+S^2}. Ia?=N1?k?Ik?,Im?N2?C2+S2?.

包裝相位(wrapped)與絕對相位(unwrapped)
  • ?wrap\phi_{\text{wrap}}?wrap? 只給出模 2π2\pi2π 的相位信息(即在每個周期內部);要得到與投影器全局坐標對應的絕對相位,需要**相位展開(phase unwrapping)**或用 Gray code 給出粗索引。
  • 常用做法:先用 Gray code 得到每像素對應的“周期編號 mmm”(整數),再合成:

Φabs(x,y)=?wrap(x,y)+2πm(x,y). \Phi_{\text{abs}}(x,y) = \phi_{\text{wrap}}(x,y) + 2\pi m(x,y). Φabs?(x,y)=?wrap?(x,y)+2πm(x,y).

再將絕對相位映射到投影儀像素坐標(見 3.3)。

相位展開算法(二維)
  • 路徑(質量)引導型:根據每像素的“相位質量”(比如幅值 ImI_mIm?)從高質量像素開始逐步展開,避免傳播錯誤(Goldstein 等方法)。
  • 區域生長/邊界跟蹤:從可靠區擴散到不可靠區。
  • 多頻/多步時域方法(見下)也經常用于獲得絕對相位,減少空間展開需求。
多頻/多波長相移(temporal/multi-frequency)

當單頻相位周期重復很多次(高頻),展開困難且對噪聲敏感。采用兩組(或多組)不同頻率 f1,f2f_1,f_2f1?,f2? 的相移,分別測得被包裝的相位 ?1,?2\phi_1,\phi_2?1?,?2?,利用兩者的“差頻”產生更長的合成波長,從而實現 粗到細 的無歧義解包(相當于用中國剩余定理思想):

如果理論上 ?i=2πfixp?(?mod??2π)\phi_i = 2\pi f_i x_p \ (\bmod\ 2\pi)?i?=2πfi?xp??(mod?2π),則目標是求出整數 kkk 使得:

xp=?1+2πk2πf1 x_p = \frac{\phi_1 + 2\pi k}{2\pi f_1} xp?=2πf1??1?+2πk?

(?2+2πm)/(2πf2)(\phi_2 + 2\pi m)/(2\pi f_2)(?2?+2πm)/(2πf2?) 一致,從而可解出 k,mk,mk,m。實際常用近似整數估計公式(工程實現采用最近整數量化以容忍噪聲)。

噪聲與 SNR(相位精度)

相位測量的方差與調制幅度、測量噪聲、步數 N 有關。近似關系(簡化形式):

σ?2≈2NσI2Im2, \sigma_\phi^2 \approx \frac{2}{N} \frac{\sigma_I^2}{I_m^2}, σ?2?N2?Im2?σI2??,

其中 σI2\sigma_I^2σI2? 是強度測量噪聲的方差。結論:增大 N(更多相移幀)、提高調制幅度 ImI_mIm? 或降低噪聲都會降低相位誤差。

3.2.3 Gray code + 相移的混合策略(常用)

  • 先投 Gray code 得整數周期編號(魯棒識別大致位置,抗噪/誤碼);
  • 再投 N 步相移條紋以獲得包裝相位(亞像素);
  • 最后合成絕對相位映射到投影器像素坐標。這種混合方法兼顧了魯棒性(整像素)與精度(亞像素)。

3.2.4 工程細節與抗干擾

  • 環境光與伽瑪校正:投影亮度經過屏幕/被測物反射并被相機感知,必須做伽瑪補償或輻射度校正(線性化)以保證正弦模型成立。
  • 曝光與增益自適應:不同區域反射差異極大時,采用多曝光或曝光自適應(局部)以保持足夠 ImI_mIm?
  • 漂白/飽和檢測:檢測飽和像素并在重建中剔除或用插值填補。
  • 遮擋/陰影的處理:利用多攝像頭或多角度投影,或在 Gray code 解碼時標記無法解碼的像素并在后處理插值。
  • 鏡面/透明材質:對于強鏡面反射或半透明材質,結構光直接重建困難,通常需要涂抹消光劑或采用偏振/多光譜方法。

3.3 從相位/像素到三維的完整映射

在有了相機像素位置 uc\mathbf{u}_cuc? 和對應的 投影器坐標(可以是連續的亞像素)up\mathbf{u}_pup?(或投影器列坐標 xpx_pxp? 后,按 3.1 的三角化方法恢復三維點。

3.3.1 相位到投影器像素坐標的映射(重要公式)

假設在投影器水平方向上投射 NxN_xNx? 個周期(周期數可以為 1 以上),投影器寬度為 WpW_pWp?(像素或歸一化單位)。投影上單次正弦周期產生的相位與投影器坐標關系:

?=2π?NxWp?xp(?mod?2π). \phi = 2\pi \cdot \frac{N_x}{W_p}\cdot x_p \quad (\bmod 2\pi). ?=2π?Wp?Nx???xp?(mod2π).

因此絕對相位(已解包)與投影器坐標的關系:

xp=Φabs2π?WpNx. x_p = \frac{\Phi_{\text{abs}}}{2\pi}\cdot\frac{W_p}{N_x}. xp?=2πΦabs???Nx?Wp??.

更通俗一點:一個完整的 2π2\pi2π 相位對應 Wp/NxW_p/N_xWp?/Nx? 個像素(即一個周期寬度)。如果你用 Gray code 得到周期編號 mmm,完整表達式為:

xp=(?wrap2π+m)?WpNx. x_p = \left(\frac{\phi_{\text{wrap}}}{2\pi} + m\right)\cdot\frac{W_p}{N_x}. xp?=(2π?wrap??+m)?Nx?Wp??.

如果投影圖案在垂直方向也編碼 vpv_pvp?,對應類似處理。

3.3.2 把投影器像素轉換為投影光線方向

投影器像素 [up,vp,1]?[u_p,v_p,1]^\top[up?,vp?,1]? → 未歸一化射線方向:

dp=Kp?1up. \mathbf{d}_p = K_p^{-1}\mathbf{u}_p. dp?=Kp?1?up?.

(若投影器像素是連續的亞像素值也成立)。在計算時建議把 dp\mathbf{d}_pdp? 歸一化以減小數值問題。

3.3.3 三角化(把 3.1 的公式工程化)

  • 預先在初始化/標定時計算投影器中心在相機系的位置 ttt 與方向旋轉 RRR

  • 對每個像素 uc\mathbf{u}_cuc?

    1. 從相位和 Gray code 得到投影器像素 up\mathbf{u}_pup?
    2. 計算 dc=Kc?1uc\mathbf{d}_c = K_c^{-1}\mathbf{u}_cdc?=Kc?1?uc?dp=Kp?1up\mathbf{d}_p = K_p^{-1}\mathbf{u}_pdp?=Kp?1?up?
    3. 在相機系中令 v1=dc,?p1=0\mathbf{v}_1=\mathbf{d}_c,\ \mathbf{p}_1=\mathbf{0}v1?=dc?,?p1?=0(攝像機中心),v2=Rdp,?p2=t\mathbf{v}_2 = R\mathbf{d}_p,\ \mathbf{p}_2 = tv2?=Rdp?,?p2?=t(投影儀中心在相機系)。
    4. 求解最短連線參數 s,ts,ts,t(見 3.1.2 的 2×2 線性系統),取兩線最近點中點為 Xc\mathbf{X}_cXc?
    5. 可額外做基于相位/強度的置信度過濾:如果 ImI_mIm? 很小或 Gray 解碼失敗則標記為 invalid。

偽代碼要點(矢量化實現更快):

for each camera pixel u_c:u_p = phase_to_projector_pixel(phi_wrap(u_c), gray_index(u_c))d_c = Kc^{-1} * u_c; normalized_p = Kp^{-1} * u_p; normalizev1 = d_c; p1 = [0,0,0]v2 = R * d_p; p2 = tsolve 2x2 for s,tP1 = p1 + s*v1; P2 = p2 + t*v2X = (P1 + P2)/2store X if confidence OK

3.3.4 亞像素精化與回投校正

  • 得到初始三維點后可以把點回投到投影器與相機圖像上,計算重投影誤差并用小范圍非線性優化(例如對 Φabs\Phi_{\text{abs}}Φabs? 做亞像素校正,或對 X\mathbf{X}X 做 Levenberg–Marquardt 微調)來改善精度。
  • 在高精度應用(亞毫米 / 工業檢測)常見做法:先粗重建,再在局部窗口對相位做橫向/縱向相位剖面擬合或用互相關(NCC)做亞像素匹配以獲得更穩定的視差。

3.3.5 相位誤差如何轉化為深度誤差(組合公式)

  1. 相位誤差 δ?\delta\phiδ? 導致投影像素誤差:

δxp=Wp2πNx?δ?. \delta x_p = \frac{W_p}{2\pi N_x}\,\delta\phi. δxp?=2πNx?Wp??δ?.

  1. 該像素誤差轉為視差誤差(若系統已矩形化或把 δxp\delta x_pδxp? 等同于視差 δd\delta dδd)后,深度誤差近似為:

δZ≈fBd2?δd(或把?δd=δxp?代入). \delta Z \approx \frac{f B}{d^2}\,\delta d \quad\text{(或把 }\delta d=\delta x_p\text{ 代入)}. δZd2fB?δd(或把?δd=δxp??代入).

組合:

δZ≈fBd2?Wp2πNx?δ?. \delta Z \approx \frac{fB}{d^2}\cdot \frac{W_p}{2\pi N_x}\,\delta\phi. δZd2fB??2πNx?Wp??δ?.

從這個式子可以看出:相位噪聲在高頻(大 NxN_xNx?)時在投影像素空間映射較小,但通過視差轉換到深度仍可能放大 —— 存在 trade-off:更密的條紋提升相位分辨率但會使絕對相位解包更困難且對噪聲更敏感。實際工程上常用多頻混合(低頻確定全局、 高頻給出細節)來平衡。


在結構光三維重建中,相機和投影儀的幾何參數直接決定了三角測量的精度。
標定(Calibration)的目標是 確定相機與投影儀的成像模型及它們之間的空間關系,為后續的三維點計算提供可靠依據。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/99010.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/99010.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/99010.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TruckSim與Matlab-Simulink聯合仿真(一)

摘要 從0到1的TruckSim與Matlab-Simulink 簡單的聯合仿真。 1. 環境搭建 matlab版本:R2022a TruckSim版本:2019 其他適配版本自行搜索。 matlabR2022a安裝參考:參考鏈接 TruckSim2019安裝包百度網盤鏈接,里面有安裝流程&#x…

后端post請求返回頁面,在另一個項目中請求過來會出現的問題

目錄 1.后端post請求返回頁面,跨域問題 一、核心問題:跨域(CORS)限制(最直接的技術障礙) 具體表現: 二、安全性問題:CSRF 攻擊風險被放大 原理與危害: 三、交互體驗…

APT32F0042F6P6 32位微控制器(MCU)單片機 APT愛普特微電子 芯片核心解析

一、核心解析:APT32F0042F6P6 是什么?1. 電子元器件類型APT32F0042F6P6 是愛普特微電子(APTCHIP) 推出的一款基于平頭哥THead內核的32位微控制器(MCU)。它采用TSSOP20封裝,是一款主打高性價比、…

SDR集成式收發器設計資源

一、AD9361 制造商產品編號:ADRV9361-Z7035 庫存編號:4032703 價格:CNY17,737.18 含稅 制造商產品編號:ADRV1CRR-BOB 庫存編號:4023108 價格:CNY3,145.87 含稅 制造商產品編號:ADRV1CRR-FMC 庫存…

將Varjo XR技術融入飛行模擬器,有效降低成本提升訓練效果

擴展現實(XR)飛行模擬器通過以較低的成本提供沉浸式和逼真的飛行環境,徹底改變了飛行訓練。本文將XR利用了最近的研究和數據進行綜合分析,評估飛行模擬器的有效性。此外,根據XR技術在航空訓練中的優勢和應用,評估XR飛行模擬器最終…

簡單的GIT操作學習記錄

Git 版本控制基本使用 1.Idea版本共計基本操作 公司使用Git作為代碼版本管理工具,平時使用非常頻繁這里簡單整理方便后續學習查看 1.1 merge未推送回滾 我們代碼merge操作后,并且沒有推送到遠端,本地項目發現有推送箭頭,可以使…

Spring Boot 與前端文件下載問題:大文件、斷點續傳與安全校驗

前言在企業級 Spring Boot 項目中,文件下載 是非常常見的功能場景:用戶下載報表、合同、發票 PDF下載圖片、音視頻資源系統導出大規模 Excel/CSV 數據然而,很多開發者在實現文件下載時,會遇到 下載失敗、文件損壞、性能瓶頸、斷點…

主板硬件研發基礎--HDMI工作原理

HDMI 接口 技術原理:HDMI 接口采用 TMDS 技術傳輸數字信號,不僅可以傳輸高清視頻信號,還能同時傳輸多聲道音頻信號。它支持 EDID 和 DDC2B,設備之間能夠自動協商并選擇最合適的視頻 / 音頻格式,實現 “即插即用” 功能。 接口類型:常見的有標準 HDMI 接口、Mini-HDMI 接口…

`Object.groupBy`將數組中的數據分到對象中

Object.groupBy 將一個對象或者數組的元素按照規則分組, 返回一個新對象, Object.groupBy(items, callbackFn) items:要分組的對象或數組(通常是數組)。 callbackFn(element, index, array):回調函數&#…

反序列化漏洞詳解

用途限制聲明,本文僅用于網絡安全技術研究、教育與知識分享。文中涉及的滲透測試方法與工具,嚴禁用于未經授權的網絡攻擊、數據竊取或任何違法活動。任何因不當使用本文內容導致的法律后果,作者及發布平臺不承擔任何責任。滲透測試涉及復雜技…

SQL數據分析原代碼--創建表與簡單查詢

CREATE TABLE:創建表,定義字段名、類型、注釋INSERT INTO:插入數據,支持單條或批量插入SELECT:查詢數據,*表示所有字段,AS可起別名,DISTINCT去重WHERE:條件篩選&#xff…

k8s查詢ServiceAccount有沒有列出 nodes 的權限

要檢查 ServiceAccount xxxxxx:default 是否具有列出 nodes 的權限,可以使用以下方法:1. **使用 kubectl auth can-i 命令**這是最直接的方法,可以檢查特定用戶或 ServiceAccount 是否具有特定權限:kubectl auth can-i list nodes…

調試Python程序時,控制臺一直打印SharedMemory read faild

from tkinter import filedialog filedialog.askopenfilename()在使用 tkinter 時,只要一處罰,控制臺就不停打印 SharedMemory read faild ,雖然能用,但是大大的破壞了調試體驗,看到如下的提示,你說煩不煩&…

QRCode React 完全指南:現代化二維碼生成解決方案

前言 在數字化時代,二維碼已經成為連接線上線下的重要橋梁。無論是分享鏈接、支付碼、還是身份驗證,二維碼都扮演著不可或缺的角色。qrcode.react 是一個專門為 React 應用設計的二維碼生成庫,它能夠快速、靈活地生成各種樣式的二維碼&#…

xxe外部實體注入漏洞

https://owasp.org/www-project-top-ten XXE基礎 xxe外部實體注入 外部實體 xml(用于傳輸和存儲數據) html(用于顯示數據) 注入: SQL注入:用戶輸入數據被當做代碼執行 1輸入點 2.輸入數據可以結合到數據庫…

ros2獲取topic信息解析

ros2 ros_discovery_info topic 發布邏輯疑問: 在運行ros2 topic info -v /topic時,運行的是p3,如何與p1進程通訊的呢? 進程間理論上應該是IPC

FFmpeg合成mp4

本章主要介紹如何使用FFmpeg來將一個音頻文件和一個視頻文件合成一個MP4文件,以及在這個過程中我們如何對編碼過程進行封裝以及sample_rate 重采樣的過程(由于提供的音頻文件的編碼類型為S16,所以我們需要轉化為MP4支持的FLTP浮點類型&#x…

第十九章 使用LAMP架構部署動態網站環境

第十九章 使用LAMP架構部署動態網站環境 文章目錄第十九章 使用LAMP架構部署動態網站環境一、安裝Httpd服務1、安裝httpd服務2、啟動httpd服務3、設置允許通過防火墻4、驗證http服務是否成功二、安裝Mariadb服務1、安裝Mariadb服務2、啟動Mariadb服務三、安裝PHP服務1、列出可用…

Selenium應用中的核心JavaScript操作技巧

Selenium是一款強大的瀏覽器自動化測試工具,其操作瀏覽器的能力部分來自于其內嵌的JavaScript執行引擎。這使得Selenium不僅能夠模擬用戶在瀏覽器中的各種操作,還能執行復雜的JavaScript腳本,以實現更為精細的控制。本文將探討如何通過Seleni…

《Linux 基礎指令實戰:新手入門的命令行操作核心教程(第一篇)》

前引:當你第一次面對 Linux 系統中那片閃爍著光標、只有黑白字符的終端界面時,或許會和很多初學者一樣感到些許茫然:這些由字母和符號組成的 “指令” 究竟該如何輸入?它們又能完成哪些神奇的操作?其實,Lin…