cluster_model_componentsT_cluster_model_componentsClusterModelComponentsClusterModelComponentscluster_model_components (Operator)
Name
cluster_model_componentsT_cluster_model_componentsClusterModelComponentsClusterModelComponentscluster_model_components
— Adopt new parameters that are used to create the model components into the
training result.
Signature
void ClusterModelComponents(const HObject& TrainingImages, HObject* ModelComponents, const HTuple& ComponentTrainingID, const HTuple& AmbiguityCriterion, const HTuple& MaxContourOverlap, const HTuple& ClusterThreshold)
HRegion HComponentTraining::ClusterModelComponents(const HImage& TrainingImages, const HString& AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold) const
HRegion HComponentTraining::ClusterModelComponents(const HImage& TrainingImages, const char* AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold) const
HRegion HComponentTraining::ClusterModelComponents(const HImage& TrainingImages, const wchar_t* AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold) const
(
Windows only)
HRegion HImage::ClusterModelComponents(const HComponentTraining& ComponentTrainingID, const HString& AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold) const
HRegion HImage::ClusterModelComponents(const HComponentTraining& ComponentTrainingID, const char* AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold) const
HRegion HImage::ClusterModelComponents(const HComponentTraining& ComponentTrainingID, const wchar_t* AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold) const
(
Windows only)
static void HOperatorSet.ClusterModelComponents(HObject trainingImages, out HObject modelComponents, HTuple componentTrainingID, HTuple ambiguityCriterion, HTuple maxContourOverlap, HTuple clusterThreshold)
HRegion HComponentTraining.ClusterModelComponents(HImage trainingImages, string ambiguityCriterion, double maxContourOverlap, double clusterThreshold)
HRegion HImage.ClusterModelComponents(HComponentTraining componentTrainingID, string ambiguityCriterion, double maxContourOverlap, double clusterThreshold)
Description
With cluster_model_componentscluster_model_componentsClusterModelComponentsClusterModelComponentscluster_model_components
you can modify parameters
after a first training has been performed using
train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentstrain_model_components
. cluster_model_componentscluster_model_componentsClusterModelComponentsClusterModelComponentscluster_model_components
sets the criterion AmbiguityCriterionAmbiguityCriterionAmbiguityCriterionambiguityCriterionambiguity_criterion
that is used to solve
the ambiguities, the maximum contour overlap
MaxContourOverlapMaxContourOverlapMaxContourOverlapmaxContourOverlapmax_contour_overlap
, and the cluster threshold of the training
result ComponentTrainingIDComponentTrainingIDComponentTrainingIDcomponentTrainingIDcomponent_training_id
to the specified values. A
detailed description of these parameters can be found in the
documentation of train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentstrain_model_components
. By modifying these
parameters, the way in which the initial components are merged into
rigid model components changes. For example, the greater the
cluster threshold is chosen, the fewer initial components are
merged. You can select suitable parameter values interactively by
repeatedly calling inspect_clustered_componentsinspect_clustered_componentsInspectClusteredComponentsInspectClusteredComponentsinspect_clustered_components
with
different parameter values and then setting the chosen values by
using get_training_componentsget_training_componentsGetTrainingComponentsGetTrainingComponentsget_training_components
.
The rigid model components are returned in
ModelComponentsModelComponentsModelComponentsmodelComponentsmodel_components
. In order to receive reasonable results, it
is essential that the same training images that were used to perform
the training with train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentstrain_model_components
are passed in
TrainingImagesTrainingImagesTrainingImagestrainingImagestraining_images
. The pose of the newly clustered components
within the training images is determined using the shape-based
matching. As in train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentstrain_model_components
, one can decide
whether the shape models should be pregenerated by using
set_system('pregenerate_shape_models',...)set_system("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...)set_system("pregenerate_shape_models",...)
.
Note that, if for a certain pyramid level the model touches the
image border, it might not be found even if it lies completely
within the original image.
set_system('border_shape_models',...)set_system("border_shape_models",...)SetSystem("border_shape_models",...)SetSystem("border_shape_models",...)set_system("border_shape_models",...)
can be used to
determine whether the models must lie completely within the training
images or whether they can extend partially beyond the image border.
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
TrainingImagesTrainingImagesTrainingImagestrainingImagestraining_images
(input_object) (multichannel-)image(-array) →
objectHImageHObjectHObjectHobject (byte / uint2)
Training images that were used for training the
model components.
ModelComponentsModelComponentsModelComponentsmodelComponentsmodel_components
(output_object) region(-array) →
objectHRegionHObjectHObjectHobject *
Contour regions of rigid model components.
ComponentTrainingIDComponentTrainingIDComponentTrainingIDcomponentTrainingIDcomponent_training_id
(input_control) component_training →
HComponentTraining, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
Handle of the training result.
AmbiguityCriterionAmbiguityCriterionAmbiguityCriterionambiguityCriterionambiguity_criterion
(input_control) string →
HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Criterion for solving the ambiguities.
Default:
'rigidity'
"rigidity"
"rigidity"
"rigidity"
"rigidity"
List of values:
'distance'"distance""distance""distance""distance", 'distance_orientation'"distance_orientation""distance_orientation""distance_orientation""distance_orientation", 'orientation'"orientation""orientation""orientation""orientation", 'rigidity'"rigidity""rigidity""rigidity""rigidity"
MaxContourOverlapMaxContourOverlapMaxContourOverlapmaxContourOverlapmax_contour_overlap
(input_control) real →
HTuplefloatHTupleHtuple (real) (double) (double) (double)
Maximum contour overlap of the found initial
components.
Default:
0.2
Suggested values:
0.0, 0.1, 0.2, 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 <= MaxContourOverlap && MaxContourOverlap <= 1
ClusterThresholdClusterThresholdClusterThresholdclusterThresholdcluster_threshold
(input_control) real →
HTuplefloatHTupleHtuple (real) (double) (double) (double)
Threshold for clustering the initial components.
Default:
0.5
Suggested values:
0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
Restriction:
0 <= ClusterThreshold && ClusterThreshold <= 1
Example (HDevelop)
* Get the model image.
read_image (ModelImage, 'model_image.tif')
* Define the regions for the initial components.
gen_rectangle2 (InitialComponentRegions, 212, 233, 0.62, 167, 29)
gen_rectangle2 (Rectangle2, 298, 363, 1.17, 162, 34)
gen_rectangle2 (Rectangle3, 63, 444, -0.26, 50, 27)
gen_rectangle2 (Rectangle4, 120, 473, 0, 33, 20)
concat_obj (InitialComponentRegions, Rectangle2, InitialComponentRegions)
concat_obj (InitialComponentRegions, Rectangle3, InitialComponentRegions)
concat_obj (InitialComponentRegions, Rectangle4, InitialComponentRegions)
* Get the training images
gen_empty_obj (TrainingImages)
for i := 1 to 4 by 1
read_image (TrainingImage, 'training_image-'+i$'02'+'.tif')
concat_obj (TrainingImages, TrainingImage, TrainingImages)
endfor
* Extract the model components and train the relations.
train_model_components (ModelImage, InitialComponentRegions, \
TrainingImages, ModelComponents, 22, 60, 30, 0.65, \
0, 0, rad(60), 'speed', 'rigidity', 0.2, 0.5, \
ComponentTrainingID)
* Find the best value for the parameter ClusterThreshold.
inspect_clustered_components (ModelComponents, ComponentTrainingID, \
'rigidity', 0.2, 0.4)
* Adopt the ClusterThreshold into the training result.
cluster_model_components (TrainingImages, ModelComponents, \
ComponentTrainingID, 'rigidity', 0.2, 0.4)
* Create the component model based on the training result.
create_trained_component_model (ComponentTrainingID, -rad(30), rad(60), \
10, 0.5, 'auto', 'auto', 'none', \
'use_polarity', 'false', ComponentModelID, \
RootRanking)
Result
If the parameter values are correct, the operator
cluster_model_componentscluster_model_componentsClusterModelComponentsClusterModelComponentscluster_model_components
returns the value 2 (
H_MSG_TRUE)
. If the input is
empty (no input images are available) the behavior can be set via
set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)
. If necessary, an
exception is raised.
Possible Predecessors
train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentstrain_model_components
,
inspect_clustered_componentsinspect_clustered_componentsInspectClusteredComponentsInspectClusteredComponentsinspect_clustered_components
Possible Successors
get_training_componentsget_training_componentsGetTrainingComponentsGetTrainingComponentsget_training_components
,
create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelcreate_trained_component_model
,
modify_component_relationsmodify_component_relationsModifyComponentRelationsModifyComponentRelationsmodify_component_relations
,
write_training_componentswrite_training_componentsWriteTrainingComponentsWriteTrainingComponentswrite_training_components
,
get_component_relationsget_component_relationsGetComponentRelationsGetComponentRelationsget_component_relations
,
clear_training_componentsclear_training_componentsClearTrainingComponentsClearTrainingComponentsclear_training_components
Module
Matching