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