State-of-the-art homography estimators.
Project description
HomLib
C++ library for computing homographies with support in MATLAB and Python.
Solvers
This repository contains the following solvers for computing homographies with simultaneous radial distortion correction and/or incorporating IMU data.
| Authors (year) | Number of points | Minimal | Radial distortion coeff. | IMU data | General homography | Separarate intrinsic/extrinsic |
|---|---|---|---|---|---|---|
| Fitzgibbon (2001) | 5 | :heavy_check_mark: (e) | :heavy_check_mark: | |||
| 5 | :heavy_check_mark: (1) | :heavy_check_mark: | ||||
| Kukelova et al. (2015) | 5 | :heavy_check_mark: | :heavy_check_mark: (2) | :heavy_check_mark: | ||
| 6 | :heavy_check_mark: (2) | :heavy_check_mark: | ||||
| Valtonen Örnhag et al. (2020) | 4 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | ||
| Valtonen Örnhag et al. (2021) | 3 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | ||
| 4 | :heavy_check_mark: | :heavy_check_mark: (e) | :heavy_check_mark: | :heavy_check_mark: | ||
| Nakano (2024) | 5 | :heavy_check_mark: | :heavy_check_mark: (1) | :heavy_check_mark: | ||
| Wadenbäck et al. (2026) | 5 | :heavy_check_mark: | :heavy_check_mark: (1) | :heavy_check_mark: | ||
| 5 | :heavy_check_mark: | :heavy_check_mark: (e) | :heavy_check_mark: | |||
| 5 | :heavy_check_mark: | :heavy_check_mark: (2) | :heavy_check_mark: |
We use the following convention for the different cases: (1) - single-sided, (e) two-sided and equal, and (2) two-sided.
The solvers by Valtonen Örnhag et al. and Wadenbäck et al. are original implementations, the others are re-implementations. If you use the code in your work, please cite the respective article:
@InProceedings{fitzgibbon-etal-2001-cvpr,
author = {Fitzgibbon, Andrew},
title = {Simultaneous linear estimation of multiple view geometry and lens distortion},
booktitle = {Proceedings of the IEEE Computer Society Conference on Computer Vision and Pattern Recognitioni (CVPR)},
year = {2001},
}
@InProceedings{kukelova-etal-2015-cvpr,
author = {Kukelova, Zuzana and Heller, Jan and Bujnak, Martin and Pajdla, Tomas},
title = {Radial Distortion Homography},
booktitle = {Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
month = {June},
year = {2015}
}
@InProceedings{valtonen-ornhag-etal-2020-icpr,
author = {Valtonen~{\"O}rnhag, Marcus and Persson, Patrik and Wadenb{\"a}ck, M{\aa}rten and {\AA}str{\"o}m, Kalle and Heyden, Anders},
title = {Minimal Solvers for Indoor {UAV} Positioning},
booktitle = {Proceedings of the International Conference on Pattern Recognition (ICPR)},
month = {January},
year = {2021},
pages = {1136-1143}
}
@InProceedings{valtonen-ornhag-etal-2021-wacv,
author = {Valtonen~{\"O}rnhag, Marcus and Persson, Patrik and Wadenb{\"a}ck, M{\aa}rten and {\AA}str{\"o}m, Kalle and Heyden, Anders},
title = {Efficient Real-Time Radial Distortion Correction for {UAV}s},
booktitle = {Proceedings of the IEEE/CVF Winter Conference on Applications of Computer Vision (WACV)},
month = {January},
year = {2021},
pages = {1751-1760}
}
@InProceedings{nakano-2024-icpr,
author = {Nakano, Gaku},
title = {Inverse DLT Method for One-Sided Radial Distortion Homography},
booktitle = {Proceedings of the International Conference on Pattern Recognition (ICPR)},
year = {2024},
pages = {448-462}
}
@InProceedings{wadenback-etal-2026-3dv,
author = {Wadenb{\"a}ck, M{\aa}rten and Valtonen~{\"O}rnhag, Marcus and Edstedt, Johan},
title = {Radially Distorted Homographies, Revisited},
booktitle = {Proceedings of the International Conference on 3D Vision (3DV)},
year = {2026},
}
Dependencies
The source code depends on Eigen 3 (older versions not compatible). Installation for Ubuntu/Debian:
$ apt-get install libeigen3-dev
Furthermore, PoseLib is required. Follow the installation instruction in the repo.
If you want to use the solvers in an LOMSAC framework, we rely on RansacLib, which is included as a submodule. You can recursively clone it
git submodule update --init --recursive
Using the solver in MATLAB
(OUTDATED)
It is possible to MEX-compile the solver and use it in MATLAB. Check the
compile_mex.m function in the MATLAB directory. You may have to change the path to Eigen,
e.g. /usr/local/include/eigen3.
Using the solver in Python
Note: Solvers with known IMU data is not yet supported in the python package.
$ pip install homlib
(BELOW IS DEPREACATED) The official python repository is python-homlib. A pre-alpha release is available at PyPi, and can be installed using
About the solvers
Many of the solvers were generated using the automatic generator proposed by Larsson et al. "Efficient Solvers for Minimal Problems by Syzygy-based Reduction" (CVPR 2017)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file homlib-0.1.1rc6.tar.gz.
File metadata
- Download URL: homlib-0.1.1rc6.tar.gz
- Upload date:
- Size: 2.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
12d348e9a820c3c6f47ec227d5be3723b0178fb7a4d0450a091ea32ea5770356
|
|
| MD5 |
b2fd008f629e06b4302c8b4cdc0a14fc
|
|
| BLAKE2b-256 |
ffdbb17421564c0767ef7aceb53c62ad91d3c70ca2ecfb6e75f5049a9fa3860e
|
Provenance
The following attestation bundles were made for homlib-0.1.1rc6.tar.gz:
Publisher:
main.yml on marcusvaltonen/HomLib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homlib-0.1.1rc6.tar.gz -
Subject digest:
12d348e9a820c3c6f47ec227d5be3723b0178fb7a4d0450a091ea32ea5770356 - Sigstore transparency entry: 1199162259
- Sigstore integration time:
-
Permalink:
marcusvaltonen/HomLib@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Branch / Tag:
refs/tags/v0.1.1-rc6 - Owner: https://github.com/marcusvaltonen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yml@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Trigger Event:
push
-
Statement type:
File details
Details for the file homlib-0.1.1rc6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: homlib-0.1.1rc6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 858.8 kB
- Tags: CPython 3.14t, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e7b7a40c08219f8324567afe6664e658e8f7f5e3c78e32ebdd35a567df1e68fc
|
|
| MD5 |
4e5a2bf3264a685a6d01fa9791b9856b
|
|
| BLAKE2b-256 |
2e2e010ecea529a5562234b7c34ffdba05b16efd1eb7e08d95353c10ae469345
|
Provenance
The following attestation bundles were made for homlib-0.1.1rc6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
main.yml on marcusvaltonen/HomLib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homlib-0.1.1rc6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
e7b7a40c08219f8324567afe6664e658e8f7f5e3c78e32ebdd35a567df1e68fc - Sigstore transparency entry: 1199162370
- Sigstore integration time:
-
Permalink:
marcusvaltonen/HomLib@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Branch / Tag:
refs/tags/v0.1.1-rc6 - Owner: https://github.com/marcusvaltonen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yml@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Trigger Event:
push
-
Statement type:
File details
Details for the file homlib-0.1.1rc6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: homlib-0.1.1rc6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 856.5 kB
- Tags: CPython 3.14, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4041e969bd58ff68e4ad20185ac5ef1f7952020d2c657c56ec48cdefdc11a10
|
|
| MD5 |
9976edd590e455679ba48859214921aa
|
|
| BLAKE2b-256 |
860ce68e2d882a2e5e8fee683fcfc7fa3b325b57d7515366ee47c68a9ac20390
|
Provenance
The following attestation bundles were made for homlib-0.1.1rc6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
main.yml on marcusvaltonen/HomLib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homlib-0.1.1rc6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
a4041e969bd58ff68e4ad20185ac5ef1f7952020d2c657c56ec48cdefdc11a10 - Sigstore transparency entry: 1199162433
- Sigstore integration time:
-
Permalink:
marcusvaltonen/HomLib@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Branch / Tag:
refs/tags/v0.1.1-rc6 - Owner: https://github.com/marcusvaltonen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yml@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Trigger Event:
push
-
Statement type:
File details
Details for the file homlib-0.1.1rc6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: homlib-0.1.1rc6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 855.9 kB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aae7ee11dcbcf5cc51daa703bf84b0859b38a3658373639c81b96d7f09339397
|
|
| MD5 |
08a1c59af30dccec694510e627d34a5a
|
|
| BLAKE2b-256 |
846639b03d5a159a21c4b382a0b84df3b2172aa73c49e5b2125df5d6ad7cd26d
|
Provenance
The following attestation bundles were made for homlib-0.1.1rc6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
main.yml on marcusvaltonen/HomLib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homlib-0.1.1rc6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
aae7ee11dcbcf5cc51daa703bf84b0859b38a3658373639c81b96d7f09339397 - Sigstore transparency entry: 1199162294
- Sigstore integration time:
-
Permalink:
marcusvaltonen/HomLib@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Branch / Tag:
refs/tags/v0.1.1-rc6 - Owner: https://github.com/marcusvaltonen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yml@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Trigger Event:
push
-
Statement type:
File details
Details for the file homlib-0.1.1rc6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: homlib-0.1.1rc6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 855.8 kB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab5d970c59246f23a91b91d7fe6fb1da2b2668c5b307c1c76a9c44c53c0012bd
|
|
| MD5 |
e507df082891676dde8141060a961cc5
|
|
| BLAKE2b-256 |
a0f2e518835a31b20dc06907d18d7acb429c1886b4e1476025937e3c43d682b9
|
Provenance
The following attestation bundles were made for homlib-0.1.1rc6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
main.yml on marcusvaltonen/HomLib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homlib-0.1.1rc6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
ab5d970c59246f23a91b91d7fe6fb1da2b2668c5b307c1c76a9c44c53c0012bd - Sigstore transparency entry: 1199162400
- Sigstore integration time:
-
Permalink:
marcusvaltonen/HomLib@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Branch / Tag:
refs/tags/v0.1.1-rc6 - Owner: https://github.com/marcusvaltonen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yml@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Trigger Event:
push
-
Statement type:
File details
Details for the file homlib-0.1.1rc6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: homlib-0.1.1rc6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 854.3 kB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e984fd456bbb0ecf6541ed61736dec565a2f96a94d7e9431904de71b762133d
|
|
| MD5 |
848f56bdd1799851299672431e60205f
|
|
| BLAKE2b-256 |
8a30ec3b9b0c0e8a0dd61998429593a9f140b7cb33bb84772665b9ef96202b04
|
Provenance
The following attestation bundles were made for homlib-0.1.1rc6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
main.yml on marcusvaltonen/HomLib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homlib-0.1.1rc6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
4e984fd456bbb0ecf6541ed61736dec565a2f96a94d7e9431904de71b762133d - Sigstore transparency entry: 1199162470
- Sigstore integration time:
-
Permalink:
marcusvaltonen/HomLib@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Branch / Tag:
refs/tags/v0.1.1-rc6 - Owner: https://github.com/marcusvaltonen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yml@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Trigger Event:
push
-
Statement type:
File details
Details for the file homlib-0.1.1rc6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: homlib-0.1.1rc6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 853.1 kB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b9864fc8a74df5a120a86468af52389cc800877845f213dd17a352844825075
|
|
| MD5 |
cb664eabaa1a444bc82201687337ca78
|
|
| BLAKE2b-256 |
d3a189bb2ed6bcc4e1b52dc1db44e41b42a1a0579a56c8655e5a6ac7e878c8ba
|
Provenance
The following attestation bundles were made for homlib-0.1.1rc6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
main.yml on marcusvaltonen/HomLib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homlib-0.1.1rc6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
3b9864fc8a74df5a120a86468af52389cc800877845f213dd17a352844825075 - Sigstore transparency entry: 1199162336
- Sigstore integration time:
-
Permalink:
marcusvaltonen/HomLib@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Branch / Tag:
refs/tags/v0.1.1-rc6 - Owner: https://github.com/marcusvaltonen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yml@a5903397afd26e42e8f1907a6ddd0d68877e923b -
Trigger Event:
push
-
Statement type: