create_component_model ( ModelImage, ComponentRegions : : VariationRow, VariationColumn, VariationAngle, AngleStart, AngleExtent, ContrastLowComp, ContrastHighComp, MinSizeComp, MinContrastComp, MinScoreComp, NumLevelsComp, AngleStepComp, OptimizationComp, MetricComp, PregenerationComp : ComponentModelID, RootRanking )

Prepare a component model for matching based on explicitly specified components and relations.

create_component_model prepares patterns, which are passed in the form of a model image ModelImage and several regions ComponentRegions, as a component model for matching. The output parameter ComponentModelID is a handle for this model, which is used in subsequent calls to find_component_model. In contrast to create_trained_component_model, no preceding training with train_model_components needs to be performed before calling create_component_model.

Each of the regions passed in ComponentRegions describes a separate model component. Later, the index of a component region in ComponentRegions is used to denote the model component. The reference point of a component is the center of gravity of its associated region, which is passed in ComponentRegions. It can be calculated by calling area_center.

The relative movements (relations) of the model components can be set by passing VariationRow, VariationColumn, and VariationAngle. Because directly passing the relations is complicated, instead of the relations the variations of the model components are passed. The variations describe the movements of the components independently from each other relative to their poses in the model image ModelImage. The parameters VariationRow and VariationColumn describe the movement of the components in row and column direction by ±VariationRow/2 and ±VariationColumn/2, respectively. The parameter VariationAngle describes the angle variation of the component by ±VariationAngle/2. Based on these values, the relations are automatically computed. The three parameters must either contain one element, in which case the parameter is used for all model components, or must contain the same number of elements as ComponentRegions, in which case each parameter element refers to the corresponding model component in ComponentRegions.

The parameters AngleStart and AngleExtent determine the range of possible rotations of the component model in an image.

Internally, a separate shape model is built for each model component (see create_shape_model). Therefore, the parameters ContrastLowComp, ContrastHighComp, MinSizeComp, MinContrastComp, MinScoreComp, NumLevelsComp, AngleStepComp, OptimizationComp, MetricComp, and PregenerationComp correspond to the parameters of create_shape_model, with the following differences: First, in the parameter Contrast of create_shape_model the upper as well as the lower threshold for the hysteresis threshold method can be passed. Additionally, a third value, which suppresses small connected contour regions, can be passed. In contrast, the operator create_trained_component_model offers three separate parameters ContrastHighComp, ContrastLowComp, and MinScoreComp in order to set these three values. Consequently, also the automatic computation of the contrast threshold(s) is different. If both hysteresis threshold should be automatically determined, both ContrastLowComp and ContrastHighComp must be set to 'auto'. In contrast, if only one threshold value should be determined, ContrastLowComp must be set to 'auto' while ContrastHighComp must be set to an arbitrary value different from 'auto'. Secondly, the parameter Optimization of create_shape_model provides the possibility to reduce the number of model points as well as the possibility to completely pregenerate the shape model. In contrast, the operator create_trained_component_model uses a separate parameter PregenerationComp in order to decide whether the shape models should be completely pregenerated or not. A third difference concerning the parameter MinScoreComp should be noted. When using the shape-based matching, this parameter needs not be passed when preparing the shape model using create_shape_model, but only during the search using find_shape_model. In contrast, when preparing the component model it is favorable to analyze rotational symmetries of the model components and similarities between the model components. However, this analysis only leads to meaningful results if the value for MinScoreComp that is used during the search (see find_component_model) is already approximately known.

In addition to the parameters ContrastLowComp, ContrastHighComp, and MinSizeComp also the parameters MinContrastComp, NumLevelsComp, AngleStepComp, and OptimizationComp can be automatically determined by passing 'auto' for the respective parameters.

All component-specific input parameters (parameter names terminate with the suffix Comp) must either contain one element, in which case the parameter is used for all model components, or must contain the same number of elements as the number of regions in ComponentRegions, in which case each parameter element refers to the corresponding element in ComponentRegions.

In addition to the individual shape models, the component model also contains information about the way the single model components must be searched relative to each other using find_component_model in order to minimize the computation time of the search. For this, the components are represented in a tree structure. First, the component that stands at the root of this search tree (root component) is searched. Then, the remaining components are searched relative to the pose of their predecessor in the search tree.

The root component can be passed as an input parameter of find_component_model during the search. To what extent a model component is suited to act as the root component depends on several factors. In principle, a model component that can be found in the image with a high probability should be chosen. Therefore, a component that is sometimes occluded to a high degree or that is missing in some cases is not well suited to act as the root component. Additionally, the computation time that is associated with the root component during the search can serve as a criterion. A ranking of the model components that is based on the latter criterion is returned in RootRanking. In this parameter the indices of the model components are sorted in descending order according to their associated search time, i.e., RootRanking[0] contains the index of the model component that, chosen as root component, allows the fastest search. Note that the ranking returned in RootRanking represents only a coarse estimation. Furthermore, the calculation of the root ranking assumes that the image size is identical when calling create_component_model and find_component_model.


Parameters

ModelImage (input_object)
image -> object : byte
Input image from which the shape models of the model components should be created.

ComponentRegions (input_object)
region-array -> object
Input regions from which the shape models of the model components should be created.

VariationRow (input_control)
integer(-array) -> integer
Variation of the model components in row direction.
Suggested values: 0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 100, 150
Restriction: VariationRow >= 0

VariationColumn (input_control)
integer(-array) -> integer
Variation of the model components in column direction.
Suggested values: 0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 100, 150
Restriction: VariationColumn >= 0

VariationAngle (input_control)
angle.rad(-array) -> real
Angle variation of the model components.
Suggested values: 0, 0.017, 0, 035, 0.05, 0.07, 0.09, 0.17, 0.35, 0.52, 0.67, 0.87
Restriction: VariationAngle >= 0

AngleStart (input_control)
angle.rad -> real
Smallest rotation of the component model.
Default value: -0.39
Suggested values: -3.14, -1.57, -0.79, -0.39, -0.20, 0.0

AngleExtent (input_control)
angle.rad -> real
Extent of the rotation of the component model.
Default value: 0.79
Suggested values: 6.28, 3.14, 1.57, 0.79, 0.39
Restriction: AngleExtent >= 0

ContrastLowComp (input_control)
integer(-array) -> integer / string
Lower hysteresis threshold for the contrast of the components in the model image.
Default value: 'auto'
Suggested values: 'auto', 10, 20, 30, 40, 60, 80, 100, 120, 140, 160
Restriction: ContrastLowComp > 0

ContrastHighComp (input_control)
integer(-array) -> integer / string
Upper hysteresis threshold for the contrast of the components in the model image.
Default value: 'auto'
Suggested values: 'auto', 10, 20, 30, 40, 60, 80, 100, 120, 140, 160
Restriction: (ContrastHighComp > 0) && (ContrastHighComp >= ContrastLowComp)

MinSizeComp (input_control)
integer(-array) -> integer / string
Minimum size of the contour regions in the model.
Default value: 'auto'
Suggested values: 'auto', 0, 5, 10, 20, 30, 40
Restriction: MinSizeComp >= 0

MinContrastComp (input_control)
integer(-array) -> integer / string
Minimum contrast of the components in the search images.
Default value: 'auto'
Suggested values: 'auto', 10, 20, 20, 40
Restriction: (MinContrastComp <= ContrastLowComp) && (MinContrastComp >= 0)

MinScoreComp (input_control)
real(-array) -> real
Minimum score of the instances of the components to be found.
Default value: 0.5
Suggested values: 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
Minimum increment: 0.01
Recommended increment: 0.05
Restriction: (0 <= MinScoreComp) && (MinScoreComp <= 1)

NumLevelsComp (input_control)
integer(-array) -> integer / string
Maximum number of pyramid levels for the components.
Default value: 'auto'
List of values: 'auto', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

AngleStepComp (input_control)
angle.rad(-array) -> real / string
Step length of the angles (resolution) for the components.
Default value: 'auto'
Suggested values: 'auto', 0.0175, 0.0349, 0.0524, 0.0698, 0.0873
Restriction: AngleStepComp >= 0

OptimizationComp (input_control)
string -> string
Kind of optimization for the components.
Default value: 'auto'
List of values: 'auto', 'none', 'point_reduction_low', 'point_reduction_medium', 'point_reduction_high'

MetricComp (input_control)
string(-array) -> string
Match metric used for the components.
Default value: 'use_polarity'
List of values: 'use_polarity', 'ignore_global_polarity', 'ignore_local_polarity'

PregenerationComp (input_control)
string(-array) -> string
Complete pregeneration of the shape models for the components if equal to 'true'.
Default value: 'false'
List of values: 'true', 'false'

ComponentModelID (output_control)
component_model -> integer
Handle of the component model.

RootRanking (output_control)
integer(-array) -> integer
Ranking of the model components expressing the suitability to act as the root component.


Example
* Read the model image.
read_image (ModelImage, 'model_image.tif')
* Describe the model components.
gen_rectangle2 (ComponentRegions, 318, 109, -1.62, 34, 19)
gen_rectangle2 (Rectangle2, 342, 238, -1.63, 32, 17)
gen_rectangle2 (Rectangle3, 355, 505, 1.41, 25, 17)
ComponentRegions := [ComponentRegions,Rectangle2]
ComponentRegions := [ComponentRegions,Rectangle3]
* Create the component model by explicitly specifying the relations.
create_component_model (ModelImage, ComponentRegions, 20, 20, rad(25), 0,
                        rad(360), 15, 40, 15, 10, 0.8, 'auto', 'auto', 
                        'none', 'use_polarity', 'false', ComponentModelID,
                        RootRanking)
* Find the component model in a run-time image.
read_image (SearchImage, 'search_image.tif')
find_component_model (SearchImage, ComponentModelID, RootRanking, 0,
                      rad(360), 0.5, 0, 0.5, 'stop_search',
                      'search_from_best', 'none', 0.8, 'least_squares', 0,
                      0.8, ModelStart, ModelEnd, Score, RowComp, ColumnComp,
                      AngleComp, ScoreComp, ModelComp)

Result

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


Parallelization Information

create_component_model is processed completely exclusively without parallelization.


Possible Predecessors

draw_region, concat_obj


Possible Successors

find_component_model


Alternatives

create_trained_component_model


See also

create_shape_model, find_shape_model


Module

Matching



Copyright © 1996-2008 MVTec Software GmbH