Skip to content

get_component_model_treeGetComponentModelTreeGetComponentModelTreeget_component_model_treeT_get_component_model_tree🔗

Short description🔗

get_component_model_treeGetComponentModelTreeGetComponentModelTreeget_component_model_treeT_get_component_model_tree — Return the search tree of a component model.

Warning🔗

get_component_model_treeGetComponentModelTree is obsolete and is only provided for reasons of backward compatibility. The operator will be removed with HALCON 26.11.

Signature🔗

get_component_model_tree( out region Tree, out region Relations, component_model ComponentModelID, integer RootComponent, string Image, out integer StartNode, out integer EndNode, out rectangle2.center.y Row, out rectangle2.center.x Column, out rectangle2.angle.rad Phi, out rectangle2.hwidth Length1, out rectangle2.hheight Length2, out angle.rad AngleStart, out angle.rad AngleExtent )void GetComponentModelTree( HObject* Tree, HObject* Relations, const HTuple& ComponentModelID, const HTuple& RootComponent, const HTuple& Image, HTuple* StartNode, HTuple* EndNode, HTuple* Row, HTuple* Column, HTuple* Phi, HTuple* Length1, HTuple* Length2, HTuple* AngleStart, HTuple* AngleExtent )static void HOperatorSet.GetComponentModelTree( out HObject tree, out HObject relations, HTuple componentModelID, HTuple rootComponent, HTuple image, out HTuple startNode, out HTuple endNode, out HTuple row, out HTuple column, out HTuple phi, out HTuple length1, out HTuple length2, out HTuple angleStart, out HTuple angleExtent )def get_component_model_tree( component_model_id: HHandle, root_component: MaybeSequence[int], image: Union[str, int] ) -> Tuple[HObject, HObject, Sequence[int], Sequence[int], Sequence[float], Sequence[float], Sequence[float], Sequence[float], Sequence[float], Sequence[float], Sequence[float]]

def get_component_model_tree_s( component_model_id: HHandle, root_component: MaybeSequence[int], image: Union[str, int] ) -> Tuple[HObject, HObject, int, int, float, float, float, float, float, float, float]Herror T_get_component_model_tree( Hobject* Tree, Hobject* Relations, const Htuple ComponentModelID, const Htuple RootComponent, const Htuple Image, Htuple* StartNode, Htuple* EndNode, Htuple* Row, Htuple* Column, Htuple* Phi, Htuple* Length1, Htuple* Length2, Htuple* AngleStart, Htuple* AngleExtent )

HRegion HComponentModel::GetComponentModelTree( HRegion* Relations, const HTuple& RootComponent, const HTuple& Image, HTuple* StartNode, HTuple* EndNode, HTuple* Row, HTuple* Column, HTuple* Phi, HTuple* Length1, HTuple* Length2, HTuple* AngleStart, HTuple* AngleExtent ) const

HRegion HComponentModel::GetComponentModelTree( HRegion* Relations, Hlong RootComponent, const HString& Image, Hlong* StartNode, Hlong* EndNode, double* Row, double* Column, double* Phi, double* Length1, double* Length2, double* AngleStart, double* AngleExtent ) const

HRegion HComponentModel::GetComponentModelTree( HRegion* Relations, Hlong RootComponent, const char* Image, Hlong* StartNode, Hlong* EndNode, double* Row, double* Column, double* Phi, double* Length1, double* Length2, double* AngleStart, double* AngleExtent ) const

HRegion HComponentModel::GetComponentModelTree( HRegion* Relations, Hlong RootComponent, const wchar_t* Image, Hlong* StartNode, Hlong* EndNode, double* Row, double* Column, double* Phi, double* Length1, double* Length2, double* AngleStart, double* AngleExtent ) const (Windows only)

HRegion HComponentModel.GetComponentModelTree( out HRegion relations, HTuple rootComponent, HTuple image, out HTuple startNode, out HTuple endNode, out HTuple row, out HTuple column, out HTuple phi, out HTuple length1, out HTuple length2, out HTuple angleStart, out HTuple angleExtent )

HRegion HComponentModel.GetComponentModelTree( out HRegion relations, int rootComponent, string image, out int startNode, out int endNode, out double row, out double column, out double phi, out double length1, out double length2, out double angleStart, out double angleExtent )

Description🔗

get_component_model_treeGetComponentModelTree returns the search tree Treetreetree and the associated relations Relationsrelationsrelations of the component model that is passed in ComponentModelIDcomponentModelIDcomponent_model_id in form of regions as well as in numerical form. get_component_model_treeGetComponentModelTree is particularly useful in order to visualize the search order of the components, which was automatically computed in create_trained_component_modelCreateTrainedComponentModel or create_component_modelCreateComponentModel.

Because the search tree depends on the selected root component, the root component must be passed in RootComponentrootComponentroot_component. The nodes in the tree Treetreetree represent the model components, the connecting lines between the nodes indicate which components are searched relative to each other. The position of the nodes corresponds to the position of the components in the model image (if Imageimageimage \(=\) 'model_image'"model_image" or Imageimageimage \(=\) 00) or in a training image (if Imageimageimage >= 11). In the latter case, the component model must have been created based on a component training result with create_trained_component_modelCreateTrainedComponentModel.

Let n be the number of components in ComponentModelIDcomponentModelIDcomponent_model_id. The region object tuple Relationsrelationsrelations of length n is designed as follows: For each component a separate region is returned. The positions of all components in the image are represented by circles with a radius of 3 pixels. For each component other than the root component RootComponentrootComponentroot_component, additionally the position relation and the orientation relation relative to the predecessor component in the search tree are represented. The position relation is represented by a rectangle, the orientation relation is represented by a circle sector with a radius of 30 pixels. The center of the circle is placed at the mean relative position of the component. The rectangle describes the movement of the reference point of the respective component relative to the pose of its predecessor component, the circle sector describes the variation of the relative orientation. A relative orientation of 0 corresponds to the relative orientation of both components in the model image.

In addition to the regions, the search tree as well as the associated relations are also returned in numerical form. The search tree is described by the two tuples StartNodestartNodestart_node and EndNodeendNodeend_node, both of length n, which contain the start and the end node of all arcs in the tree. The nodes contain the indices of the components. This means that during the search the component that is described by the end node is searched relative to the pose of the component that is described by the start node (predecessor component). Since the root component is not searched relative to any other component, and hence does not have a predecessor component, the associated start node is set to -1-1. The relations are returned in Rowrowrow, Columncolumncolumn, Phiphiphi, Length1length1length_1, Length2length2length_2, AngleStartangleStartangle_start, and AngleExtentangleExtentangle_extent. These parameters are tuples of length n, and contain the relations of all components relative to their associated predecessor component, where the order of the values within the tuples is determined by the index of the corresponding component. The position relation is described by the parameters of the corresponding rectangle Rowrowrow, Columncolumncolumn, Phiphiphi, Length1length1length_1, and Length2length2length_2 (see gen_rectangle2GenRectangle2). The orientation relation is described by the starting angle AngleStartangleStartangle_start and the angle extent AngleExtentangleExtentangle_extent.

For the root component as well as for components that do not have a predecessor in the current image or that have not been found in the current image, an empty region is returned and the corresponding values of the seven parameters are set to 00.

Execution information🔗

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Processed without parallelization.

Parameters🔗

Treetreetree (output_object) region → objectHObjectHRegionHObjectHobject *

Search tree.

Relationsrelationsrelations (output_object) region-array → objectHObjectHRegionHObjectHobject *

Relations of components that are connected in the search tree.

ComponentModelIDcomponentModelIDcomponent_model_id (input_control) component_model → (handle)HTuple (HHandle)HComponentModel, HTuple (IntPtr)HHandleHtuple (handle)

Handle of the component model.

RootComponentrootComponentroot_component (input_control) integer(-array) → (integer)HTuple (Hlong)HTuple (int / long)MaybeSequence[int]Htuple (Hlong)

Index of the root component.

Suggested values: 0, 1, 2, 3, 4, 5, 6, 7, 80, 1, 2, 3, 4, 5, 6, 7, 8

Imageimageimage (input_control) string → (string / integer)HTuple (HString / Hlong)HTuple (string / int / long)Union[str, int]Htuple (char* / Hlong)

Image for which the tree is to be returned.

Default: 'model_image'"model_image"
Suggested values: 'model_image', 0, 1, 2, 3, 4, 5, 6, 7, 8"model_image", 0, 1, 2, 3, 4, 5, 6, 7, 8

StartNodestartNodestart_node (output_control) integer(-array) → (integer)HTuple (Hlong)HTuple (int / long)Sequence[int]Htuple (Hlong)

Component index of the start node of an arc in the search tree.

EndNodeendNodeend_node (output_control) integer(-array) → (integer)HTuple (Hlong)HTuple (int / long)Sequence[int]Htuple (Hlong)

Component index of the end node of an arc in the search tree.

Rowrowrow (output_control) rectangle2.center.y(-array) → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Row coordinate of the center of the rectangle representing the relation.

Columncolumncolumn (output_control) rectangle2.center.x(-array) → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Column index of the center of the rectangle representing the relation.

Phiphiphi (output_control) rectangle2.angle.rad(-array) → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Orientation of the rectangle representing the relation (radians).

Assertion: -pi / 2 < Phi && Phi <= pi / 2

Length1length1length_1 (output_control) rectangle2.hwidth(-array) → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

First radius (half length) of the rectangle representing the relation.

Assertion: Length1 >= 0.0

Length2length2length_2 (output_control) rectangle2.hheight(-array) → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Second radius (half width) of the rectangle representing the relation.

Assertion: Length2 >= 0.0 && Length2 <= Length1

AngleStartangleStartangle_start (output_control) angle.rad(-array) → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Smallest relative orientation angle.

AngleExtentangleExtentangle_extent (output_control) angle.rad(-array) → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Extent of the relative orientation angle.

Result🔗

If the parameters are valid, the operator get_component_model_treeGetComponentModelTree returns the value 2 (H_MSG_TRUE). If necessary, an exception is raised.

Module🔗

Matching