set_shape_model_metricT_set_shape_model_metricSetShapeModelMetricSetShapeModelMetricset_shape_model_metric (Operator)

Name

set_shape_model_metricT_set_shape_model_metricSetShapeModelMetricSetShapeModelMetricset_shape_model_metric — Setzen der Metrik eines Formmodells, das aus XLD-Konturen erzeugt wurde.

Signatur

set_shape_model_metric(Image : : ModelID, HomMat2D, Metric : )

Herror T_set_shape_model_metric(const Hobject Image, const Htuple ModelID, const Htuple HomMat2D, const Htuple Metric)

void SetShapeModelMetric(const HObject& Image, const HTuple& ModelID, const HTuple& HomMat2D, const HTuple& Metric)

void HShapeModel::SetShapeModelMetric(const HImage& Image, const HHomMat2D& HomMat2D, const HString& Metric) const

void HShapeModel::SetShapeModelMetric(const HImage& Image, const HHomMat2D& HomMat2D, const char* Metric) const

void HShapeModel::SetShapeModelMetric(const HImage& Image, const HHomMat2D& HomMat2D, const wchar_t* Metric) const   (Nur Windows)

void HImage::SetShapeModelMetric(const HShapeModel& ModelID, const HHomMat2D& HomMat2D, const HString& Metric) const

void HImage::SetShapeModelMetric(const HShapeModel& ModelID, const HHomMat2D& HomMat2D, const char* Metric) const

void HImage::SetShapeModelMetric(const HShapeModel& ModelID, const HHomMat2D& HomMat2D, const wchar_t* Metric) const   (Nur Windows)

static void HOperatorSet.SetShapeModelMetric(HObject image, HTuple modelID, HTuple homMat2D, HTuple metric)

void HShapeModel.SetShapeModelMetric(HImage image, HHomMat2D homMat2D, string metric)

void HImage.SetShapeModelMetric(HShapeModel modelID, HHomMat2D homMat2D, string metric)

def set_shape_model_metric(image: HObject, model_id: HHandle, hom_mat_2d: Sequence[float], metric: str) -> None

Beschreibung

set_shape_model_metricset_shape_model_metricSetShapeModelMetricSetShapeModelMetricSetShapeModelMetricset_shape_model_metric ändert den Wert des Parameters MetricMetricMetricMetricmetricmetric der bei der Erstellung des Formmodells ModelIDModelIDModelIDModelIDmodelIDmodel_id gesetzt wurde. Hierfür wird die Polarität der Modellkanten unter Verwendung des Bildes ImageImageImageImageimageimage bestimmt. Die Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d beschreibt die Transformation, die die Modellkanten an die entsprechende Stelle des Bildes transformiert, an der das Objekt erscheint.

Der Parameter MetricMetricMetricMetricmetricmetric legt fest, unter welchen Bedingungen das Muster später im Suchbild noch erkannt wird. Falls MetricMetricMetricMetricmetricmetric = 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity", muss das Objekt im Bild dieselben Kontrasteigenschaften aufweisen wie das Modell. Wenn z.B. das Modell ein helles Objekt auf dunklem Hintergrund ist, wird das Objekt im Bild nur dann gefunden, wenn es auch heller als der Hintergrund ist. Falls MetricMetricMetricMetricmetricmetric = 'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity", wird das Objekt auch dann im Bild gefunden, wenn sich der Kontrast global umkehrt. Im obigen Beispiel würde das Objekt also auch dann gefunden, wenn es dunkler als der Hintergrund ist. Die Laufzeit von find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModelfind_shape_model erhöht sich in diesem Fall geringfügig.

Es muss sichergestellt werden, dass die Objektkanten im Bild ImageImageImageImageimageimage die gleiche (oder inverse) Polarität aufweisen wie die entsprechenden Kanten im späteren Suchbild. Insbesondere darf das Objekt nicht verdeckt sein und der Hintergrund muss entweder heller oder dunkler sein als das Objekt. Ansonsten stimmt die Polarität der Modellkanten nicht mit der Polarität der Kanten im Suchbild überein und das Formmodell kann dort nicht gefunden werden. Zu beachten ist, dass nur die Polarität der Kanten bestimmt wird, nicht ihr Kontrast. Desweiteren ist zu beachten, dass die Polarität nur aus einem einkanaligen Bild bestimmt wird. Wird ein Mehrkanalbild in ImageImageImageImageimageimage übergeben, so wird nur der erste Kanal verwendet (und keine Fehlermeldung zurückgegeben).

Die Transformation, die durch die Matrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d definiert ist, transformiert die Modellkonturen an die Stelle an der das Objekt im Bild ImageImageImageImageimageimage erscheint. Sie kann dadurch bestimmt werden, dass man das Objekt z.B. mittels find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModelfind_shape_model im Bild ImageImageImageImageimageimage findet und anschließend die entsprechende Transformationsmatrix mit der Prozedur get_hom_mat2d_from_matching_result berechnet. Der Operator set_shape_model_metricset_shape_model_metricSetShapeModelMetricSetShapeModelMetricSetShapeModelMetricset_shape_model_metric ignoriert mit set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOriginset_shape_model_origin gesetzte Ursprünge und nimmt stets (0,0) als Ursprung. Wird das Objekt im Bild ImageImageImageImageimageimage gesucht, müssen auch alle anderen Operatoren den Ursprung im Punkt (0,0) setzen, weshalb set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOriginset_shape_model_origin mit (0,0) als Ursprung aufgerufen werden soll.

Eine typische Vorgehensweise besteht darin, zuerst die XLD-Konturen aus einer Datei einzulesen. Da diese XLD-Konturen keine Polaritätsinformation haben, muss der Parameter MetricMetricMetricMetricmetricmetric bei der Erzeugung des Formmodells aus den XLD-Konturen auf den Wert 'ignore_local_polarity'"ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity" gesetzt werden. Dann kann das Modell in einem ersten Suchbild gefunden werden. Aus den resultierenden Matchingergebnissen lassen sich die Transformationsparameter bestimmen, die die Modellkonturen an die Stelle des Suchbildes abbilden, an der das Objekt erscheint. Um die Matchingergebnisse interaktiv zu kontrollieren, können die Modellkonturen entsprechend transformiert werden. Ist das Matchingergebnis korrekt, kann der Wert des Parameters MetricMetricMetricMetricmetricmetric z.B. zu 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity" verändert werden. Dies führt in den nachfolgenden Bildern zu einer schnelleren und robusteren Erkennung.

Achtung

set_shape_model_metricset_shape_model_metricSetShapeModelMetricSetShapeModelMetricSetShapeModelMetricset_shape_model_metric kann nur mit Formmodellen genutzt werden, die aus XLD-Konturen erzeugt wurden.

Ausführungsinformationen

Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:

Während der Ausführung dieses Operators muss der Zugriff auf den Wert dieses Parameters synchronisiert werden, wenn er über mehrere Threads hinweg verwendet wird.

Parameter

ImageImageImageImageimageimage (input_object)  singlechannelimage objectHImageHObjectHImageHobject (byte / uint2)

Eingabebild, das zur Bestimmung der Polarität verwendet wird.

ModelIDModelIDModelIDModelIDmodelIDmodel_id (input_control, Zustand wird modifiziert)  shape_model HShapeModel, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Modells.

HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d (input_control)  hom_mat2d HHomMat2D, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Transformationsmatrix.

MetricMetricMetricMetricmetricmetric (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Art der zum Matchen verwendeten Metrik.

Defaultwert: 'use_polarity' "use_polarity" "use_polarity" "use_polarity" "use_polarity" "use_polarity"

Werteliste: 'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity", 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity"

Beispiel (HDevelop)

*
* Read the contours from file
read_contour_xld_dxf (Contours, 'metal-part-01', [], [], DxfStatus)
*
* Scale the contours such that they correspond to the image
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_scale (HomMat2DIdentity, 3.35, 3.35, 0, 0, HomMat2DScale)
affine_trans_contour_xld (Contours, ContoursAffineTrans, HomMat2DScale)
*
* Create the shape model with Metric='ignore_local_polarity'
create_shape_model_xld (ContoursAffineTrans, 'auto', rad(0), rad(360), \
                        'auto', 'auto', 'ignore_local_polarity', 5, ModelID)
*
* Get an image of the object and try to find the object in this image
read_image (Image, 'metal-parts/metal-parts-01')
find_shape_model (Image, ModelID, rad(0), rad(360), 0.5, 1, 0.5, \
                  'least_squares', 0, 0.9, Row, Column, Angle, Score)
*
* Visualize the match
vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, HomMat2D)
get_shape_model_contours (ModelContours, ModelID, 1)
affine_trans_contour_xld (ModelContours, ModelContoursAffineTrans, HomMat2D)
*
* Set the matching metric to 'use_polarity', based on the position
* of the found object
set_shape_model_metric (Image, ModelID, HomMat2D, 'use_polarity')
*
* Use the shape model to detect the object faster and more robust
read_image (Image, 'metal-parts/metal-parts-02')
find_shape_model (Image, ModelID, rad(0), rad(360), 0.5, 0, 0.5, \
                  'least_squares', 0, 0.9, Row, Column, Angle, Score)
*
* Visualize the matches
for Index := 0 to |Score|-1 by 1
    vector_angle_to_rigid (0, 0, 0, Row[Index], Column[Index], Angle[Index], \
                           HomMat2D)
    affine_trans_contour_xld (ModelContours, ModelContoursAffineTrans, \
                              HomMat2D)
endfor

Ergebnis

Sind die Parameterwerte korrekt, dann liefert set_shape_model_metricset_shape_model_metricSetShapeModelMetricSetShapeModelMetricSetShapeModelMetricset_shape_model_metric den Wert TRUE. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

create_shape_model_xldcreate_shape_model_xldCreateShapeModelXldCreateShapeModelXldCreateShapeModelXldcreate_shape_model_xld, create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld, create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld

Nachfolger

find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModelfind_shape_model, find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model, find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model

Siehe auch

create_shape_model_xldcreate_shape_model_xldCreateShapeModelXldCreateShapeModelXldCreateShapeModelXldcreate_shape_model_xld, create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld, create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld

Modul

Matching