Note: CI only tests ubuntu and windows as I am unable to get CI to successfully build PyPlot under macOS. This code is developed under macOS and tests pass.
Using the package manager
pkg> add ImageProjectiveGeometry
help?> ImageProjectiveGeometry # Lists a summary of the package functions
On Julia versions >=1.9, the PyPlot
package is not added automatically anymore, but used as a weak dependency. To get the plotting functionality back, import PyPlot
together with ImageProjectiveGeometry
like this:
using PyPlot
using ImageProjectiveGeometry
This Image Projective Geometry package is intended as a starting point for the development of a library of projective geometry functions for computer vision in Julia.
Currently the package consists of a number of components which ultimately could/should be separated off into individual packages or contributed to other existing packages. Also, some of these functions, no doubt, duplicate existing functions in other packages and these should be eventually rationalised. However at this stage, given that Julia and its packages are still subject to some change, I have chosen to keep all these components in this package to minimise external dependencies and make it as self contained as possible.
- projective Defines a camera structure, implements image projection functions, functions for computing homographies and fundamental matrices, stereo solution, etc.
- cornerfeatures Implementations of a number of corner detectors. Note some of these duplicate what is available in the Images package.
- ransac A generic implementation of RANSAC along with a collection of specific functions that use RANSAC for robust estimation of homographies and fundamental matrices, and for fitting lines and planes etc.
- transforms Functions for constructing, applying, and decomposing homogeneous transforms, angle-axis descriptors, and quaternions.
- utilities Miscellaneous image processing functions including nonmaximal suppression, image derivative computation and morphological dilation and erosion using rectangular and octagonal structuring elements. There is also a basic correlation matcher.
- geometry Functions for some basic geometric operations: minimum distance between 3D rays, intersection of circles, convex polygons etc.
- ransacdemo Functions demonstrating the use of ransac() to fit lines, planes, fundamental matrices and homographies.
Also, within src, there are demo scripts for the different corner detectors and the morphological functions.
-
There is much that is missing. For example there is no code for camera calibration, computation of trifocal tensors, or bundle adjustment. While there is code for detecting corners there is nothing for matching them other than a basic correlation matcher, though feature matching probably belongs in its own package(s)
-
These functions are mostly ported from MATLAB code at http://www.peterkovesi.com/matlabfns Accordingly some of the code is still MATLABesque in nature. There are, no doubt, many optimisations that could be made and type instabilities to be eliminated. Pull requests to make the code more Julian are welcome.
- The Fundamental Matrix Song by Daniel Wedge
- The RANSAC Song by Daniel Wedge