align_metrology_modelT_align_metrology_modelAlignMetrologyModelAlignMetrologyModelalign_metrology_model (Operator)
Name
align_metrology_modelT_align_metrology_modelAlignMetrologyModelAlignMetrologyModelalign_metrology_model — Ausrichtung eines Messmodells.
Signatur
Beschreibung
align_metrology_modelalign_metrology_modelAlignMetrologyModelAlignMetrologyModelAlignMetrologyModelalign_metrology_model bewegt und rotiert das Messmodell, gegeben
durch MetrologyHandleMetrologyHandleMetrologyHandleMetrologyHandlemetrologyHandlemetrology_handle, als
Ganzes relativ zum Bildkoordinatensystem, das seinen Ursprung in der
linken oberen Ecke hat.
Das Konzept der 2D-Messtechnik ist bei der Einleitung zu Kapitel
2D-Messtechnik beschrieben.
Ein Ausrichten des Messmodells gewährleistet,
dass das Messmodell an die Position der zu messenden Objekte im aktuellen
Bild angepasst wird. Diese Modellausrichtung wird dann von
apply_metrology_modelapply_metrology_modelApplyMetrologyModelApplyMetrologyModelApplyMetrologyModelapply_metrology_model benutzt, um eine Messung durchzuführen.
Als erstes wird das Messmodell um AngleAngleAngleAngleangleangle rotiert. Dann wird das
Messmodell um RowRowRowRowrowrow und ColumnColumnColumnColumncolumncolumn verschoben.
Die Werte der Modellausrichtung werden durch den nächsten Aufruf von
align_metrology_modelalign_metrology_modelAlignMetrologyModelAlignMetrologyModelAlignMetrologyModelalign_metrology_model überschrieben.
Berechnung der Parameter der Modellausrichtung
Die Parameter der Modellausrichtung können auf verschiedene Weise ermittelt
werden. Im Folgenden werden drei Möglichkeiten aufgezeigt:
- 'Mittels Regionenanalyse':
-
Falls das Messmodell über Regionenverarbeitung extrahiert werden kann
und die Lage und Orientierung der Region in nachfolgenden Bildern
des Objekts nur wenig variiert, kann man die Parameter des Referenzsystems
und der Modellausrichtung über Regionenanalyse berechnen.
Für das nachfolgende Bild wurde dazu thresholdthresholdThresholdThresholdThresholdthreshold und
smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2smallest_rectangle2 benutzt.
-
Setzen des Referenzsystems
In dem Bild, in dem man das Messmodell definiert hat, extrahiert man
eine Region, die die Metrology-Messobjekte beinhaltet.
Man ermittelt die Lage dieser Region bzgl. des
Bildkoordinatensystems und setzt sie mit set_metrology_model_paramset_metrology_model_paramSetMetrologyModelParamSetMetrologyModelParamSetMetrologyModelParamset_metrology_model_param
als Referenzsystem für das Messmodell.
Dadurch kann man beim nachfolgenden Ausrichten des Messmodells die Lage
der extrahierten Region direkt verwenden.
Beispiel:
threshold(Image, Region, 0, 50)threshold(Image, Region, 0, 50)Threshold(Image, Region, 0, 50)Threshold(Image, Region, 0, 50)Threshold(Image, Region, 0, 50)threshold(Image, Region, 0, 50)
smallest_rectangle2(Region, RowOrig, ColumnOrig, AngleOrig,
Length1, Length2)smallest_rectangle2(Region, RowOrig, ColumnOrig, AngleOrig,
Length1, Length2)SmallestRectangle2(Region, RowOrig, ColumnOrig, AngleOrig,
Length1, Length2)SmallestRectangle2(Region, RowOrig, ColumnOrig, AngleOrig,
Length1, Length2)SmallestRectangle2(Region, RowOrig, ColumnOrig, AngleOrig,
Length1, Length2)smallest_rectangle2(Region, RowOrig, ColumnOrig, AngleOrig,
Length1, Length2)
set_metrology_model_param(MetrologyHandle, 'reference_system',
[RowOrig, ColumnOrig, AngleOrig])set_metrology_model_param(MetrologyHandle, "reference_system",
[RowOrig, ColumnOrig, AngleOrig])SetMetrologyModelParam(MetrologyHandle, "reference_system",
[RowOrig, ColumnOrig, AngleOrig])SetMetrologyModelParam(MetrologyHandle, "reference_system",
[RowOrig, ColumnOrig, AngleOrig])SetMetrologyModelParam(MetrologyHandle, "reference_system",
[RowOrig, ColumnOrig, AngleOrig])set_metrology_model_param(MetrologyHandle, "reference_system",
[RowOrig, ColumnOrig, AngleOrig])
-
Bestimmen der Modellausrichtung
In einem Bild, in dem das Messmodell in einer anderen Lage vorkommt,
ermittelt man die aktuelle Lage der extrahierten Region. Diese Lage
benutzt man dann für die Ausrichtung des Messmodells.
Beispiel:
threshold(CurrentImage, Region, 0, 50)threshold(CurrentImage, Region, 0, 50)Threshold(CurrentImage, Region, 0, 50)Threshold(CurrentImage, Region, 0, 50)Threshold(CurrentImage, Region, 0, 50)threshold(CurrentImage, Region, 0, 50)
smallest_rectangle2(Region, RowAlign, ColumnAlign, AngleAlign,
Length1, Length2)smallest_rectangle2(Region, RowAlign, ColumnAlign, AngleAlign,
Length1, Length2)SmallestRectangle2(Region, RowAlign, ColumnAlign, AngleAlign,
Length1, Length2)SmallestRectangle2(Region, RowAlign, ColumnAlign, AngleAlign,
Length1, Length2)SmallestRectangle2(Region, RowAlign, ColumnAlign, AngleAlign,
Length1, Length2)smallest_rectangle2(Region, RowAlign, ColumnAlign, AngleAlign,
Length1, Length2)
align_metrology_model(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)align_metrology_model(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)AlignMetrologyModel(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)AlignMetrologyModel(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)AlignMetrologyModel(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)align_metrology_model(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)
- 'Mittels eines Formmodells':
-
Wenn ein Formmodel genutzt wird, um das Messmodell im aktuellen Bild
auszurichten, muss das Referenzsystem, bzgl. dem die Metrology-Messobjekte
gegeben sind, mit set_metrology_model_paramset_metrology_model_paramSetMetrologyModelParamSetMetrologyModelParamSetMetrologyModelParamset_metrology_model_param so gesetzt werden, dass
es mit dem Koordinatensystem des Formmodells übereinstimmt. Nur dann können
die Ergebnisse ('row'"row""row""row""row""row", 'column'"column""column""column""column""column", 'angle'"angle""angle""angle""angle""angle") von
get_generic_shape_model_resultget_generic_shape_model_resultGetGenericShapeModelResultGetGenericShapeModelResultGetGenericShapeModelResultget_generic_shape_model_result direkt in
align_metrology_modelalign_metrology_modelAlignMetrologyModelAlignMetrologyModelAlignMetrologyModelalign_metrology_model für die Ausrichtung des Messmodells im
aktuellen Bild verwendet werden. Die einzelnen Schritte hierfür, werden
im Folgenden aufgezeigt.
-
Setzen des Referenzsystems
In dem Bild, in dem das Messmodell definiert wurde, wird die Lage des
Ursprungs des Formmodells ermittelt.
Beispiel:
train_generic_shape_model(Image, ModelID)train_generic_shape_model(Image, ModelID)TrainGenericShapeModel(Image, ModelID)TrainGenericShapeModel(Image, ModelID)TrainGenericShapeModel(Image, ModelID)train_generic_shape_model(Image, ModelID)
area_center(Image, Area, RowOrig, ColumnOrig)area_center(Image, Area, RowOrig, ColumnOrig)AreaCenter(Image, Area, RowOrig, ColumnOrig)AreaCenter(Image, Area, RowOrig, ColumnOrig)AreaCenter(Image, Area, RowOrig, ColumnOrig)area_center(Image, Area, RowOrig, ColumnOrig)
set_metrology_model_param(MetrologyHandle, 'reference_system',
[RowOrig,ColumnOrig,0])set_metrology_model_param(MetrologyHandle, "reference_system",
[RowOrig,ColumnOrig,0])SetMetrologyModelParam(MetrologyHandle, "reference_system",
[RowOrig,ColumnOrig,0])SetMetrologyModelParam(MetrologyHandle, "reference_system",
[RowOrig,ColumnOrig,0])SetMetrologyModelParam(MetrologyHandle, "reference_system",
[RowOrig,ColumnOrig,0])set_metrology_model_param(MetrologyHandle, "reference_system",
[RowOrig,ColumnOrig,0])
-
Bestimmen der Modellausrichtung
In einem Bild, in dem das zu messende Objekt in einer anderen Orientierung
vorkommt, wird die aktuelle Lage des Formmodells ermittelt und an
align_metrology_modelalign_metrology_modelAlignMetrologyModelAlignMetrologyModelAlignMetrologyModelalign_metrology_model übergeben.
Beispiel:
find_generic_shape_model(CurrentImage, ModelID, MatchResultID,
NumMatchResult)find_generic_shape_model(CurrentImage, ModelID, MatchResultID,
NumMatchResult)FindGenericShapeModel(CurrentImage, ModelID, MatchResultID,
NumMatchResult)FindGenericShapeModel(CurrentImage, ModelID, MatchResultID,
NumMatchResult)FindGenericShapeModel(CurrentImage, ModelID, MatchResultID,
NumMatchResult)find_generic_shape_model(CurrentImage, ModelID, MatchResultID,
NumMatchResult)
get_generic_shape_model_result(MatchResultID, 'all', 'row',
RowAlign)get_generic_shape_model_result(MatchResultID, "all", "row",
RowAlign)GetGenericShapeModelResult(MatchResultID, "all", "row",
RowAlign)GetGenericShapeModelResult(MatchResultID, "all", "row",
RowAlign)GetGenericShapeModelResult(MatchResultID, "all", "row",
RowAlign)get_generic_shape_model_result(MatchResultID, "all", "row",
RowAlign)
get_generic_shape_model_result(MatchResultID, 'all', 'column',
ColumnAlign)get_generic_shape_model_result(MatchResultID, "all", "column",
ColumnAlign)GetGenericShapeModelResult(MatchResultID, "all", "column",
ColumnAlign)GetGenericShapeModelResult(MatchResultID, "all", "column",
ColumnAlign)GetGenericShapeModelResult(MatchResultID, "all", "column",
ColumnAlign)get_generic_shape_model_result(MatchResultID, "all", "column",
ColumnAlign)
get_generic_shape_model_result(MatchResultID, 'all', 'angle',
AngleAlign)get_generic_shape_model_result(MatchResultID, "all", "angle",
AngleAlign)GetGenericShapeModelResult(MatchResultID, "all", "angle",
AngleAlign)GetGenericShapeModelResult(MatchResultID, "all", "angle",
AngleAlign)GetGenericShapeModelResult(MatchResultID, "all", "angle",
AngleAlign)get_generic_shape_model_result(MatchResultID, "all", "angle",
AngleAlign)
align_metrology_model(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)align_metrology_model(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)AlignMetrologyModel(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)AlignMetrologyModel(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)AlignMetrologyModel(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)align_metrology_model(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)
- Mittels einer starren 2D-Transformation:
-
Sind bestimmte Modellpunkte (gegeben als [PRowModel], [PColumnModel])
eindeutig identifizierbar, und können diese in weiteren Bildern, in denen
die zu messenden Objekte verschoben und rotiert auftreten, wieder eindeutig
identifiziert werden, so kann zwischen diesen Punkten eine starre Abbildung
berechnet werden. Die Parameter der Abbildung können dann direkt für
die Modellausrichtung benutzt werden.
In diesem Fall muss der Referenzpunkt des Messmodells nicht
verändert werden.
-
Ermitteln der Punktkkorrespondenzen
-
Bestimmen der Modellausrichtung
Die folgende Operatorsequenz berechnet die Parameter der Modellausrichtung
(RowRowRowRowrowrow, ColumnColumnColumnColumncolumncolumn, AngleAngleAngleAngleangleangle)
aus korrespondierenden Punkten im Modellbild und in einem weiteren Bild.
Beispiel:
vector_to_rigid(PRowModel, PColumnModel, PRowCurrent,
PColumnCurrent, HomMat2D)vector_to_rigid(PRowModel, PColumnModel, PRowCurrent,
PColumnCurrent, HomMat2D)VectorToRigid(PRowModel, PColumnModel, PRowCurrent,
PColumnCurrent, HomMat2D)VectorToRigid(PRowModel, PColumnModel, PRowCurrent,
PColumnCurrent, HomMat2D)VectorToRigid(PRowModel, PColumnModel, PRowCurrent,
PColumnCurrent, HomMat2D)vector_to_rigid(PRowModel, PColumnModel, PRowCurrent,
PColumnCurrent, HomMat2D)
hom_mat2d_to_affine_par(HomMat2D, Sx, Sy, Angle, Theta,
Row, Column)hom_mat2d_to_affine_par(HomMat2D, Sx, Sy, Angle, Theta,
Row, Column)HomMat2dToAffinePar(HomMat2D, Sx, Sy, Angle, Theta,
Row, Column)HomMat2dToAffinePar(HomMat2D, Sx, Sy, Angle, Theta,
Row, Column)HomMat2dToAffinePar(HomMat2D, Sx, Sy, Angle, Theta,
Row, Column)hom_mat2d_to_affine_par(HomMat2D, Sx, Sy, Angle, Theta,
Row, Column)
align_metrology_model(MetrologyHandle, Row, Column, Angle)align_metrology_model(MetrologyHandle, Row, Column, Angle)AlignMetrologyModel(MetrologyHandle, Row, Column, Angle)AlignMetrologyModel(MetrologyHandle, Row, Column, Angle)AlignMetrologyModel(MetrologyHandle, Row, Column, Angle)align_metrology_model(MetrologyHandle, Row, Column, Angle)
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
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
MetrologyHandleMetrologyHandleMetrologyHandleMetrologyHandlemetrologyHandlemetrology_handle (input_control, Zustand wird modifiziert) metrology_model → HMetrologyModel, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
Handle des Messmodells..
RowRowRowRowrowrow (input_control) real → HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Zeilenkoordinate der Ausrichtung.
Defaultwert: 0
ColumnColumnColumnColumncolumncolumn (input_control) real → HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Spaltenkoordinate der Ausrichtung.
Defaultwert: 0
AngleAngleAngleAngleangleangle (input_control) angle.rad → HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Rotationswinkel der Ausrichtung.
Defaultwert: 0
Beispiel (HDevelop)
read_image (Image, 'metal-parts/circle_plate_01')
create_metrology_model (MetrologyHandle)
get_image_size (Image, Width, Height)
set_metrology_model_image_size (MetrologyHandle, Width, Height)
CircleParam := [354,274,53]
CircleParam := [CircleParam,350,519,53]
add_metrology_object_generic (MetrologyHandle, 'circle', CircleParam, 20,\
5, 1, 30, [], [], CircleIndices)
create_generic_shape_model (ModelID)
set_generic_shape_model_param (ModelID, 'metric', 'use_polarity')
set_generic_shape_model_param (ModelID, 'min_contrast', 20)
train_generic_shape_model (Image, ModelID)
* Determine location of shape model origin
area_center (Image, Area, RowOrigin, ColOrigin)
set_metrology_model_param (MetrologyHandle, 'reference_system', \
[RowOrigin,ColOrigin,0])
read_image (CurrentImage, 'metal-parts/circle_plate_02')
find_generic_shape_model (CurrentImage, ModelID, MatchResultID, \
NumMatchResult)
get_generic_shape_model_result (MatchResultID, 'all', 'row', Row)
get_generic_shape_model_result (MatchResultID, 'all', 'column', Col)
get_generic_shape_model_result (MatchResultID, 'all', 'angle', Angle)
align_metrology_model (MetrologyHandle, Row, Col, Angle)
apply_metrology_model (CurrentImage, MetrologyHandle)
get_metrology_object_result (MetrologyHandle, CircleIndices, 'all', \
'result_type', 'all_param', Rectangle)
get_metrology_object_result_contour (Contour, MetrologyHandle, \
CircleIndices, 'all', 1.5)
Ergebnis
Sind die Parameterwerte korrekt, dann liefert
align_metrology_modelalign_metrology_modelAlignMetrologyModelAlignMetrologyModelAlignMetrologyModelalign_metrology_model den Wert 2 (H_MSG_TRUE). Andernfalls wird eine
Fehlerbehandlung durchgeführt.
Vorgänger
set_metrology_model_paramset_metrology_model_paramSetMetrologyModelParamSetMetrologyModelParamSetMetrologyModelParamset_metrology_model_param,
add_metrology_object_genericadd_metrology_object_genericAddMetrologyObjectGenericAddMetrologyObjectGenericAddMetrologyObjectGenericadd_metrology_object_generic
Nachfolger
apply_metrology_modelapply_metrology_modelApplyMetrologyModelApplyMetrologyModelApplyMetrologyModelapply_metrology_model
Siehe auch
get_metrology_object_model_contourget_metrology_object_model_contourGetMetrologyObjectModelContourGetMetrologyObjectModelContourGetMetrologyObjectModelContourget_metrology_object_model_contour
Modul
2D Metrology