0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

3D相機(jī)點(diǎn)云數(shù)據(jù)“如何讀取”

新機(jī)器視覺(jué) ? 來(lái)源:新機(jī)器視覺(jué) ? 2023-07-12 10:28 ? 次閱讀

Halcon|讀取3D相機(jī)點(diǎn)云數(shù)據(jù)

最近發(fā)現(xiàn)很多小伙伴在使用Halcon處理3D工業(yè)相機(jī)掃描結(jié)果的時(shí)候遇到了“如何讀取”的問(wèn)題。一般的3D工業(yè)相機(jī)儲(chǔ)存數(shù)據(jù)的格式有txt格式、tif格式、csv格式、ply格式、ptx格式、bin格式、obj格式等。

txt格式

讀取txt文件生成3D模型一般需要分析txt文件的儲(chǔ)存格式,下圖是我使用的工業(yè)相機(jī)儲(chǔ)存的部分txt數(shù)據(jù):

60ebb6c0-2045-11ee-962d-dac502259ad0.png 經(jīng)過(guò)分析,前3列為X、Y、Z坐標(biāo),第4列到第6列為每一點(diǎn)的法線坐標(biāo)nX、nY、nZ,第7列到第9列為灰度值。因此我們采用以下代碼重構(gòu)3D模型:

open_file ('data.txt', 'input', XYZ) #打開文件
X :=[]
Y :=[]
Z :=[]
nX :=[]
nY :=[]
nZ :=[]
Gray :=[]
fread_line (XYZ, OutLine, IsEOF) #讀文件中一行的字符串
tuple_split (OutLine, ' ', Substrings) #根據(jù)空格分割一行的字符串
while (IsEOF==0) #將X Y Z nX nY nZ Gray分別存儲(chǔ)在不同的元組中
  X :=[X,Substrings[0]]
  Y :=[Y,Substrings[1]]
  Z :=[Z,Substrings[2]]
  nX :=[nX,Substrings[3]]
  nY :=[nY,Substrings[4]]
  nZ :=[nY,Substrings[5]]
  Gray :=[Gray,Substrings[6]]
  fread_line (XYZ, OutLine, IsEOF)
  tuple_split (OutLine, ' ', Substrings)
endwhile
close_file (XYZ) #關(guān)閉文件
tuple_number (X, NumberX) 
tuple_number (Y, NumberY) 
tuple_number (Z, NumberZ)  #將字符串轉(zhuǎn)化為數(shù)字
gen_object_model_3d_from_points (NumberX, NumberY, NumberZ, ObjectModel3D) #構(gòu)建3D模型
visualize_object_model_3d (3600, ObjectModel3D, [], [], [], [], [], [], [], PoseOut) #顯示3D模型

代碼中的IsEOF參數(shù)為循環(huán)的判斷變量,當(dāng)文件未到末尾時(shí),IsEOF為0;當(dāng)文件到達(dá)末尾時(shí),IsEOF為1。

3D模型顯示結(jié)果如下:
61053fc8-2045-11ee-962d-dac502259ad0.png
注意:1、通過(guò)元組生成3D模型時(shí),采用gen_object_model_3d_from_points算子;2、一些3D相機(jī)的txt文件的數(shù)據(jù)之間采用@相連,此時(shí)應(yīng)使用@對(duì)字符串進(jìn)行分割。

tif格式

tif圖片格式是工業(yè)相機(jī)損失較小的圖片格式。一般3D相機(jī)會(huì)將不同的數(shù)據(jù)保存在不同的tif圖片中。下圖是我使用的工業(yè)相機(jī)儲(chǔ)存的tif文件:
612e75e6-2045-11ee-962d-dac502259ad0.png
其中,PointCloud_X
PointCloud_Y PointCloud_Z為將點(diǎn)云的XYZ坐標(biāo)作為灰度值生成的圖片,NormalMap_X NormalMap_Y
NormalMap_Z為將點(diǎn)云的XYZ法線坐標(biāo)作為灰度值生成的圖片,Texture為一般的灰度圖片??墒褂靡韵麓a重構(gòu)3D模型:

61493e9e-2045-11ee-962d-dac502259ad0.png

615da82a-2045-11ee-962d-dac502259ad0.png
其中,讀取的PointcloudX PointcloudY PointcloudZ等圖片也可以先做Blob分析之后再合成3D模型。此時(shí),若PointcloudX PointcloudY PointcloudZ的大小不一致,代碼:

61750f1a-2045-11ee-962d-dac502259ad0.png

生成的3D模型將以PointcloudX為準(zhǔn)。

注意:與算子gen_object_model_3d_from_points作對(duì)比,當(dāng)通過(guò)圖片生成3D模型時(shí),采用xyz_to_object_model_3d算子。

Halcon直接讀取

我購(gòu)買的工業(yè)相機(jī)可以直接采用以下代碼實(shí)時(shí)抓取數(shù)據(jù),可以作為其他工業(yè)相機(jī)實(shí)施抓取數(shù)據(jù)的參考。

open_framegrabber ('PhoXi', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'default', '2018-08-034-LC3', -1, -1, AcqHandle) #打開相機(jī)
get_framegrabber_param (AcqHandle, 'revision', Revision) #得到相機(jī)參數(shù)
GrabDataItems:=['PointCloud', 'Texture', 'NormalMap', 'ConfidenceMap']
set_framegrabber_param (AcqHandle, 'grab_data_items', GrabDataItems) #設(shè)置相機(jī)參數(shù)
grab_data (ImageData, Region, Contours, AcqHandle, Data) #抓取數(shù)據(jù)
select_obj (ImageData, XYZ, 1) #選擇3維數(shù)據(jù)XYZ(點(diǎn)云坐標(biāo))
select_obj (ImageData, Texture, 2) #選擇1維度數(shù)據(jù)Texture
select_obj (ImageData, Normals, 3) #選擇3維數(shù)據(jù)Normals(法線)
select_obj (ImageData, Confidence, 4) #選擇1維數(shù)據(jù)Confidence
decompose3 (XYZ, XImage, YImage, ZImage) #將XYZ分解為X Y Z三通道
decompose3(Normals, nX, nY, nZ)  #將Normals分解為nX nY nZ三通道

同樣,可以對(duì)其中任意一張圖像做Blob分析等操作,也可采用:

618cee1e-2045-11ee-962d-dac502259ad0.png

生成3D模型并進(jìn)行顯示。

CSV格式

CSV格式(Comma-Separated Values)直譯為逗號(hào)分隔值(也稱字符分隔值,因?yàn)榉指糇址部梢圆皇嵌禾?hào)),是一種以逗號(hào)作為分隔符,對(duì)數(shù)據(jù)進(jìn)行直接記錄的文件。

讀取csv文件生成3D模型一般需要分析csv文件的儲(chǔ)存格式。我們先創(chuàng)建一個(gè)csv文件。如下圖所示,直接創(chuàng)建txt文件,每一行保存一個(gè)點(diǎn)云坐標(biāo),不同坐標(biāo)之間采用“,”作為分隔符,另存為csv文件即可。
61a99104-2045-11ee-962d-dac502259ad0.png

61c31f5c-2045-11ee-962d-dac502259ad0.png

結(jié)果如下:
62023d5e-2045-11ee-962d-dac502259ad0.png

ply格式

ply是Halcon可識(shí)別的3D模型儲(chǔ)存格式,可以直接打開。

622d84e6-2045-11ee-962d-dac502259ad0.png

結(jié)果如下:
62505430-2045-11ee-962d-dac502259ad0.png

責(zé)任編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6808

    瀏覽量

    88743
  • 儲(chǔ)存
    +關(guān)注

    關(guān)注

    3

    文章

    198

    瀏覽量

    22344
  • 3D相機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    103

    瀏覽量

    8027

原文標(biāo)題:Halcon|讀取3D相機(jī)點(diǎn)云數(shù)據(jù)

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于3D點(diǎn)的多任務(wù)模型在板端實(shí)現(xiàn)高效部署

    對(duì)于自動(dòng)駕駛應(yīng)用來(lái)說(shuō),3D 場(chǎng)景感知至關(guān)重要。3D點(diǎn)數(shù)據(jù)就是具有3D特征的
    的頭像 發(fā)表于 12-28 16:35 ?1337次閱讀
    基于<b class='flag-5'>3D</b><b class='flag-5'>點(diǎn)</b><b class='flag-5'>云</b>的多任務(wù)模型在板端實(shí)現(xiàn)高效部署

    基于深度學(xué)習(xí)的方法在處理3D點(diǎn)進(jìn)行缺陷分類應(yīng)用

    背景部分介紹了3D點(diǎn)應(yīng)用領(lǐng)域中公開可訪問(wèn)的數(shù)據(jù)集的重要性,這些數(shù)據(jù)集對(duì)于分析和比較各種模型至關(guān)重要。研究人員專門設(shè)計(jì)了各種
    的頭像 發(fā)表于 02-22 16:16 ?956次閱讀
    基于深度學(xué)習(xí)的方法在處理<b class='flag-5'>3D</b><b class='flag-5'>點(diǎn)</b><b class='flag-5'>云</b>進(jìn)行缺陷分類應(yīng)用

    友思特C系列3D相機(jī):實(shí)時(shí)3D點(diǎn)云圖像

    3D相機(jī)
    虹科光電
    發(fā)布于 :2024年01月10日 17:39:25

    如何同時(shí)獲取2d圖像序列和相應(yīng)的3d點(diǎn)?

    如何同時(shí)獲取2d圖像序列和相應(yīng)的3d點(diǎn)?以上來(lái)自于谷歌翻譯以下為原文How to obtain the sequence of 2d im
    發(fā)表于 11-13 11:25

    3D點(diǎn)技術(shù)介紹及其與VR體驗(yàn)的關(guān)系

    ;x>nkedIn上發(fā)表了一篇跟澳大利亞科技公司優(yōu)立(Euclideon)所使用的點(diǎn)數(shù)據(jù)有關(guān)的文章,并在業(yè)內(nèi)引起了一番討論。 1. 點(diǎn)
    發(fā)表于 09-15 09:28 ?20次下載

    點(diǎn)問(wèn)題的介紹及3D點(diǎn)技術(shù)在VR中的應(yīng)用

    1. 點(diǎn)的問(wèn)題 點(diǎn)是由3D掃描硬件收集的數(shù)據(jù),如FARO的Focus
    發(fā)表于 09-27 15:27 ?17次下載

    3D相機(jī)的類別及工作原理

    3D相機(jī)的不同之處在于,它可以測(cè)量普通數(shù)碼相機(jī)無(wú)法測(cè)量的深度數(shù)據(jù)。所謂深度數(shù)據(jù),就是像素到相機(jī)
    的頭像 發(fā)表于 09-24 12:40 ?1.8w次閱讀

    谷歌AI發(fā)布3D物體數(shù)據(jù)集,附帶標(biāo)記邊界框、相機(jī)位姿、稀疏點(diǎn)

    見過(guò)3D物體數(shù)據(jù)集,見過(guò)會(huì)動(dòng)的3D物體數(shù)據(jù)集嗎? 每段動(dòng)態(tài)視頻都 以目標(biāo)為中心拍攝,不僅自帶標(biāo)注整體的邊界框,每個(gè)視頻還附帶相機(jī)位姿和稀疏
    的頭像 發(fā)表于 11-13 14:28 ?2201次閱讀

    3D結(jié)構(gòu)光相機(jī)的工作原理及優(yōu)點(diǎn)

    結(jié)構(gòu)光3D相機(jī),一般指采用多幅條紋光柵,即先通過(guò)光柵投射模組按照時(shí)間序列依次投射在被測(cè)物體表面,再通過(guò)雙目對(duì)物體表面的光柵進(jìn)行拍照,基于事先編碼規(guī)則進(jìn)行解碼和雙目視差匹配,從而獲得高精度的3D
    發(fā)表于 04-22 10:10 ?6217次閱讀

    何為3D點(diǎn)語(yǔ)義分割

    融合標(biāo)注使用的3D標(biāo)注工具仍以3D立體框?yàn)橹?,但?b class='flag-5'>3D點(diǎn)數(shù)據(jù)以外,還需要使用2
    的頭像 發(fā)表于 07-21 15:52 ?8497次閱讀

    如何試用MediaPipe實(shí)現(xiàn)人臉3D點(diǎn)數(shù)據(jù)提取

    本文介紹如何試用MediaPipe實(shí)現(xiàn)人臉3D點(diǎn)數(shù)據(jù)提取,提取的數(shù)據(jù)為人臉468點(diǎn)位。
    發(fā)表于 02-23 17:47 ?1238次閱讀

    3D點(diǎn)數(shù)據(jù)集在3D數(shù)字化技術(shù)中的應(yīng)用

    隨著計(jì)算機(jī)視覺(jué)技術(shù)的不斷發(fā)展,3D 數(shù)字化技術(shù)已經(jīng)成為了當(dāng)今工業(yè)制造領(lǐng)域和三維醫(yī)學(xué)影像領(lǐng)域的關(guān)鍵技術(shù)。然而,構(gòu)建高精度、高分辨率的 3D 點(diǎn)數(shù)據(jù)
    的頭像 發(fā)表于 05-06 16:46 ?1339次閱讀

    自動(dòng)駕駛3D點(diǎn)語(yǔ)義分割數(shù)據(jù)標(biāo)注

    在自動(dòng)駕駛環(huán)境感知系統(tǒng)中,如何獲取高精度實(shí)時(shí)路況數(shù)據(jù),是決定自動(dòng)駕駛系統(tǒng)行車安全的關(guān)鍵。 目前主流的兩種感知技術(shù)路徑“純視覺(jué)”與“高精地圖+激光雷達(dá)”中,由于激光雷達(dá)采集的3D點(diǎn)
    發(fā)表于 06-06 09:48 ?3次下載
    自動(dòng)駕駛<b class='flag-5'>3D</b><b class='flag-5'>點(diǎn)</b><b class='flag-5'>云</b>語(yǔ)義分割<b class='flag-5'>數(shù)據(jù)</b>標(biāo)注

    基于點(diǎn)3D障礙物檢測(cè)介紹

    基于點(diǎn)3D障礙物檢測(cè) 主要有以下步驟: 點(diǎn)數(shù)據(jù)的處理 基于
    的頭像 發(fā)表于 06-26 10:22 ?905次閱讀
    基于<b class='flag-5'>點(diǎn)</b><b class='flag-5'>云</b>的<b class='flag-5'>3D</b>障礙物檢測(cè)介紹

    基于深度學(xué)習(xí)的3D點(diǎn)實(shí)例分割方法

    3D實(shí)例分割(3DIS)是3D領(lǐng)域深度學(xué)習(xí)的核心問(wèn)題。給定由點(diǎn)云表示的 3D 場(chǎng)景,我們尋求為每個(gè)點(diǎn)
    發(fā)表于 11-13 10:34 ?2106次閱讀
    基于深度學(xué)習(xí)的<b class='flag-5'>3D</b><b class='flag-5'>點(diǎn)</b><b class='flag-5'>云</b>實(shí)例分割方法