首先給出一個(gè)問題:如下邊一個(gè)圖片中,如何獲取矩形的測量,也就是說,需要更準(zhǔn)確的矩形位置參數(shù)?halcon提供的一般方法是,首先基本將矩形框住,然后用測量對象進(jìn)行精確測量。因此,該矩形大致的中心點(diǎn),長度、寬度、方向角要基本給出,見
首先給出代碼,然后一條一條解釋代碼的意義:
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)
該語句定義一個(gè)測量容器,該容器可以盛放許多不同的測量對象,本例中測量對象只有一個(gè)。
2) set_metrology_model_image_size (MetrologyHandle, Width, Height)
定義測量容器針對的測量范圍,本例是全圖。
3) add_metrology_object_rectangle2_measure( : : MetrologyHandle, Row, Column, Phi, Length1, Length2, *定義外側(cè)包含矩形框 MeasureLength1,MeasureLength2, *定義測量對象
MeasureSigma, MeasureThreshold, GenParamName, GenParamValue : Index) *定義被檢圖像灰度
理解該語句,首先要理解【被檢物體、矩形范圍框、和檢測對象】三者的關(guān)系。如下圖:
【被檢物體、矩形范圍框、和檢測對象】三者的對應(yīng)參數(shù)定義如下圖:
* 矩形類計(jì)量對象的幾何形狀由其中心(Row, Column)、主軸φ的方向以及半邊長度Length1和Length2指定。
* Phi的輸入值自動映射到間隔。
* 矩形測量區(qū)域垂直于區(qū)域矩形的邊界。與矩形邊界垂直和相切的測量區(qū)域的半邊長度在“ Length1”和“ Length2”中設(shè)置。
* 測量區(qū)域的中心位于矩形的邊界上。參數(shù)MeasureSigma指定了一個(gè)標(biāo)準(zhǔn)偏差,算子使用該標(biāo)準(zhǔn)偏差應(yīng)用計(jì)量學(xué)模型來平滑圖像的灰度值。
* 可以使用參數(shù)MeasureThreshold來選擇突出邊緣,該參數(shù)構(gòu)成了一個(gè)振幅閾值,即邊緣一階導(dǎo)數(shù)的絕對值。
此外,還可以在GenParamName和GenParamValue中調(diào)整一些通用參數(shù)。特別是,可以設(shè)置運(yùn)算 set_metrology_object_param 中可用的所有通用參數(shù)。但請注意,對于許多應(yīng)用程序,默認(rèn)值已足夠,無需進(jìn)行調(diào)整。
運(yùn)算符 add_metrology_object_rectangle2_measure返回參數(shù)索引中計(jì)量模型內(nèi)添加的計(jì)量對象的Index索引。
4)get_metrology_object_result( : : MetrologyHandle, Index, Instance, GenParamName, GenParamValue : Parameter)
獲取測量結(jié)果。
get_metrology_object_result 允許訪問通過apply_metrology_model 獲得的測量測量對象MetrologyHandle的測量結(jié)果。參數(shù) Index指定查詢結(jié)果的計(jì)量對象(MetrologyHandle中有多個(gè)計(jì)量對象)。對于設(shè)置為“all”的 Index,將返回所有計(jì)量對象的結(jié)果。通過參數(shù) Instance,可以指定,在參數(shù)中返回結(jié)果是哪個(gè)測量實(shí)例的結(jié)果。將實(shí)例 Instance 設(shè)置為“all”將返回所有實(shí)例的結(jié)果??梢允褂貌煌姆盒蛥?shù)來控制參數(shù)中的返回值Parameter。泛型參數(shù)名稱以 GenParamName傳遞。相應(yīng)的值以GenParamValue傳遞。以下參數(shù)和值是可能的:
5)get_metrology_object_result_contour( : Contour : MetrologyHandle, Index, Instance, Resolution : )
獲取測量結(jié)果。即以上測量的輪廓線。
最后輪廓結(jié)果如圖:
如果原理上還不明白,參考下文,文中繼續(xù)探討本問題。也可參考網(wǎng)文:測量函數(shù)
測量問題
以上得到輪廓線并非測量結(jié)果。如何進(jìn)一步解決測量問題,因?yàn)獒槍Φ那闆r很多,無法一一列舉,這里僅對案例中提出的矩形進(jìn)行矩形測量。
法1:用 fit_rectangle2_contour_xld可以從輪廓線提取矩形,根據(jù)長寬邊滿足測量。
法2:用gen_parallel_contour_xld(contour, parallelcontour, ‘regression_normal’, -Distance)直接得到平行線的距離,(長、寬各一個(gè))
審核編輯 :李倩
-
容器
+關(guān)注
關(guān)注
0文章
499瀏覽量
22130 -
矩形
+關(guān)注
關(guān)注
0文章
15瀏覽量
12631
原文標(biāo)題:Halcon知識: 矩形測量
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機(jī)器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論