Blender模擬結構光3D Scanner(一)外參數匹配

如何使用Blender模擬FPP(Fringe Projection Profilometry) 原理的結構光3D傳感器?

主要包含的工作有:

1)相機、投影儀定位與內外參數匹配;

2)投影儀投射指定Pattern圖像;

3)被測物體材質屬性配置等;

本篇主要關注外參數匹配。

外參數匹配的基本思路?是,添加Camera和SpotLight節點,并設置各自的變換(Transform)屬性,主要是位置X/Y/Z和旋轉X/Y/Z六個參數。


1 Blender中變換參數的含義

Blender中,變換參數的含義可理解為世界坐標系到當前Object坐標系的變換,用位置X/Y/Z和旋轉X/Y/Z可分別表示為\boldsymbol{T}_{3 \times 1}\boldsymbol{R}_{3 \times 3}

則Object坐標系下的點\boldsymbol{P}_\textnormal{obj}與該點在世界坐標系下的坐標\boldsymbol{P}_\textnormal{W}之間的變換關系為

\boldsymbol{P}_\textnormal{obj}=\boldsymbol{R}\boldsymbol{P}_\textnormal{W}-\boldsymbol{R}\boldsymbol{T}? (1-1)


2 左相機變換參數配置

在三維測量中慣用的相機坐標系定義為,

X?——? 相機畫幅平面內水平向右的方向為X正方向;

Y?—— 相機畫幅平面內豎直向下的方向為Y正方向;

Z?—— 相機觀測正前方(Front)方向為Z正方向;

????????但Blender中,相機坐標系的定義是不同的。具體表現為,在Blender中將相機變換參數的位置X/Y/Z和旋轉X/Y/Z都設置為0,如圖1所示。

圖1 相機位置和旋轉參數置0

圖2 相機視野和方向

????????此時相機的視野和方向如圖2,圖中和紅色/綠色/藍色線為世界坐標系XYZ三軸的軸線, 三個軸的正方向可參見右上角的坐標軸縮略圖(彩色實心圓指向軸的正方向);圖中橙色線段,端點標有XYZ的是相機坐標系;相機的視野前方為世界坐標系的Z負方向,相機視野的上方向為世界坐標系的Y正方向。

? ? ? ? 為了使相機的視野前方與上方向與三維測量中慣用的相機相匹配,需要設置Blender中相機旋轉變換參數,旋轉Y/Z軸均設置180°,如圖3所示。設置后,相機視野前方指向Z正方向,視野上方指向Y負方向。

? ? ? ? 但注意此時Blender中相機坐標系(橙色)的各軸方向為:????????

????????X?——? 與世界坐標系X正方向一致;

????????Y?—— 與世界坐標系Y正方向相反;

????????Z?—— 與世界坐標系Z正方向相反;

圖3 旋轉Y/Z軸均設置180°后的Blender相機坐標系

? ? ? ? 根據式(1-1),此時Blender相機坐標系下點的坐標\boldsymbol{P}_{\textnormal{C}}與該點在世界坐標系下的表示\boldsymbol{P}_{\textnormal{W}}的關系為

\boldsymbol{P}_{\textnormal{C}}=\boldsymbol{R}_{\textnormal{C}}\boldsymbol{P}_{\textnormal{W}}?(2-1)

式中,\boldsymbol{R}_{\textnormal{C}}對應旋轉變換參數Y/Z軸均設置180°。

? ? ? ? 但是,此時Blender相機坐標系和三維測量慣用的相機坐標系(本節開頭)定義仍是不同的,若在此時Blender相機節點的位置,建立三維測量慣用的相機坐標系,設該坐標系下點的坐標為\boldsymbol{P'}_\textnormal{C},則\boldsymbol{P'}_\textnormal{C}與該點在Blender相機坐標系下的坐標\boldsymbol{P}_{\textnormal{C}}之間的變換關系為

\boldsymbol{P'}_\textnormal{C}=\boldsymbol{R}_x\boldsymbol{P}_\textnormal{c}? (2-2)

????????式中,\boldsymbol{R}_x對應旋轉變換參數X軸旋轉180°,即Blender相機坐標系繞X軸旋轉180°可構造出三維測量慣用的相機坐標系。


3 投影儀變換參數配置

? ? ? ? 投影儀和雙目系統中右相機的地位是相同的。在Blender中可通過設置聚光燈(Spot Light)+圖像紋理的方式來模擬投影儀的效果。參考式(1-1),配置投影儀變換參數即確定\boldsymbol{R}_\textnormal{P}\boldsymbol{T}_\textnormal{P}

\boldsymbol{P}_\textnormal{P}=\boldsymbol{R}_\textnormal{P}\boldsymbol{P}_\textnormal{W}-\boldsymbol{R}_\textnormal{P}\boldsymbol{T}_\textnormal{P}? (3-1)

????????聚光燈的坐標系(即投影儀坐標系)與第2節中Blender相機坐標系的定義是類似的,也存在Blender投影儀坐標系與三維測量慣用的投影儀坐標系差距\boldsymbol{R}_x旋轉的問題,即

\boldsymbol{P'}_\textnormal{P}=\boldsymbol{R}_x\boldsymbol{P}_\textnormal{P}?(3-2)

? ? ? ? 若三維測量系統標定外參數已知,即三維測量慣用的投影儀坐標系與三維測量慣用的左相機坐標系的變換關系已知,則有

\boldsymbol{P'}_\textnormal{P}=\boldsymbol{R}\boldsymbol{P'}_\textnormal{C}+\boldsymbol{T}?(3-3)

? ? ? ? 聯立式(2-1)、(2-2)、(3-1)、(3-2)、(3-3)可求得投影儀變換旋轉參數\boldsymbol{R}_\textnormal{P}和平移參數\boldsymbol{T}_\textnormal{P},即可對應得到Blender聚光燈的變換參數。

\boldsymbol{R}_x\boldsymbol{P}_\textnormal{P}=\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{P}_\textnormal{c}+\boldsymbol{T}

\boldsymbol{R}_x(\boldsymbol{R}_\textnormal{P}\boldsymbol{P}_\textnormal{W}-\boldsymbol{R}_\textnormal{P}\boldsymbol{T}_\textnormal{P})=\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C}\boldsymbol{P}_\textnormal{W}+\boldsymbol{T}

\boldsymbol{R}_x\boldsymbol{R}_\textnormal{P}\boldsymbol{P}_\textnormal{W}=\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C}\boldsymbol{P}_\textnormal{W}

\boldsymbol{R}_\textnormal{P}=\boldsymbol{R}_x^{\top}\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C}??(3-4)

-\boldsymbol{R}_x\boldsymbol{R}_\textnormal{P}\boldsymbol{T}_\textnormal{P}=\boldsymbol{T}

-\boldsymbol{R}_x\boldsymbol{R}_x^{\top}\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C}\boldsymbol{T}_\textnormal{P}=\boldsymbol{T}

-\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C}\boldsymbol{T}_\textnormal{P}=\boldsymbol{T}

\boldsymbol{T}_\textnormal{P}=-(\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C})^{\top}\boldsymbol{T}??(3-5)

注意,式中\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C}可理解為分別繞XYZ三個軸各轉了180°,相當于沒有轉!

所以有

\boldsymbol{T}_\textnormal{P}=-\boldsymbol{R}^{\top}\boldsymbol{T}??(3-6)

最終實驗得到的一組投影儀變換參數和相機-投影儀位置關系如圖4所示

圖4?實驗得到的一組投影儀變換參數和相機-投影儀位置關系

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

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

相關文章

LangChain是如何實現RAG多輪問答的

目錄引言一、LangChain實現RAG多輪問答核心機制1. 對話歷史管理(Memory)2. 問題重寫(Query Rewriting)3. 檢索增強生成(RAG Core)4. 鏈式工作流(Chain)二、關鍵設計特點三、完整示例…

DAY 44 預訓練模型

知識點回顧: 預訓練的概念常見的分類預訓練模型圖像預訓練模型的發展史預訓練的策略預訓練代碼實戰:resnet18 一、預訓練的概念 我們之前在訓練中發現,準確率最開始隨著epoch的增加而增加。隨著循環的更新,參數在不斷發生更新。 所…

Java Stream API 中常用方法復習及項目實戰示例

在最近的練手項目中,對于stream流的操作愈加頻繁,我也越來越感覺stream流在處理數據是的干凈利落,因此寫博客用來記錄最近常用的方法以便于未來的復習。map() 方法map()是一個中間操作(intermediate operation)&#x…

從零開始手搓一個GPT大語言模型:從理論到實踐的完整指南(一)

現在人工智能飛速發展時代,LLM絕對可以算是人工智能領域得一顆明珠,也是現在許多AI項目落地得必不可少得一個模塊,可以說,不管你之前得研究領域是AI得哪個方向,現在都需要會一些LLM基礎,在這個系列&#xf…

Redis ubuntu下載Redis的C++客戶端

1. 安裝 redis-plus-plus C 操作 Redis 的庫有很多,這里選擇使用 redis-plus-plus,這個庫的功能強大,使用簡單。 Github 地址:GitHub - sewenew/redis-plus-plus: Redis client written in C 訪問不了Github 地址的可以使用Ste…

nm命令和nm -D命令參數

出現這種差異的原因在于:動態庫中的符號分為兩種類型: 常規符號表(regular symbol table):通常用于靜態鏈接和調試,默認不包含在動態庫中(除非顯式保留)。動態符號表(dyn…

Windows下cuda的安裝和配置

今天開始做一個cuda教程。由于本人主要在windows下使用visual studio進行開發,因此這里講一下windows下的cuda開發環境。 下載cuda_toolkit 從網站https://developer.nvidia.com/cuda-toolkit中下載,先選擇Download Now,然后跳轉到如下頁面&#xff1a…

【代碼隨想錄day 19】 力扣 450.刪除二叉搜索樹中的節點

視頻講解:https://www.bilibili.com/video/BV1tP41177us/?share_sourcecopy_web&vd_sourcea935eaede74a204ec74fd041b917810c 文檔講解:https://programmercarl.com/0450.%E5%88%A0%E9%99%A4%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%A…

智慧養老丨實用科普+避坑指南:科技如何讓晚年生活更安全舒適?

隨著老齡化社會的到來,智慧養老產品逐漸成為改善老年人生活質量的重要工具。從智能手表到便攜洗浴機,科技正為老年人的健康、安全與生活便利提供創新解決方案。我們這次主要介紹四類典型智慧養老產品,結合真實體驗給出選購建議,并…

系統垃圾清理批處理腳本 (BAT)

系統垃圾清理批處理腳本 (BAT) 以下是一個Windows系統垃圾清理的批處理腳本,它可以清理常見的系統臨時文件、緩存和日志等: echo off title 系統垃圾清理工具 color 0a echo. echo 正在清理系統垃圾文件,請稍候... echo.:: 清理臨時文件 echo…

Terraform的零基礎學習教程

一、Terraform 是什么? Terraform 是由 HashiCorp 開發的開源工具,用于自動化管理云基礎設施(如 AWS、Azure、GCP 等)。 核心特點: 基礎設施即代碼(IaC):用代碼定義和管理資源。跨…

429. N 叉樹的層序遍歷(中等)題解

題目描述給定一個 N 叉樹,返回其節點值的層序遍歷。(即從左到右,逐層遍歷)。樹的序列化輸入是用層序遍歷,每組子節點都由 null 值分隔(參見示例)。示例 1:輸入:root [1,…

Java 課程,每天解讀一個簡單Java之題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。

package ytr250813;import java.io.IOException;public class CharacterCounter {public static void main(String[] args) throws IOException {// 初始化計數器變量int letterCount 0; // 英文字母計數器int spaceCount 0; // 空格計數器int digitCount 0; // 數字計數器i…

GitLab CI + Docker 自動構建前端項目并部署 — 完整流程文檔

一、環境準備1. 服務器準備一臺Linux服務器(CentOS/Ubuntu皆可),推薦至少4核8GB內存已安裝 Docker(及 Docker 服務已啟動)已安裝 GitLab Runner2. 服務器上安裝 Docker (如果沒裝)# CentOS9以下…

LCP 17. 速算機器人

目錄 題目鏈接: 題目: 解題思路: 代碼: 總結: 題目鏈接: LCP 17. 速算機器人 - 力扣(LeetCode) 題目: # LCP 17. 速算機器人 小扣在秋日市集發現了一款速算機器人。…

Spring cloud集成ElastictJob分布式定時任務完整攻略(含snakeyaml報錯處理方法)

ElasticJob 是一款輕量級、可擴展的分布式定時任務解決方案,基于 Quartz 二次開發,支持任務分片、失效轉移、任務追蹤等功能,非常適合在 Spring Cloud 微服務場景中使用。我將帶你完成 Spring Cloud 集成 ElasticJob 的全過程,并分…

了解 Linux 中的 /usr 目錄以及 bin、sbin 和 lib 的演變

Linux 文件系統層次結構是一個復雜且引人入勝的體系,其根源深植于類 Unix 操作系統的歷史之中。在這一結構的核心,/usr 目錄是一個至關重要的組成部分,隨著時間的推移,它經歷了顯著的演變。與此同時,/bin、/sbin、/lib…

高級IO(五種IO模型介紹)

文章目錄一、IO為什么慢?一、阻塞IO二、非阻塞IO三、信號驅動IO四、IO多路復用五、異步IO一、IO為什么慢? IO操作往往都是和外設交互,比如鍵盤、鼠標、打印機、磁盤。而最常見的就是內存與磁盤的交互,要知道磁盤是機械設備&#…

第十二節:粒子系統:海量點渲染

第十二節:粒子系統:海量點渲染 引言 粒子系統是創造動態視覺效果的神器,從漫天繁星到熊熊火焰,從魔法特效到數據可視化,都離不開粒子技術。Three.js提供了強大的粒子渲染能力,可輕松處理百萬級粒子。本文將…

LeetCode Day5 -- 二叉樹

目錄 1. 啥時候用二叉樹? (1)典型問題 (2)核心思路 2. BFS、DFS、BST 2.1 廣度優先搜索BFS (1)適用任務 (2)解決思路??:使用隊列逐層遍歷 2.2 深度…