首先給出一個問題:如下邊一個圖片中,如何獲取矩形的測量,也就是說,需要更準確的矩形位置參數?halcon提供的一般方法是,首先基本將矩形框住,然后用測量對象進行精確測量。因此,該矩形大致的中心點,長度、寬度、方向角要基本給出,見
首先給出代碼,然后一條一條解釋代碼的意義:
read_image (Image, 'rect2')
rgb1_to_gray(Image,Image)
create_metrology_model (MetrologyHandle)
get_image_size (Image, Width, Height)
set_metrology_model_image_size (MetrologyHandle, Width, Height)
add_metrology_object_rectangle2_measure (MetrologyHandle, 172.3, 239.2, rad(11.609), 146.7, 50.9, 30, 12, 1, 30, [], [], Index)
apply_metrology_model (Image, MetrologyHandle)
get_metrology_object_result (MetrologyHandle, Index, 'all', 'result_type', 'all_param', Rectangle)
get_metrology_object_result_contour (Contour, MetrologyHandle, Index, 'all', 1.5)
clear_metrology_model (MetrologyHandle)
1) create_metrology_model (MetrologyHandle)
該語句定義一個測量容器,該容器可以盛放許多不同的測量對象,本例中測量對象只有一個。
2) set_metrology_model_image_size (MetrologyHandle, Width, Height)
定義測量容器針對的測量范圍,本例是全圖。
3) add_metrology_object_rectangle2_measure( : : MetrologyHandle, Row, Column, Phi, Length1, Length2, *定義外側包含矩形框 MeasureLength1,MeasureLength2, *定義測量對象
MeasureSigma, MeasureThreshold, GenParamName, GenParamValue : Index) *定義被檢圖像灰度
理解該語句,首先要理解【被檢物體、矩形范圍框、和檢測對象】三者的關系。如下圖:
【被檢物體、矩形范圍框、和檢測對象】三者的對應參數定義如下圖:
* 矩形類計量對象的幾何形狀由其中心(Row, Column)、主軸φ的方向以及半邊長度Length1和Length2指定。
* Phi的輸入值自動映射到間隔。
* 矩形測量區域垂直于區域矩形的邊界。與矩形邊界垂直和相切的測量區域的半邊長度在“ Length1”和“ Length2”中設置。
* 測量區域的中心位于矩形的邊界上。參數MeasureSigma指定了一個標準偏差,算子使用該標準偏差應用計量學模型來平滑圖像的灰度值。
* 可以使用參數MeasureThreshold來選擇突出邊緣,該參數構成了一個振幅閾值,即邊緣一階導數的絕對值。
此外,還可以在GenParamName和GenParamValue中調整一些通用參數。特別是,可以設置運算 set_metrology_object_param 中可用的所有通用參數。但請注意,對于許多應用程序,默認值已足夠,無需進行調整。
運算符 add_metrology_object_rectangle2_measure返回參數索引中計量模型內添加的計量對象的Index索引。
4)get_metrology_object_result( : : MetrologyHandle, Index, Instance, GenParamName, GenParamValue : Parameter)
獲取測量結果。
get_metrology_object_result 允許訪問通過apply_metrology_model 獲得的測量測量對象MetrologyHandle的測量結果。參數 Index指定查詢結果的計量對象(MetrologyHandle中有多個計量對象)。
對于設置為“all”的 Index,將返回所有計量對象的結果。通過參數 Instance,可以指定,在參數中返回結果是哪個測量實例的結果。
將實例 Instance 設置為“all”將返回所有實例的結果。可以使用不同的泛型參數來控制參數中的返回值Parameter。泛型參數名稱以 GenParamName傳遞。相應的值以GenParamValue傳遞。以下參數和值是可能的:
5)get_metrology_object_result_contour( : Contour : MetrologyHandle, Index, Instance, Resolution : )
獲取測量結果。即以上測量的輪廓線。
最后輪廓結果如圖:
如果原理上還不明白,參考下文,文中繼續探討本問題。也可參考網文:測量函數
測量問題
以上得到輪廓線并非測量結果。如何進一步解決測量問題,因為針對的情況很多,無法一一列舉,這里僅對案例中提出的矩形進行矩形測量。
法1:用 fit_rectangle2_contour_xld可以從輪廓線提取矩形,根據長寬邊滿足測量。
法2:用gen_parallel_contour_xld(contour, parallelcontour, ‘regression_normal’, -Distance)直接得到平行線的距離,(長、寬各一個)
審核編輯:劉清
-
HALCON
+關注
關注
16文章
64瀏覽量
27184 -
Arrow
+關注
關注
7文章
15266瀏覽量
78912
原文標題:Halcon知識: 矩形測量
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論