相關算子鏈接:https://www.mvtec.com/doc/halcon/12/en/toc_2dmetrology.html
參考案例:
apply_metrology_model_diamond.hdev
apply_metrology_model.hdev
基本流程:
1,創建計量模型
create_metrology_model (MetrologyHandle)
2,設置計量模型的圖像大小
set_metrology_model_image_size (MetrologyHandle, Width, Height)
3,將計量對象添加至計量模型中.(矩形,直線,圓,橢圓)
add_metrology_object_rectangle2_measure //矩形
add_metrology_object_circle_measure //圓或圓弧
add_metrology_object_line_measure //直線
add_metrology_object_ellipse_measure //橢圓或圓弧
4,設置計量模型參數
set_metrology_model_param
GenParamName: 'camera_param'//相機內參;'plane_pose':相機外參;'reference_system':參考位置,Value:[row, column, angle]; 'scale':縮放比例
5,設置計量對象參數
set_metrology_object_param
創建計量區域:
'measure_length1':半寬; 'measure_length2':半高
邊緣檢測:
'measure_sigma':高斯平滑的sigma; 'measure_threshold':最小邊緣閾值 'measure_select':選擇結束點'all','first','last'
'measure_transition':深色/淺色或淺色/深色邊緣; 'positive'正邊緣(暗/亮邊緣);'negative'負邊緣(亮/暗邊緣);'uniform' 一致正邊緣或一致負邊緣,擬合時僅用一個方向的點擬合直線或圓
'measure_interpolation':插值類型; “ bicubic”雙三次,“ bilinear”雙線性,“ nearest_neighbor”近鄰
擬合幾何形狀:
'min_score':最小分數 'num_instances':擬合實例最大數量
6,定位計量模型
align_metrology_model
7,測量並擬合
align_metrology_model
8,獲取結果
get_metrology_object_result 獲取測量對象的數據結果
get_metrology_object_result_contour 獲取測量對象的結果輪廓
get_metrology_object_measures 獲取計量模型的測量區域和邊緣定位結果
9,刪除並釋放計量模型的句柄
clear_metrology_model
read_image (Diamond01, 'diamond_01.png') get_image_size (Diamond01, Width, Height) dev_set_line_width (3) *1生成計量模板 create_metrology_model (MetrologyHandle) *2設置計量模型圖像大小 set_metrology_model_image_size (MetrologyHandle, Width, Height) *3添加計量幾何形狀 * gen_region_line (ROI_0, 153.146, 402.104, 297.938, 223.979) * gen_region_line (TMP_Region, 152.104, 398.458, 272.938, 555.75) lineRBegin:=[153,152] lineCBegin:=[402,398] lineREnd:=[297,272] lineCEnd:=[223,555] add_metrology_object_line_measure (MetrologyHandle, lineRBegin, lineCBegin, lineREnd, lineCEnd, 20, 5, 1, 30, [], [], LineIndex) *4設置計量模型參數 set_metrology_model_param (MetrologyHandle, 'reference_system', [160,400,0]) *set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 2) list_files ('E:/Halcon/Halcon練習/Week 04/day 01/diamond', ['files','follow_links'], ImageFiles) tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles) for Index := 0 to |ImageFiles| - 1 by 1 read_image (Image, ImageFiles[Index]) gen_rectangle1 (ROI_0, 69.8125, 173.979, 251.063, 628.146) reduce_domain (Image, ROI_0, ImageReduced) threshold (ImageReduced, Regions, 173, 255) get_region_points (Regions, Rows, Columns) *5計量模型定位 align_metrology_model (MetrologyHandle, Rows[0], Columns[0], 0) *6測量應用 apply_metrology_model (ImageReduced, MetrologyHandle) *7獲得結果 get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', Parameter) get_metrology_object_result_contour (Contour, MetrologyHandle, 'all', 'all', 1.5) dev_display (Image) dev_display (Contour) stop () endfor clear_metrology_model (MetrologyHandle)