vector_to_proj_hom_mat2dT_vector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2dvector_to_proj_hom_mat2d (Operator)

Name

vector_to_proj_hom_mat2dT_vector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2dvector_to_proj_hom_mat2d — Bestimmt eine projektive Transformationsmatrix unter Verwendung vorgegebener Punktkorrespondenzen.

Signatur

vector_to_proj_hom_mat2d( : : Px, Py, Qx, Qy, Method, CovXX1, CovYY1, CovXY1, CovXX2, CovYY2, CovXY2 : HomMat2D, Covariance)

Herror T_vector_to_proj_hom_mat2d(const Htuple Px, const Htuple Py, const Htuple Qx, const Htuple Qy, const Htuple Method, const Htuple CovXX1, const Htuple CovYY1, const Htuple CovXY1, const Htuple CovXX2, const Htuple CovYY2, const Htuple CovXY2, Htuple* HomMat2D, Htuple* Covariance)

void VectorToProjHomMat2d(const HTuple& Px, const HTuple& Py, const HTuple& Qx, const HTuple& Qy, const HTuple& Method, const HTuple& CovXX1, const HTuple& CovYY1, const HTuple& CovXY1, const HTuple& CovXX2, const HTuple& CovYY2, const HTuple& CovXY2, HTuple* HomMat2D, HTuple* Covariance)

HTuple HHomMat2D::VectorToProjHomMat2d(const HTuple& Px, const HTuple& Py, const HTuple& Qx, const HTuple& Qy, const HString& Method, const HTuple& CovXX1, const HTuple& CovYY1, const HTuple& CovXY1, const HTuple& CovXX2, const HTuple& CovYY2, const HTuple& CovXY2)

HTuple HHomMat2D::VectorToProjHomMat2d(const HTuple& Px, const HTuple& Py, const HTuple& Qx, const HTuple& Qy, const char* Method, const HTuple& CovXX1, const HTuple& CovYY1, const HTuple& CovXY1, const HTuple& CovXX2, const HTuple& CovYY2, const HTuple& CovXY2)

HTuple HHomMat2D::VectorToProjHomMat2d(const HTuple& Px, const HTuple& Py, const HTuple& Qx, const HTuple& Qy, const wchar_t* Method, const HTuple& CovXX1, const HTuple& CovYY1, const HTuple& CovXY1, const HTuple& CovXX2, const HTuple& CovYY2, const HTuple& CovXY2)   (Nur Windows)

static void HOperatorSet.VectorToProjHomMat2d(HTuple px, HTuple py, HTuple qx, HTuple qy, HTuple method, HTuple covXX1, HTuple covYY1, HTuple covXY1, HTuple covXX2, HTuple covYY2, HTuple covXY2, out HTuple homMat2D, out HTuple covariance)

HTuple HHomMat2D.VectorToProjHomMat2d(HTuple px, HTuple py, HTuple qx, HTuple qy, string method, HTuple covXX1, HTuple covYY1, HTuple covXY1, HTuple covXX2, HTuple covYY2, HTuple covXY2)

def vector_to_proj_hom_mat2d(px: Sequence[Union[float, int]], py: Sequence[Union[float, int]], qx: Sequence[float], qy: Sequence[float], method: str, cov_xx1: Sequence[float], cov_yy1: Sequence[float], cov_xy1: Sequence[float], cov_xx2: Sequence[float], cov_yy2: Sequence[float], cov_xy2: Sequence[float]) -> Tuple[Sequence[float], Sequence[float]]

Beschreibung

vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2dVectorToProjHomMat2dvector_to_proj_hom_mat2d ermittelt aus mindestens 4 vorgegebenen Punktkorrespondenzen die homogene projektive Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d, die die obigen Gleichungen am besten erfüllt. Sind weniger als 4 Punktpaare (PxPxPxPxpxpx,PyPyPyPypypy), (QxQxQxQxqxqx,QyQyQyQyqyqy) angegeben, so ist eine solche Transformation nicht eindeutig bestimmbar. Sind genau 4 Punktpaare gegeben, so kann eine Matrix gefunden werden, die die Punkte genau ineinander überführt. Andernfalls wird die Matrix so gewählt, dass der Fehler möglichst klein wird. Um dieses Ergebnis zu erreichen, sind verschiedene Algorithmen verfügbar. Welches Verfahren verwendet werden soll, kann mittels des Parameters MethodMethodMethodMethodmethodmethod gesteuert werden. MethodMethodMethodMethodmethodmethod='dlt'"dlt""dlt""dlt""dlt""dlt" verwendet einen einfachen und schnellen, dafür aber ungenaueren Fehlerschätzalgorithmus, MethodMethodMethodMethodmethodmethod='normalized_dlt'"normalized_dlt""normalized_dlt""normalized_dlt""normalized_dlt""normalized_dlt" bietet im allgemeinen einen guten Kompromiss zwischen Geschwindigkeit und Genauigkeit, während MethodMethodMethodMethodmethodmethod='gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" eine mathematisch optimale, dafür aber langsamere, Optimierung durchführt.

Falls 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" verwendet wird und die Punkte mit einem Operator wie points_foerstnerpoints_foerstnerPointsFoerstnerPointsFoerstnerPointsFoerstnerpoints_foerstner, der die Kovarianzmatrix für jeden Punkt zurückliefert, extrahiert wurden, kann dies in der Berechnung berücksichtigt werden, indem die Kovarianzen in CovYY1CovYY1CovYY1CovYY1covYY1cov_yy1, CovXX1CovXX1CovXX1CovXX1covXX1cov_xx1, CovXY1CovXY1CovXY1CovXY1covXY1cov_xy1 für die Punkte des ersten Bildes und in CovYY2CovYY2CovYY2CovYY2covYY2cov_yy2, CovXX2CovXX2CovXX2CovXX2covXX2cov_xx2, CovXY2CovXY2CovXY2CovXY2covXY2cov_xy2 für die Punkte des zweiten Bildes übergeben werden. Die Kovarianzmatrizen sind symmetrische 2×2 Matrizen. CovXX1CovXX1CovXX1CovXX1covXX1cov_xx1/CovXX2CovXX2CovXX2CovXX2covXX2cov_xx2 und CovYY1CovYY1CovYY1CovYY1covYY1cov_yy1/CovYY2CovYY2CovYY2CovYY2covYY2cov_yy2 sind dabei die Diagonalelemente der Matrizen, während CovXY1CovXY1CovXY1CovXY1covXY1cov_xy1/CovXY2CovXY2CovXY2CovXY2covXY2cov_xy2 die Subdiagonalelemente angeben. Falls eine andere Methode als 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" verwendet wird oder die Kovarianzen unbekannt sind, können in den Kovarianzparametern leere Tupel übergeben werden.

Im Gegensatz zu hom_vector_to_proj_hom_mat2dhom_vector_to_proj_hom_mat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dhom_vector_to_proj_hom_mat2d können in vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2dVectorToProjHomMat2dvector_to_proj_hom_mat2d keine unendlich fernen Punkte zur Bestimmung der Transformation verwendet werden. Falls dies notwendig ist, muss hom_vector_to_proj_hom_mat2dhom_vector_to_proj_hom_mat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dhom_vector_to_proj_hom_mat2d verwendet werden. Falls die Korrespondenz zwischen den Punkten nicht bestimmt worden ist, sollte proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansacProjMatchPointsRansacproj_match_points_ransac zur Bestimmung der Korrespondenz sowie der Transformation verwendet werden.

Falls die zu transformierenden Punkte in Standard-Bildkoordinaten vorliegen, müssen die Zeilen-Koordinaten der Punkte in PxPxPxPxpxpx und die Spalten-Koordinaten in PyPyPyPypypy übergeben werden. Dies ist notwendig, um für das Bild ein rechtshändiges Koordinatensystem zu erhalten. Insbesondere werden dadurch Rotationen im korrekten Drehsinn ausgeführt. Die Koordinatenreihenfolge (x,y) der Matrizen entspricht dann der üblichen Koordinatenreihenfolge (Zeile,Spalte) der Bilder.

Achtung

Es ist zu beachten, dass homogene Transformationsmatrizen sich auf ein allgemeines rechtshändiges mathematisches Koordinatensystem beziehen. Falls eine homogene Transformationsmatrix zur Transformation von Bildern, Regionen, XLD-Konturen oder anderen Daten, die aus Bildern extrahiert wurden, verwendet werden soll, ist zu beachten, dass die Zeilenkoordinaten in den x-Koordinaten und die Spaltenkoordinaten in den y-Koordinaten übergeben werden müssen. Die Übergabereihenfolge von Zeilen- und Spaltenkoordinaten entspricht also der üblichen Reihenfolge (RowRowRowRowrowrow,ColumnColumnColumnColumncolumncolumn). Diese Konvention ist unerlässlich, um bei der Transformation von Bilddaten ein rechtshändiges Koordinatensystem zu erhalten, so dass z.B. insbesondere Rotationen in der mathematisch korrekten Drehrichtung ausgeführt werden.

Weiterhin ist zu beachten, dass, falls eine homogene Transformationsmatrix zur Transformation von Bildern, Regionen, XLD-Konturen oder anderen Daten, die aus Bildern extrahiert wurden, verwendet werden soll, angenommen wird, dass der Ursprung des Koordinatensystems der homogenen Transformationsmatrix in der linken oberen Ecke des Pixels liegt. Die Bildverarbeitungsoperatoren, die Punktkoordinaten zurückliefern, nehmen hingegen ein Koordinatensystem an, in dem der Ursprung in der Mitte eines Pixels liegt. Daher muss, um eine konsistente homogene Transformationsmatrix zu erhalten, 0.5 zu den Punktkoordinaten addiert werden, bevor die Transformation berechnet wird.

Ausführungsinformationen

Parameter

PxPxPxPxpxpx (input_control)  point.x-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Eingabepunkte in Bild 1 (Zeilenkoordinate).

PyPyPyPypypy (input_control)  point.y-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Eingabepunkte in Bild 1 (Spaltenkoordinate).

QxQxQxQxqxqx (input_control)  point.x-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Eingabepunkte in Bild 2 (Zeilenkoordinate).

QyQyQyQyqyqy (input_control)  point.y-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Eingabepunkte in Bild 2 (Spaltenkoordinate).

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

Schätzalgorithmus.

Defaultwert: 'normalized_dlt' "normalized_dlt" "normalized_dlt" "normalized_dlt" "normalized_dlt" "normalized_dlt"

Werteliste: 'dlt'"dlt""dlt""dlt""dlt""dlt", 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard", 'normalized_dlt'"normalized_dlt""normalized_dlt""normalized_dlt""normalized_dlt""normalized_dlt"

CovXX1CovXX1CovXX1CovXX1covXX1cov_xx1 (input_control)  real-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Varianz in Zeilenrichtung der Punkte in Bild 1.

Defaultwert: []

CovYY1CovYY1CovYY1CovYY1covYY1cov_yy1 (input_control)  real-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Varianz in Spaltenrichtung der Punkte in Bild 1.

Defaultwert: []

CovXY1CovXY1CovXY1CovXY1covXY1cov_xy1 (input_control)  real-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Kovarianz der Punkte in Bild 1.

Defaultwert: []

CovXX2CovXX2CovXX2CovXX2covXX2cov_xx2 (input_control)  real-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Varianz in Zeilenrichtung der Punkte in Bild 2.

Defaultwert: []

CovYY2CovYY2CovYY2CovYY2covYY2cov_yy2 (input_control)  real-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Varianz in Spaltenrichtung der Punkte in Bild 2.

Defaultwert: []

CovXY2CovXY2CovXY2CovXY2covXY2cov_xy2 (input_control)  real-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Kovarianz der Punkte in Bild 2.

Defaultwert: []

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

Homogene projektive Transformationsmatrix.

CovarianceCovarianceCovarianceCovariancecovariancecovariance (output_control)  real-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

9×9 Kovarianzmatrix der projektiven Transformationsmatrix.

Vorgänger

proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansacProjMatchPointsRansacproj_match_points_ransac, proj_match_points_ransac_guidedproj_match_points_ransac_guidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuidedproj_match_points_ransac_guided, points_foerstnerpoints_foerstnerPointsFoerstnerPointsFoerstnerPointsFoerstnerpoints_foerstner, points_harrispoints_harrisPointsHarrisPointsHarrisPointsHarrispoints_harris

Nachfolger

projective_trans_imageprojective_trans_imageProjectiveTransImageProjectiveTransImageProjectiveTransImageprojective_trans_image, projective_trans_image_sizeprojective_trans_image_sizeProjectiveTransImageSizeProjectiveTransImageSizeProjectiveTransImageSizeprojective_trans_image_size, projective_trans_regionprojective_trans_regionProjectiveTransRegionProjectiveTransRegionProjectiveTransRegionprojective_trans_region, projective_trans_contour_xldprojective_trans_contour_xldProjectiveTransContourXldProjectiveTransContourXldProjectiveTransContourXldprojective_trans_contour_xld, projective_trans_point_2dprojective_trans_point_2dProjectiveTransPoint2dProjectiveTransPoint2dProjectiveTransPoint2dprojective_trans_point_2d, projective_trans_pixelprojective_trans_pixelProjectiveTransPixelProjectiveTransPixelProjectiveTransPixelprojective_trans_pixel

Alternativen

hom_vector_to_proj_hom_mat2dhom_vector_to_proj_hom_mat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dhom_vector_to_proj_hom_mat2d, proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansacProjMatchPointsRansacproj_match_points_ransac, proj_match_points_ransac_guidedproj_match_points_ransac_guidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuidedproj_match_points_ransac_guided

Literatur

Richard Hartley, Andrew Zisserman: „Multiple View Geometry in Computer Vision“; Cambridge University Press, Cambridge; 2000.
Olivier Faugeras, Quang-Tuan Luong: „The Geometry of Multiple Images: The Laws That Govern the Formation of Multiple Images of a Scene and Some of Their Applications“; MIT Press, Cambridge, MA; 2001.

Modul

Calibration