skimage2.transform.EssentialMatrixTransform#
- class skimage2.transform.EssentialMatrixTransform(*, rotation=None, translation=None, matrix=None, dimensionality=None)[source]#
Bases:
FundamentalMatrixTransformEssential matrix transformation.
The essential matrix relates corresponding points between a pair of calibrated images. The matrix transforms normalized, homogeneous image points in one image to epipolar lines in the other image.
The essential matrix is only defined for a pair of moving images capturing a non-planar scene. In the case of pure rotation or planar scenes, the homography describes the geometric relation between two images (
ProjectiveTransform). If the intrinsic calibration of the images is unknown, the fundamental matrix describes the projective relation between the two images (FundamentalMatrixTransform).- Parameters:
- rotation(3, 3) array_like, optional
Rotation matrix of the relative camera motion.
- translation(3, 1) array_like, optional
Translation vector of the relative camera motion. The vector must have unit length.
- matrix(3, 3) array_like, optional
Essential matrix.
- dimensionalityint, optional
Fallback number of dimensions when
matrixnot specified, in which case, must equal 2 (the default).
- Attributes:
- params(3, 3) array
Essential matrix.
References
[1]Hartley, Richard, and Andrew Zisserman. Multiple view geometry in computer vision. Cambridge university press, 2003.
Examples
>>> import numpy as np >>> import _skimage2 as ski2 >>> >>> tform = ski2.transform.EssentialMatrixTransform( ... rotation=np.eye(3), translation=np.array([0, 0, 1]) ... ) >>> tform.params array([[ 0., -1., 0.], [ 1., 0., 0.], [ 0., 0., 0.]]) >>> src = np.array([[ 1.839035, 1.924743], ... [ 0.543582, 0.375221], ... [ 0.47324 , 0.142522], ... [ 0.96491 , 0.598376], ... [ 0.102388, 0.140092], ... [15.994343, 9.622164], ... [ 0.285901, 0.430055], ... [ 0.09115 , 0.254594]]) >>> dst = np.array([[1.002114, 1.129644], ... [1.521742, 1.846002], ... [1.084332, 0.275134], ... [0.293328, 0.588992], ... [0.839509, 0.08729 ], ... [1.779735, 1.116857], ... [0.878616, 0.602447], ... [0.642616, 1.028681]]) >>> tform = ski2.transform.EssentialMatrixTransform.from_estimate(src, dst) >>> tform.residuals(src, dst) array([0.42455187, 0.01460448, 0.13847034, 0.12140951, 0.27759346, 0.32453118, 0.00210776, 0.26512283])
The estimation can fail - for example, if all the input or output points are the same. If this happens, you will get a transform that is not “truthy” - meaning that
bool(tform)isFalse:>>> # A successfully estimated model is truthy (applying ``bool()`` >>> # gives ``True``): >>> if tform: ... print("Estimation succeeded.") Estimation succeeded. >>> # Not so for a degenerate transform with identical points. >>> bad_src = np.ones((8, 2)) >>> bad_tform = ski2.transform.EssentialMatrixTransform.from_estimate( ... bad_src, dst) >>> if not bad_tform: ... print("Estimation failed.") Estimation failed.
Trying to use this failed estimation transform result will give a suitable error:
>>> bad_tform.params Traceback (most recent call last): ... FailedEstimationAccessError: No attribute "params" for failed estimation ...
- property dimensionality#
- estimate(src, dst)[source]#
Estimate essential matrix using 8-point algorithm.
Deprecated since version 0.26:
estimateis deprecated since version 0.26 and will be removed in version 2.2. Please useEssentialMatrixTransform.from_estimateclass constructor instead.The 8-point algorithm requires at least 8 corresponding point pairs for a well-conditioned solution, otherwise the over-determined solution is estimated.
- Parameters:
- srcarray_like of shape (N, 2)
Source coordinates.
- dstarray_like of shape (N, 2)
Destination coordinates.
- Returns:
- successbool
True, if model estimation succeeds.
- classmethod from_estimate(src, dst)[source]#
Estimate essential matrix using 8-point algorithm.
The 8-point algorithm requires at least 8 corresponding point pairs for a well-conditioned solution, otherwise the over-determined solution is estimated.
- Parameters:
- srcarray_like of shape (N, 2)
Source coordinates.
- dstarray_like of shape (N, 2)
Destination coordinates.
- Returns:
- tfSelf or
FailedEstimation An instance of the transformation if the estimation succeeded. Otherwise, we return a special
FailedEstimationobject to signal a failed estimation. Testing the truth value of the failed estimation object will returnFalse. E.g.tf = EssentialMatrixTransform.from_estimate(...) if not tf: raise RuntimeError(f"Failed estimation: {tf}")
- tfSelf or
- Raises:
- ValueError
If
srchas fewer than 8 rows.
- classmethod identity(dimensionality=None)[source]#
Identity transform
- Parameters:
- dimensionality{None, 2}, optional
This transform only allows dimensionality of 2, where None corresponds to 2. The parameter exists for compatibility with other transforms.
- Returns:
- tformtransform
Transform such that
np.all(tform(pts) == pts).
- property inverse#
Return a transform object representing the inverse.
See Hartley & Zisserman, Ch. 8: Epipolar Geometry and the Fundamental Matrix, for an explanation of why F.T gives the inverse.
- residuals(src, dst)[source]#
Compute the Sampson distance.
The Sampson distance is the first approximation to the geometric error.
- Parameters:
- srcndarray of shape (N, 2)
Source coordinates.
- dstndarray of shape (N, 2)
Destination coordinates.
- Returns:
- residualsndarray of shape (N,)
Sampson distance.
- scaling = 'rms'#