59 lines
2.6 KiB
XML
59 lines
2.6 KiB
XML
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
||
|
|
<hdevelop file_version="1.2" halcon_version="24.11.1.0">
|
||
|
|
<procedure name="find_circles">
|
||
|
|
<interface>
|
||
|
|
<ic>
|
||
|
|
<par name="ImageFile" base_type="ctrl" dimension="0"/>
|
||
|
|
<par name="RoiFile" base_type="ctrl" dimension="0"/>
|
||
|
|
</ic>
|
||
|
|
<oc>
|
||
|
|
<par name="FitRow" base_type="ctrl" dimension="0"/>
|
||
|
|
<par name="FitCol" base_type="ctrl" dimension="0"/>
|
||
|
|
<par name="MetroRow" base_type="ctrl" dimension="0"/>
|
||
|
|
<par name="MetroCol" base_type="ctrl" dimension="0"/>
|
||
|
|
</oc>
|
||
|
|
</interface>
|
||
|
|
<body>
|
||
|
|
<l>read_image (Image1, ImageFile)</l>
|
||
|
|
<l>read_region (Rectangle, RoiFile)</l>
|
||
|
|
<l>get_image_size (Image1, Width, Height)</l>
|
||
|
|
<l>reduce_domain (Image1, Rectangle, ImageReduced)</l>
|
||
|
|
<l>edges_sub_pix (ImageReduced, Edges, 'canny', 3, 10, 40)</l>
|
||
|
|
<l>select_contours_xld (Edges, SelectedContours1, 'contour_length', 50, 500, -0.5, 0.5)</l>
|
||
|
|
<l>union_adjacent_contours_xld (SelectedContours1, UnionContours, 10, 1, 'attr_keep')</l>
|
||
|
|
<l>select_contours_xld (UnionContours, SelectedContours, 'contour_length', 300, 400, -0.5, 0.5)</l>
|
||
|
|
<l>sort_contours_xld (SelectedContours, SortedContours, 'character', 'true', 'column')</l>
|
||
|
|
<l>fit_circle_contour_xld (SortedContours, 'algebraic', -1, 0, 0, 3, 2, FitRow, FitCol, Radius, StartPhi, EndPhi, PointOrder)</l>
|
||
|
|
<l>if (|FitRow| != 16)</l>
|
||
|
|
<l> throw ('fit circle count != 16, got ' + |FitRow|)</l>
|
||
|
|
<l>endif</l>
|
||
|
|
<l>CircleRadiusTolerance := 15</l>
|
||
|
|
<l>create_metrology_model (MetrologyHandle)</l>
|
||
|
|
<l>set_metrology_model_image_size (MetrologyHandle, Width, Height)</l>
|
||
|
|
<l>add_metrology_object_circle_measure (MetrologyHandle, FitRow, FitCol, Radius, CircleRadiusTolerance, 5, 1, 30, [], [], MetrologyCircleIndices)</l>
|
||
|
|
<l>set_metrology_object_param (MetrologyHandle, MetrologyCircleIndices, 'num_instances', 1)</l>
|
||
|
|
<l>set_metrology_object_param (MetrologyHandle, MetrologyCircleIndices, 'measure_transition', 'positive')</l>
|
||
|
|
<l>set_metrology_object_param (MetrologyHandle, MetrologyCircleIndices, 'min_score', 0.3)</l>
|
||
|
|
<l>apply_metrology_model (Image1, MetrologyHandle)</l>
|
||
|
|
<l>get_metrology_object_result (MetrologyHandle, MetrologyCircleIndices, 'all', 'result_type', 'all_param', CircleParameter)</l>
|
||
|
|
<l>Sequence := [0:3:|CircleParameter| - 1]</l>
|
||
|
|
<l>MetroRow := CircleParameter[Sequence]</l>
|
||
|
|
<l>MetroCol := CircleParameter[Sequence + 1]</l>
|
||
|
|
<l>if (|MetroRow| != 16)</l>
|
||
|
|
<l> throw ('metrology circle count != 16, got ' + |MetroRow|)</l>
|
||
|
|
<l>endif</l>
|
||
|
|
<l>clear_metrology_model (MetrologyHandle)</l>
|
||
|
|
</body>
|
||
|
|
<docu id="find_circles">
|
||
|
|
<parameters>
|
||
|
|
<parameter id="ImageFile"/>
|
||
|
|
<parameter id="RoiFile"/>
|
||
|
|
<parameter id="FitRow"/>
|
||
|
|
<parameter id="FitCol"/>
|
||
|
|
<parameter id="MetroRow"/>
|
||
|
|
<parameter id="MetroCol"/>
|
||
|
|
</parameters>
|
||
|
|
</docu>
|
||
|
|
</procedure>
|
||
|
|
</hdevelop>
|