Halcon例程詳解 (深度圖轉換為3D圖像)—— xyz_attrib_to_object_model_3d

一、前言

深度圖向點云圖進行轉換是進行3D檢測項目時會遇到的問題,halcon里也有針對此問題的相關例程,下面對此例程進行分析。通過學習此例程,我們可以掌握如何將一張深度圖像和一張正常二維圖像轉換為3D點云。

二、分析

* 初始化界面
dev_update_off ()
dev_close_window ()
* 
* 讀取Z圖,即為深度圖
read_image (Z, 'mreut_dgm_2.0.tif')
get_image_size (Z, Width, Height)
* 
* 讀取灰度圖,將其灰度值作為屬性添加到3D模型中。
read_image (AerialImage, 'mreut4_3.png')
* 
* 用灰度圖生成標簽圖像,采用的方法很簡單,只做展示用。
* 自適應的閾值處理方法,將圖像分為3個對象,用紅藍綠三種顏色表示。參數4表示高斯平滑的核的大小。如下圖所示。
auto_threshold (AerialImage, Regions, 4)
*將分割后的區域生成標簽圖像。
* region_to_label根據分割區域的索引(1…n)將輸入區域轉換成標簽圖像,即,第一區域被繪成灰度值1,第二區域被繪成灰度值2。
region_to_label (Regions, LabelImage, 'byte', Width, Height)
* 
* 將灰度圖和標簽圖像合并為1個2通道復合圖像。
compose2 (AerialImage, LabelImage, MultiChannelAttribImage)
* 
* 在常規網格中創建包含X和Y坐標的灰度漸變圖像。
GroundResolution := 2.0
* 用一階方程來生成平面(輸出圖像,類型,垂直方向的參數,水平方向的參數,0階參數,參考點的行坐標,列坐標,圖像的寬高)。
* ImageSurface(r,c) = Alpha(r - Row) +Beta(c - Column) +Gamma
gen_image_surface_first_order (X, 'real', 0, GroundResolution, 0, 0, 0, Width, Height)
gen_image_surface_first_order (Y, 'real', -GroundResolution, 0, 0, 0, 0, Width, Height)

在這里插入圖片描述
在這里插入圖片描述

* 
* 創建3D模型
* 屬性名
AttribName := ['&gray','&terrain']
* 該算子將包含3D點的X、Y和Z坐標的圖像三元組轉換為3D對象模型。
* 從上面的程序可以看出,XY圖像為與Z圖同樣大小的灰度漸變圖像,MultiChannelAttribImage為兩通道的屬性圖像,包含灰度圖像和分割后的標簽圖像。
* 其中MultiChannelAttribImage的圖像通道必須和AttribName的維度大小相同。
* 此時生成的為點云,下面用三角法生成三維圖像。
xyz_attrib_to_object_model_3d (X, Y, Z, MultiChannelAttribImage, AttribName, ObjectModel3D)
* 
* Display results
* 設置窗口1的屬性,顯示“地形類型”
dev_open_window (Height / 2, 0, Width / 2, Height / 2, 'black', WindowHandle1)
dev_set_part (0, 0, Height - 1, Width - 1)
set_display_font (WindowHandle1, 16, 'mono', 'true', 'false')
dev_set_color (['red','green','blue'])
dev_set_draw ('fill')
dev_display (Regions)
disp_message (WindowHandle1, 'Terrain types', 'window', 12, 12, 'black', 'true')
* 設置窗口2的屬性,顯示“鳥瞰圖”
dev_open_window (0, 0, Width / 2, Height / 2, 'black', WindowHandle2)
set_display_font (WindowHandle2, 16, 'mono', 'true', 'false')
dev_display (AerialImage)
disp_message (WindowHandle2, 'Aerial image', 'window', 12, 12, 'black', 'true')
* 設置窗口3的屬性,顯示“Z圖”
dev_open_window (0, Width / 2 + 8, Width, Height, 'gray', WindowHandle3)
set_display_font (WindowHandle3, 16, 'mono', 'true', 'false')
dev_display (Z)
disp_message (WindowHandle3, 'Digital surface model', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle3, 'black', 'true')
stop ()
* 
* 對對象模型進行快速的三角測量,以便更好地進行可視化。
* 該算子通過三角法將點云重建為三維模型。
prepare_object_model_3d (ObjectModel3D, 'segmentation', 'true', [], [])
* 交互式地可視化3d對象模型
* 創建3D模型的位姿(平移量,旋轉量,平移旋轉的順序,旋轉值的意義,視圖轉換,位姿)
create_pose (-620, -85, 17000, 135, 2, 10, 'Rp+T', 'gba', 'point', Pose)
Instructions := 'Rotate: Left button'
Instructions[1] := 'Zoom: Shift + left button'
Instructions[2] := 'Move: Ctrl + left button'
*顯示3D模型
visualize_object_model_3d (WindowHandle3, ObjectModel3D, [], Pose, ['color_attrib','color_attrib_start','color_attrib_end'], ['&gray',0,255], ['Created 3D model','Attribute used for visualization: \'&gray\''], [], Instructions, PoseOut)
visualize_object_model_3d (WindowHandle3, ObjectModel3D, [], PoseOut, ['color_attrib','lut'], ['&terrain','color1'], ['Created 3D model','Attribute used for visualization: \'&terrain\''], [], Instructions, PoseOut)
disp_end_of_program_message (WindowHandle3, 'black', 'true')

在這里插入圖片描述
在這里插入圖片描述

總結

通過此例程,可以初步了解3D轉換的具體步驟。

  1. 根據灰度圖,創建多通道的復合圖像。
  2. 創建灰度漸變圖像,X和Y
  3. 使用算子xyz_attrib_to_object_model_3d生成點云圖。
  4. 三角化網格 prepare_object_model_3d (ObjectModel3D, ‘segmentation’, ‘true’, [], [])。
  5. 顯示3D模型visualize_object_model_3d。
    總結下,雖然讀完了整個例程,但還是有幾個疑問。
  6. 為什么一定要要創建灰度漸變圖像,灰度值的朝向有什么意義。
  7. 三角化方法的原理還不太清楚

再更:1,問題一搞清楚了,灰度漸變圖像代表圖像在X,Y平面的尺度。
2,三角化是三維重建的經典算法,根據平面內三位點的拓撲連接關系獲得一個三角網格曲面模型。

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

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

相關文章

動態代理之Cglib淺析

什么是Cglib Cglib是一個強大的,高性能,高質量的代碼生成類庫。它可以在運行期擴展JAVA類與實現JAVA接口。其底層實現是通過ASM字節碼處理框架來轉換字節碼并生成新的類。大部分功能實際上是ASM所提供的,Cglib只是封裝了ASM,簡化了…

機器學習——深度學習之卷積神經網絡(CNN)——AlexNet卷積神經網絡結構

目錄 一、AlexNet卷積神經網絡結構模型 1、數據庫ImageNet 2、AlexNet第一層卷積層 二、AlexNet卷積神經網絡的改進 1、非線性變化函數的改變——ReLU 2、最大池化(Max Pooling)概念的提出——卷積神經網絡通用 1)池化層 2&#xff0…

POJ - 3470 Walls

小鳥往四個方向飛都枚舉一下,數據范圍沒給,離散以后按在其中一個軸線排序,在線段樹上更新墻的id,然后就是點查詢在在哪個墻上了。 這題有個trick,因為數據范圍沒給我老以為是inf設置小了,WA了很多發。&…

C# —— 深入理解委托類型

一. 委托定義 1. 委托與多播委托 委托類型表示對具有特定參數列表和返回類型的方法的引用,定義了委托實例可以調用的某類方法。 通過委托,我們可以動態的通過委托變量來調用委托方法。一般用delegate來命名委托類型,但Action和Func也可以達到同樣的效果…

【VS開發】【C++語言】reshuffle的容器實現算法random_shuffle()的使用

假設你需要指定范圍內的隨機數,傳統的方法是使用ANSI C的函數random(),然后格式化結果以便結果是落在指定的范圍內。但是,使用這個方法至少有兩個缺點。首先,做格式化時,結果常常是扭曲的,所以得不到正確的隨機數&…

C#委托——基礎2

在上一篇隨筆中,簡要說明了怎樣定義委托,定義事件,訂閱事件,最后也實現了效果,就是當員工類的某個對象,執行某個事件時,委托事件被觸發,后面也得到了結果,但是想象一下實…

機器學習——深度學習之編程工具、流行網絡結構、卷積神經網絡結構的應用

目錄 一、編程工具 caffe實現LENET-5 二、流行的網絡結構 1、VGGNET 2、Googlenet ? 3、ResNet? ? 三、卷積神經網絡的應用 1、人臉識別 ? 2、人臉驗證 3、人臉特征點檢測 4、卷積神經網絡壓縮 一、編程工具 caffe的優點:模型標準化,源代碼…

Halcon例程詳解(激光三角系統標定)—— calibrate_sheet_of_light_calplate.hdev

前言 1 激光三角測距 激光三角測距法原理很簡單,是通過一束激光以一定的入射角度照射被測目標,激光在目標表面會產生漫反射,在另一角度利用透鏡對反射激光匯聚成像,光斑成像在CCD(Charge-coupled Device,感光耦合組件)位置傳感器上。當被測物體沿激光方向發生移動時,…

【轉】如何實現一個文件系統

如何實現一個文件系統 摘要 本章目的是分析在Linux系統中如何實現新的文件系統。在介紹文件系統具體實現前先介紹文件系統的概念和作用,抽象出文件系統概念模型。熟悉文件系統的內涵后,我們再進一步討論Linux系統中文件系統的特殊風格和具體文件系統在Li…

【tenserflow】——數據類型以及常用屬性

目錄 一、什么是Tensor? 二、Tensorflow常見數據類型 三、Tensorflow常見屬性device\cpu\gpu\ndim\shape\rank等 1、創建一個tensor 1)tf.constant() 2)tf.Variable() 2、判斷一個變量是否為tensor張量 3、生成不同設備(cpu,gpu&#x…

C# 事件詳解附實例分析

一、定義 事件是兩個對象間發布消息和響應后處理消息的過程,通過委托類型來實現的。 事件的機制被稱為發布-訂閱機制,其算法過程為:首先定義一個委托類型,然后在發布者類中聲明一個event事件,同時此類中還有一個用來觸…

網頁開發瀏覽器兼容性問題

1、在ie6下的雙margin問題 在ie6下,設置了float的元素,以float:left為例,如圖所示。會出現第一個浮動元素,即相對于父級元素浮動的,會出現雙倍margin的問題。 注意僅僅是相對于父級元素浮動的,即第一個會出…

【tensorflow】——創建tensor的方法

目錄 1、tf.constant() 2、tf.Variable() 3、tf.zeros():用0去填充指定形狀的數組 4、tf.convert_to_tensor(a,dtypetf.int32) 5、tf.ones():用1去填充指定形狀的數組 6、tf.fill():用指定的元素去填充指定形狀的數組 7、隨機化初始化進行創建 1)normal正態分…

Halcon —— 圖像像素類型與轉換

圖像類型 就目前工業領域主流的圖像處理工具halcon來講,有以下幾種圖像類型:‘byte’, ‘complex’, ‘cyclic’, ‘direction’, ‘int1’, ‘int2’, ‘int4’, ‘int8’, ‘real’, ‘uint2’,具體含義如下圖所示。 ‘byte’ 每像素1字節…

軟件方法

核心工作流業務建模(組織建模):描述組織內部各個系統如何協作,使得組織可以為其他的組織提供有價值的服務,新系統只不過是組織為了對外提供更好的服務,對自己的內部重新設計而購買的一個零件。需求&#xf…

修改vim中的tab為4個空格

記錄一下,避免用時還得搜........ 1、臨時修改 在vi中,set tabstop4 或 set ts4  2、永久修改 vi --version 查看要修改的文件如果是vim的話,修改~/.vimrc如果是vi,修改~/.exrc加上:set tabstop4set nu //顯示行號set…

Halcon例程詳解(基于卡尺工具的匹配測量方法) —— measure_stamping_part.hdev

前言 1卡尺工具介紹 Halcon中的Metrology方法即為卡尺工具,可用來擬合線,圓,這種方法對于目標比背景很明顯的圖像尺寸測量是很方便的,不需要用blob進行邊緣提取等,但缺點也很明顯,需要目標的相對位置基本…

【TensorFlow】——不同shape的tensor在神經網絡中的應用(scalar,vector,matrix)

目錄 ? 1、scalar——標量 1)在神經網絡中存在的場景 2)one_hot編碼 3)舉例應用 2、vector——向量 ? 3、matrixs——矩陣 4、dim3的tensor 5、dim4的tensor 6、dim5的tensor 本文主要的目的是讓初學者對tensor的各種形式的使用場…

404頁面 3秒后跳到首頁 實現

---恢復內容開始--- 當我們訪問一個頁面不存在的時候&#xff0c;就會跳到404頁面 一般網站都在在404頁面中做一個處理&#xff0c; 就是當用戶3秒種內還沒有任何操作的話&#xff0c;就會自動跳轉到其它頁面 技術實現有兩種方法 1. 在404頁面中的header間加上 <meta http-e…

Java - I/O

File類 java.io操作文件和目錄&#xff0c;與平臺無關。具體的常用實例方法&#xff1a; File file new File("."); // 以當前路徑創建名為 "." 的 File 對象 ? 文件目錄信息函數 ? ? - ? String getName/Path/Parent()&#xff1a; 文件名/路徑…