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ù):
經(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) #打開(kāi)文件
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é)果如下:
注意: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文件:
其中,PointCloud_X
PointCloud_Y PointCloud_Z為將點(diǎn)云的XYZ坐標(biāo)作為灰度值生成的圖片,NormalMap_X NormalMap_Y
NormalMap_Z為將點(diǎn)云的XYZ法線坐標(biāo)作為灰度值生成的圖片,Texture為一般的灰度圖片。可使用以下代碼重構(gòu)3D模型:


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

生成的3D模型將以PointcloudX為準(zhǔn)。
注意:與算子gen_object_model_3d_from_points作對(duì)比,當(dāng)通過(guò)圖片生成3D模型時(shí),采用xyz_to_object_model_3d算子。
Halcon直接讀取
我購(gòu)買(mǎi)的工業(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) #打開(kāi)相機(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分析等操作,也可采用:

生成3D模型并進(jìn)行顯示。
CSV格式
CSV格式(Comma-Separated Values)直譯為逗號(hào)分隔值(也稱(chēng)字符分隔值,因?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文件即可。

結(jié)果如下:
ply格式
ply是Halcon可識(shí)別的3D模型儲(chǔ)存格式,可以直接打開(kāi)。

結(jié)果如下:
責(zé)任編輯:彭菁
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7335瀏覽量
94754 -
儲(chǔ)存
+關(guān)注
關(guān)注
3文章
203瀏覽量
23090 -
3D相機(jī)
+關(guān)注
關(guān)注
0文章
143瀏覽量
8992
原文標(biāo)題:Halcon|讀取3D相機(jī)點(diǎn)云數(shù)據(jù)
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于3D點(diǎn)云的多任務(wù)模型在板端實(shí)現(xiàn)高效部署
基于深度學(xué)習(xí)的方法在處理3D點(diǎn)云進(jìn)行缺陷分類(lèi)應(yīng)用
如何同時(shí)獲取2d圖像序列和相應(yīng)的3d點(diǎn)云?
3D點(diǎn)云技術(shù)介紹及其與VR體驗(yàn)的關(guān)系
點(diǎn)云問(wèn)題的介紹及3D點(diǎn)云技術(shù)在VR中的應(yīng)用
3D相機(jī)的類(lèi)別及工作原理
谷歌AI發(fā)布3D物體數(shù)據(jù)集,附帶標(biāo)記邊界框、相機(jī)位姿、稀疏點(diǎn)云
何為3D點(diǎn)云語(yǔ)義分割
影響結(jié)構(gòu)光3D相機(jī)點(diǎn)云成像質(zhì)量的DLP微投光機(jī)核心技術(shù)
如何試用MediaPipe實(shí)現(xiàn)人臉3D點(diǎn)云數(shù)據(jù)提取
3D點(diǎn)云數(shù)據(jù)集在3D數(shù)字化技術(shù)中的應(yīng)用
自動(dòng)駕駛3D點(diǎn)云語(yǔ)義分割數(shù)據(jù)標(biāo)注
基于深度學(xué)習(xí)的3D點(diǎn)云實(shí)例分割方法
3D相機(jī)點(diǎn)云數(shù)據(jù)“如何讀取”
評(píng)論