vector_to_fundamental_matrix_distortionT_vector_to_fundamental_matrix_distortionVectorToFundamentalMatrixDistortionVectorToFundamentalMatrixDistortionvector_to_fundamental_matrix_distortion (Operator)

Name

vector_to_fundamental_matrix_distortionT_vector_to_fundamental_matrix_distortionVectorToFundamentalMatrixDistortionVectorToFundamentalMatrixDistortionvector_to_fundamental_matrix_distortion — Bestimmung der Fundamental-Matrix und des radialen Verzeichnungskoeffizienten unter Verwendung vorgegebener Punktkorrespondenzen sowie Rekonstruktion der 3D Raumpunkte.

Signatur

vector_to_fundamental_matrix_distortion( : : Rows1, Cols1, Rows2, Cols2, CovRR1, CovRC1, CovCC1, CovRR2, CovRC2, CovCC2, ImageWidth, ImageHeight, Method : FMatrix, Kappa, Error, X, Y, Z, W)

Herror T_vector_to_fundamental_matrix_distortion(const Htuple Rows1, const Htuple Cols1, const Htuple Rows2, const Htuple Cols2, const Htuple CovRR1, const Htuple CovRC1, const Htuple CovCC1, const Htuple CovRR2, const Htuple CovRC2, const Htuple CovCC2, const Htuple ImageWidth, const Htuple ImageHeight, const Htuple Method, Htuple* FMatrix, Htuple* Kappa, Htuple* Error, Htuple* X, Htuple* Y, Htuple* Z, Htuple* W)

void VectorToFundamentalMatrixDistortion(const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& CovRR1, const HTuple& CovRC1, const HTuple& CovCC1, const HTuple& CovRR2, const HTuple& CovRC2, const HTuple& CovCC2, const HTuple& ImageWidth, const HTuple& ImageHeight, const HTuple& Method, HTuple* FMatrix, HTuple* Kappa, HTuple* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* W)

double HHomMat2D::VectorToFundamentalMatrixDistortion(const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& CovRR1, const HTuple& CovRC1, const HTuple& CovCC1, const HTuple& CovRR2, const HTuple& CovRC2, const HTuple& CovCC2, Hlong ImageWidth, Hlong ImageHeight, const HString& Method, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* W)

double HHomMat2D::VectorToFundamentalMatrixDistortion(const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& CovRR1, const HTuple& CovRC1, const HTuple& CovCC1, const HTuple& CovRR2, const HTuple& CovRC2, const HTuple& CovCC2, Hlong ImageWidth, Hlong ImageHeight, const char* Method, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* W)

double HHomMat2D::VectorToFundamentalMatrixDistortion(const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& CovRR1, const HTuple& CovRC1, const HTuple& CovCC1, const HTuple& CovRR2, const HTuple& CovRC2, const HTuple& CovCC2, Hlong ImageWidth, Hlong ImageHeight, const wchar_t* Method, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* W)   (Nur Windows)

static void HOperatorSet.VectorToFundamentalMatrixDistortion(HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, HTuple covRR1, HTuple covRC1, HTuple covCC1, HTuple covRR2, HTuple covRC2, HTuple covCC2, HTuple imageWidth, HTuple imageHeight, HTuple method, out HTuple FMatrix, out HTuple kappa, out HTuple error, out HTuple x, out HTuple y, out HTuple z, out HTuple w)

double HHomMat2D.VectorToFundamentalMatrixDistortion(HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, HTuple covRR1, HTuple covRC1, HTuple covCC1, HTuple covRR2, HTuple covRC2, HTuple covCC2, int imageWidth, int imageHeight, string method, out double error, out HTuple x, out HTuple y, out HTuple z, out HTuple w)

def vector_to_fundamental_matrix_distortion(rows_1: Sequence[Union[float, int]], cols_1: Sequence[Union[float, int]], rows_2: Sequence[Union[float, int]], cols_2: Sequence[Union[float, int]], cov_rr1: Sequence[Union[float, int]], cov_rc1: Sequence[Union[float, int]], cov_cc1: Sequence[Union[float, int]], cov_rr2: Sequence[Union[float, int]], cov_rc2: Sequence[Union[float, int]], cov_cc2: Sequence[Union[float, int]], image_width: int, image_height: int, method: str) -> Tuple[Sequence[float], float, float, Sequence[float], Sequence[float], Sequence[float], Sequence[float]]

Beschreibung

vector_to_fundamental_matrix_distortionvector_to_fundamental_matrix_distortionVectorToFundamentalMatrixDistortionVectorToFundamentalMatrixDistortionVectorToFundamentalMatrixDistortionvector_to_fundamental_matrix_distortion ermittelt aus vorgegebenen Punktkorrespondenzen (Rows1Rows1Rows1Rows1rows1rows_1,Cols1Cols1Cols1Cols1cols1cols_1), (Rows2Rows2Rows2Rows2rows2rows_2,Cols2Cols2Cols2Cols2cols2cols_2) die Fundamental-Matrix FMatrixFMatrixFMatrixFMatrixFMatrixfmatrix und den radialen Verzeichnungskoeffizienten KappaKappaKappaKappakappakappa , welche die Epipolargleichung am besten erfüllen. Hierbei sind und Bildpunkte, die durch Entzerrung der Eingabebildpunkte mit dem Divisionsmodell entstehen (siehe Kalibrierung): Hierbei bezeichnen und die verzerrten Bildpunkte relativ zum Bildmittelpunkt. vector_to_fundamental_matrix_distortionvector_to_fundamental_matrix_distortionVectorToFundamentalMatrixDistortionVectorToFundamentalMatrixDistortionVectorToFundamentalMatrixDistortionvector_to_fundamental_matrix_distortion nimmt also an, dass der Hauptpunkt, d.h. das Zentrum der radialen Verzeichnungen, im Bildmittelpunkt liegt.

Das zurückgelieferte KappaKappaKappaKappakappakappa kann dazu verwendet werden, Kameraparameter zu konstruieren, die zur Entzerrung von Bildern oder Bildpunkten verwendet werden können (siehe change_radial_distortion_cam_parchange_radial_distortion_cam_parChangeRadialDistortionCamParChangeRadialDistortionCamParChangeRadialDistortionCamParchange_radial_distortion_cam_par, change_radial_distortion_imagechange_radial_distortion_imageChangeRadialDistortionImageChangeRadialDistortionImageChangeRadialDistortionImagechange_radial_distortion_image und change_radial_distortion_pointschange_radial_distortion_pointsChangeRadialDistortionPointsChangeRadialDistortionPointsChangeRadialDistortionPointschange_radial_distortion_points):

Zu beachten bei den obigen Formeln ist die Position von Spalte bzw. Zeile in den Punktkoordinaten. Da die Fundamental-Matrix die projektive Beziehung zweier Stereobilder im 3D Raum wiedergibt, muss die X/Y Notation mit dem Kamerakoordinatensystem konform sein. (X,Y) Koordinaten entsprechen daher einem (Column,Row) Paar.

Für eine beliebige relative Lage der Kameras zueinander ist die minimale Anzahl an Punktkorrespondenzen neun. MethodMethodMethodMethodmethodmethod ist dann gleich 'linear'"linear""linear""linear""linear""linear" oder 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" zu wählen. Sind die linke und rechte Kamera identisch und ist zusätzlich die relative Lage zwischen den Kameras eine reine Translation, so ist MethodMethodMethodMethodmethodmethod gleich 'trans_linear'"trans_linear""trans_linear""trans_linear""trans_linear""trans_linear" oder 'trans_gold_standard'"trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard" zu wählen. In diesem speziellen Fall ist die minimale Anzahl an korrespondierenden Punkten nur vier.

Die Fundamental-Matrix wird so berechnet, dass ein Fehlermaß minimiert wird. Um dieses Ergebnis zu erreichen, sind verschiedene Algorithmen verfügbar. Welches Verfahren verwendet werden soll, kann ebenfalls mittels des Parameters MethodMethodMethodMethodmethodmethod gesteuert werden. Für MethodMethodMethodMethodmethodmethod gleich 'linear'"linear""linear""linear""linear""linear" bzw. 'trans_linear'"trans_linear""trans_linear""trans_linear""trans_linear""trans_linear" wird ein lineares Verfahren verwendet, das einen algebraischen Fehler basierend auf obigen Epipolargleichungen minimiert. Dieses Verfahren ist sehr schnell. Für den Fall der reinen Translation (MethodMethodMethodMethodmethodmethod = 'trans_linear'"trans_linear""trans_linear""trans_linear""trans_linear""trans_linear") liefert das lineare Verfahren genaue Ergebnisse für geringes bis mittleres Rauschen der Punktkoordinaten und für die meisten Verzeichnungen (außer sehr kleinen Verzeichnungen). Für eine beliebige Lage der Kameras (MethodMethodMethodMethodmethodmethod = 'linear'"linear""linear""linear""linear""linear") liefert das lineare Verfahren nur für sehr geringes Rauschen der Punktkoordinaten und hinreichend große Verzeichnungen genaue Ergebnisse. Für MethodMethodMethodMethodmethodmethod gleich 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" bzw. 'trans_gold_standard'"trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard" wird eine mathematisch optimale, dafür aber langsamere, Optimierung durchgeführt, die den geometrischen Reprojektionsfehler von rekonstruierten projektiven 3D Punkten minimiert. In diesem Fall werden neben der Fundamental-Matrix und dem radialen Verzeichnungskoeffizienten auch die projektiven Koordinaten (XXXXxx,YYYYyy,ZZZZzz,WWWWww) der rekonstruierten Punkte zurückgegeben. Für beliebige Lage der Kameras sollte im allgemeinen MethodMethodMethodMethodmethodmethod = 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" gewählt werden.

Falls die Methode 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" bzw. 'trans_gold_standard'"trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_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 CovRR1CovRR1CovRR1CovRR1covRR1cov_rr1, CovRC1CovRC1CovRC1CovRC1covRC1cov_rc1, CovCC1CovCC1CovCC1CovCC1covCC1cov_cc1 für die Punkte des ersten Bildes und in CovRR2CovRR2CovRR2CovRR2covRR2cov_rr2, CovRC2CovRC2CovRC2CovRC2covRC2cov_rc2, CovCC2CovCC2CovCC2CovCC2covCC2cov_cc2 für die Punkte des zweiten Bildes übergeben werden. Sind die Kovarianzen unbekannt und wird die Methode 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" bzw. 'trans_gold_standard'"trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard" verwendet, so werden zur Berechnung intern Einheits-Kovarianzmatrizen angenommen. Falls 'linear'"linear""linear""linear""linear""linear" bzw. 'trans_linear'"trans_linear""trans_linear""trans_linear""trans_linear""trans_linear" verwendet wird oder die Kovarianzen unbekannt sind, können in den Kovarianzparametern leere Tupel übergeben werden.

Die Größe ErrorErrorErrorErrorerrorerror ist ein Gütemaß für die Schätzung der Fundamental-Matrix und gibt den mittleren symmetrischen euklidischen Abstand in Pixeln zwischen den Punkten und ihren korrespondierenden Epipolarlinien an.

Sind die Korrespondenzen zwischen den Punkten noch nicht bekannt, so ist match_fundamental_matrix_distortion_ransacmatch_fundamental_matrix_distortion_ransacMatchFundamentalMatrixDistortionRansacMatchFundamentalMatrixDistortionRansacMatchFundamentalMatrixDistortionRansacmatch_fundamental_matrix_distortion_ransac zur Bestimmung der Korrespondenzen sowie der Stereo-Geometrie zu verwenden.

Ausführungsinformationen

Parameter

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

Eingabepunkte in Bild 1 (Zeilenkoordinate).

Restriktion: length(Rows1) >= 9 || length(Rows1) >= 4

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

Eingabepunkte in Bild 1 (Spaltenkoordinate).

Restriktion: length(Cols1) == length(Rows1)

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

Eingabepunkte in Bild 2 (Zeilenkoordinate).

Restriktion: length(Rows2) == length(Rows1)

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

Eingabepunkte in Bild 2 (Spaltenkoordinate).

Restriktion: length(Cols2) == length(Rows1)

CovRR1CovRR1CovRR1CovRR1covRR1cov_rr1 (input_control)  number-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Varianz in Zeilenrichtung der Punkte in Bild 1.

Defaultwert: []

CovRC1CovRC1CovRC1CovRC1covRC1cov_rc1 (input_control)  number-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Kovarianz der Punkte in Bild 1.

Defaultwert: []

CovCC1CovCC1CovCC1CovCC1covCC1cov_cc1 (input_control)  number-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Varianz in Spaltenrichtung der Punkte in Bild 1.

Defaultwert: []

CovRR2CovRR2CovRR2CovRR2covRR2cov_rr2 (input_control)  number-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Varianz in Zeilenrichtung der Punkte in Bild 2.

Defaultwert: []

CovRC2CovRC2CovRC2CovRC2covRC2cov_rc2 (input_control)  number-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Kovarianz der Punkte in Bild 2.

Defaultwert: []

CovCC2CovCC2CovCC2CovCC2covCC2cov_cc2 (input_control)  number-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Varianz in Spaltenrichtung der Punkte in Bild 2.

Defaultwert: []

ImageWidthImageWidthImageWidthImageWidthimageWidthimage_width (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Breite der Bilder, aus denen die Punkte extrahiert wurden.

Restriktion: ImageWidth > 0

ImageHeightImageHeightImageHeightImageHeightimageHeightimage_height (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Höhe der Bilder, aus denen die Punkte extrahiert wurden.

Restriktion: ImageHeight > 0

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

Schätzalgorithmus.

Defaultwert: 'gold_standard' "gold_standard" "gold_standard" "gold_standard" "gold_standard" "gold_standard"

Werteliste: 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard", 'linear'"linear""linear""linear""linear""linear", 'trans_gold_standard'"trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard", 'trans_linear'"trans_linear""trans_linear""trans_linear""trans_linear""trans_linear"

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

Berechnete Fundamental-Matrix.

KappaKappaKappaKappakappakappa (output_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Berechneter Verzeichnungskoeffizient.

ErrorErrorErrorErrorerrorerror (output_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Mittlerer quadratischer Epipolarabstand.

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

X-Koordinaten der rekonstruierten Punkte im projektiven Raum.

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

Y-Koordinaten der rekonstruierten Punkte im projektiven Raum.

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

Z-Koordinaten der rekonstruierten Punkte im projektiven Raum.

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

W-Koordinaten der rekonstruierten Punkte im projektiven Raum.

Vorgänger

match_fundamental_matrix_distortion_ransacmatch_fundamental_matrix_distortion_ransacMatchFundamentalMatrixDistortionRansacMatchFundamentalMatrixDistortionRansacMatchFundamentalMatrixDistortionRansacmatch_fundamental_matrix_distortion_ransac

Nachfolger

change_radial_distortion_cam_parchange_radial_distortion_cam_parChangeRadialDistortionCamParChangeRadialDistortionCamParChangeRadialDistortionCamParchange_radial_distortion_cam_par, change_radial_distortion_imagechange_radial_distortion_imageChangeRadialDistortionImageChangeRadialDistortionImageChangeRadialDistortionImagechange_radial_distortion_image, change_radial_distortion_pointschange_radial_distortion_pointsChangeRadialDistortionPointsChangeRadialDistortionPointsChangeRadialDistortionPointschange_radial_distortion_points, gen_binocular_proj_rectificationgen_binocular_proj_rectificationGenBinocularProjRectificationGenBinocularProjRectificationGenBinocularProjRectificationgen_binocular_proj_rectification

Alternativen

vector_to_fundamental_matrixvector_to_fundamental_matrixVectorToFundamentalMatrixVectorToFundamentalMatrixVectorToFundamentalMatrixvector_to_fundamental_matrix, vector_to_essential_matrixvector_to_essential_matrixVectorToEssentialMatrixVectorToEssentialMatrixVectorToEssentialMatrixvector_to_essential_matrix, vector_to_rel_posevector_to_rel_poseVectorToRelPoseVectorToRelPoseVectorToRelPosevector_to_rel_pose

Siehe auch

calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCamerascalibrate_cameras

Literatur

Richard Hartley, Andrew Zisserman: „Multiple View Geometry in Computer Vision“; Cambridge University Press, Cambridge; 2003.
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

3D Metrology