bundles / skimage 0.26.1rc0.dev0 / skimage / transform / _geometric / FundamentalMatrixTransform
ABCMeta
skimage.transform._geometric:FundamentalMatrixTransform
source: /skimage/transform/_geometric.py
Signature
def FundamentalMatrixTransform(matrix = None, *, dimensionality = None)Summary
Fundamental matrix transformation.
Extended Summary
The fundamental matrix relates corresponding points between a pair of uncalibrated images. The matrix transforms homogeneous image points in one image to epipolar lines in the other image.
The fundamental matrix is only defined for a pair of moving images. 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 known, the essential matrix describes the metric relation between the two images (EssentialMatrixTransform).
Parameters
matrix: (3, 3) array_like, optionalFundamental matrix.
dimensionality: int, optionalFallback number of dimensions when
matrixnot specified, in which case, must equal 2 (the default).
Attributes
params: (3, 3) arrayFundamental matrix.
Notes
See [1] and [2] for details of the estimation procedure. [2] is a good place to start.
Examples
import numpy as np import skimage as ski✓
src = np.array([1.839035, 1.924743, 0.543582, 0.375221, 0.473240, 0.142522, 0.964910, 0.598376, 0.102388, 0.140092, 15.994343, 9.622164, 0.285901, 0.430055, 0.091150, 0.254594]).reshape(-1, 2) dst = np.array([1.002114, 1.129644, 1.521742, 1.846002, 1.084332, 0.275134, 0.293328, 0.588992, 0.839509, 0.087290, 1.779735, 1.116857, 0.878616, 0.602447, 0.642616, 1.028681]).reshape(-1, 2)✓
tform = ski.transform.FundamentalMatrixTransform.from_estimate( src, dst) tform.params✓
array([[-0.21785884, 0.41928191, -0.03430748],
[-0.07179414, 0.04516432, 0.02160726],
[ 0.24806211, -0.42947814, 0.02210191]])
Compute the Sampson distance:
tform.residuals(src, dst)
✓array([0.0053886 , 0.00526101, 0.08689701, 0.01850534, 0.09418259,
0.00185967, 0.06160489, 0.02655136])
Apply inverse transformation:
tform.inverse(dst)
✓array([[-0.0513591 , 0.04170974, 0.01213043],
[-0.21599496, 0.29193419, 0.00978184],
[-0.0079222 , 0.03758889, -0.00915389],
[ 0.14187184, -0.27988959, 0.02476507],
[ 0.05890075, -0.07354481, -0.00481342],
[-0.21985267, 0.36717464, -0.01482408],
[ 0.01339569, -0.03388123, 0.00497605],
[ 0.03420927, -0.1135812 , 0.02228236]])
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)`` is ``False``:
if tform: print("Estimation succeeded.") bad_src = np.ones((8, 2)) bad_tform = ski.transform.FundamentalMatrixTransform.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 # doctest: +IGNORE_EXCEPTION_DETAIL
✓Traceback (most recent call last):
File "<doctest skimage.transform._geometric:FundamentalMatrixTransform[0]>", line 1, in <module>
bad_tform.params # doctest: +IGNORE_EXCEPTION_DETAIL
^^^^^^^^^^^^^^^^
File "/opt/hostedtoolcache/Python/3.14.7/x64/lib/python3.14/site-packages/_skimage2/_shared/utils.py", line 546, in __getattr__
raise self.error_cls(msg)
_skimage2._shared.utils.FailedEstimationAccessError: FailedEstimation has no attribute 'params'. FundamentalMatrixTransform: Scaling failed for input points
Hint: You can check for a failed estimation by truth testing the returned object. For failed estimations, `bool(estimation_result)` will be `False`. E.g.
if not estimation_result:
raise RuntimeError(f'Failed estimation: {estimation_result}')
Aliases
skimage.transform.FundamentalMatrixTransform