Halcon|讀取3D相機點云數據
最近發現很多小伙伴在使用Halcon處理3D工業相機掃描結果的時候遇到了“如何讀取”的問題。一般的3D工業相機儲存數據的格式有txt格式、tif格式、csv格式、ply格式、ptx格式、bin格式、obj格式等。
txt格式
讀取txt文件生成3D模型一般需要分析txt文件的儲存格式,下圖是我使用的工業相機儲存的部分txt數據:
經過分析,前3列為X、Y、Z坐標,第4列到第6列為每一點的法線坐標nX、nY、nZ,第7列到第9列為灰度值。因此我們采用以下代碼重構3D模型:
open_file ('data.txt', 'input', XYZ) #打開文件 X :=[] Y :=[] Z :=[] nX :=[] nY :=[] nZ :=[] Gray :=[] fread_line (XYZ, OutLine, IsEOF) #讀文件中一行的字符串 tuple_split (OutLine, ' ', Substrings) #根據空格分割一行的字符串 while (IsEOF==0) #將X Y Z nX nY nZ Gray分別存儲在不同的元組中 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) #關閉文件 tuple_number (X, NumberX) tuple_number (Y, NumberY) tuple_number (Z, NumberZ) #將字符串轉化為數字 gen_object_model_3d_from_points (NumberX, NumberY, NumberZ, ObjectModel3D) #構建3D模型 visualize_object_model_3d (3600, ObjectModel3D, [], [], [], [], [], [], [], PoseOut) #顯示3D模型
代碼中的IsEOF參數為循環的判斷變量,當文件未到末尾時,IsEOF為0;當文件到達末尾時,IsEOF為1。
3D模型顯示結果如下:
注意:1、通過元組生成3D模型時,采用gen_object_model_3d_from_points算子;2、一些3D相機的txt文件的數據之間采用@相連,此時應使用@對字符串進行分割。
tif格式
tif圖片格式是工業相機損失較小的圖片格式。一般3D相機會將不同的數據保存在不同的tif圖片中。下圖是我使用的工業相機儲存的tif文件:
其中,PointCloud_X
PointCloud_Y PointCloud_Z為將點云的XYZ坐標作為灰度值生成的圖片,NormalMap_X NormalMap_Y
NormalMap_Z為將點云的XYZ法線坐標作為灰度值生成的圖片,Texture為一般的灰度圖片。可使用以下代碼重構3D模型:
其中,讀取的PointcloudX PointcloudY PointcloudZ等圖片也可以先做Blob分析之后再合成3D模型。此時,若PointcloudX PointcloudY PointcloudZ的大小不一致,代碼:
生成的3D模型將以PointcloudX為準。
注意:與算子gen_object_model_3d_from_points作對比,當通過圖片生成3D模型時,采用xyz_to_object_model_3d算子。
Halcon直接讀取
我購買的工業相機可以直接采用以下代碼實時抓取數據,可以作為其他工業相機實施抓取數據的參考。
open_framegrabber ('PhoXi', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'default', '2018-08-034-LC3', -1, -1, AcqHandle) #打開相機 get_framegrabber_param (AcqHandle, 'revision', Revision) #得到相機參數 GrabDataItems:=['PointCloud', 'Texture', 'NormalMap', 'ConfidenceMap'] set_framegrabber_param (AcqHandle, 'grab_data_items', GrabDataItems) #設置相機參數 grab_data (ImageData, Region, Contours, AcqHandle, Data) #抓取數據 select_obj (ImageData, XYZ, 1) #選擇3維數據XYZ(點云坐標) select_obj (ImageData, Texture, 2) #選擇1維度數據Texture select_obj (ImageData, Normals, 3) #選擇3維數據Normals(法線) select_obj (ImageData, Confidence, 4) #選擇1維數據Confidence decompose3 (XYZ, XImage, YImage, ZImage) #將XYZ分解為X Y Z三通道 decompose3(Normals, nX, nY, nZ) #將Normals分解為nX nY nZ三通道
同樣,可以對其中任意一張圖像做Blob分析等操作,也可采用:
生成3D模型并進行顯示。
CSV格式
CSV格式(Comma-Separated Values)直譯為逗號分隔值(也稱字符分隔值,因為分隔字符也可以不是逗號),是一種以逗號作為分隔符,對數據進行直接記錄的文件。
讀取csv文件生成3D模型一般需要分析csv文件的儲存格式。我們先創建一個csv文件。如下圖所示,直接創建txt文件,每一行保存一個點云坐標,不同坐標之間采用“,”作為分隔符,另存為csv文件即可。
結果如下:
ply格式
ply是Halcon可識別的3D模型儲存格式,可以直接打開。
結果如下:
責任編輯:彭菁
-
數據
+關注
關注
8文章
7241瀏覽量
91007 -
儲存
+關注
關注
3文章
202瀏覽量
22640 -
3D相機
+關注
關注
0文章
119瀏覽量
8395
原文標題:Halcon|讀取3D相機點云數據
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄

如何同時獲取2d圖像序列和相應的3d點云?
3D點云技術介紹及其與VR體驗的關系
谷歌AI發布3D物體數據集,附帶標記邊界框、相機位姿、稀疏點云
3D結構光相機的工作原理及優點
3D點云數據集在3D數字化技術中的應用
自動駕駛3D點云語義分割數據標注

評論