Skip to main content

State-of-the-art homography estimators.

Project description

HomLib

GitHub release (latest by date) GitHub

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

homlib-0.1.1rc6.tar.gz (2.0 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

homlib-0.1.1rc6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (858.8 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

homlib-0.1.1rc6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (856.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

homlib-0.1.1rc6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (855.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

homlib-0.1.1rc6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (855.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

homlib-0.1.1rc6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (854.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

homlib-0.1.1rc6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (853.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

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

Hashes for homlib-0.1.1rc6.tar.gz
Algorithm Hash digest
SHA256 12d348e9a820c3c6f47ec227d5be3723b0178fb7a4d0450a091ea32ea5770356
MD5 b2fd008f629e06b4302c8b4cdc0a14fc
BLAKE2b-256 ffdbb17421564c0767ef7aceb53c62ad91d3c70ca2ecfb6e75f5049a9fa3860e

See more details on using hashes here.

Provenance

The following attestation bundles were made for homlib-0.1.1rc6.tar.gz:

Publisher: main.yml on marcusvaltonen/HomLib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

File hashes

Hashes for homlib-0.1.1rc6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e7b7a40c08219f8324567afe6664e658e8f7f5e3c78e32ebdd35a567df1e68fc
MD5 4e5a2bf3264a685a6d01fa9791b9856b
BLAKE2b-256 2e2e010ecea529a5562234b7c34ffdba05b16efd1eb7e08d95353c10ae469345

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

File hashes

Hashes for homlib-0.1.1rc6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a4041e969bd58ff68e4ad20185ac5ef1f7952020d2c657c56ec48cdefdc11a10
MD5 9976edd590e455679ba48859214921aa
BLAKE2b-256 860ce68e2d882a2e5e8fee683fcfc7fa3b325b57d7515366ee47c68a9ac20390

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

File hashes

Hashes for homlib-0.1.1rc6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 aae7ee11dcbcf5cc51daa703bf84b0859b38a3658373639c81b96d7f09339397
MD5 08a1c59af30dccec694510e627d34a5a
BLAKE2b-256 846639b03d5a159a21c4b382a0b84df3b2172aa73c49e5b2125df5d6ad7cd26d

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

File hashes

Hashes for homlib-0.1.1rc6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ab5d970c59246f23a91b91d7fe6fb1da2b2668c5b307c1c76a9c44c53c0012bd
MD5 e507df082891676dde8141060a961cc5
BLAKE2b-256 a0f2e518835a31b20dc06907d18d7acb429c1886b4e1476025937e3c43d682b9

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

File hashes

Hashes for homlib-0.1.1rc6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4e984fd456bbb0ecf6541ed61736dec565a2f96a94d7e9431904de71b762133d
MD5 848f56bdd1799851299672431e60205f
BLAKE2b-256 8a30ec3b9b0c0e8a0dd61998429593a9f140b7cb33bb84772665b9ef96202b04

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

File hashes

Hashes for homlib-0.1.1rc6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3b9864fc8a74df5a120a86468af52389cc800877845f213dd17a352844825075
MD5 cb664eabaa1a444bc82201687337ca78
BLAKE2b-256 d3a189bb2ed6bcc4e1b52dc1db44e41b42a1a0579a56c8655e5a6ac7e878c8ba

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page