This repository uses git patch
to implement ColmapForVisSat. Since ColmapForVisSat
is a full copy of Colmap, it is difficult to maintain. By relying on git apply <patch>
this repository offers a simpler approach to incorporate the latest changes of the original Colmap
library.
In contrast to the original ColmapForVisSat library, this repository supports CUDA 11.
Define two (temporary) variables storing the repository locations on disk:
PathToColmapForVisSatPatched="path/to/ColmapForVisSatPatched"
PathToColmapToBePatched="path/to/ColmapToBePatched"
Clone the repositories:
git clone https://github.com/SBCV/ColmapForVisSatPatched.git $PathToColmapForVisSatPatched
git clone https://github.com/colmap/colmap.git $PathToColmapToBePatched
Checkout the Colmap version compatible to the current patch files with:
cd $PathToColmapToBePatched
# Current patch files are created for 31df46c6c82bbdcaddbca180bc220d2eab9a1b5e (Mar 5, 2022)
git checkout 31df46c6c82bbdcaddbca180bc220d2eab9a1b5e
Ensure that apply_patches.sh
has execute permissions (ls -l $PathToColmapForVisSatPatched/apply_patches.sh
) - for example by running:
chmod +x $PathToColmapForVisSatPatched/apply_patches.sh
Finally, apply the satellite specific patches with:
$PathToColmapForVisSatPatched/apply_patches.sh $PathToColmapToBePatched
Note: Do NOT run apply_patches.sh
with sh $PathToColmapForVisSatPatched/apply_patches.sh
- this will not produce the required results! Do not worry about type warnings (e.g. warning: src/base/camera.cc has type 100644, expected 100755
).
- Run
sudo apt-get install libmetis-dev
- If anaconda/miniconda is installed, make sure to run
conda deactivate
before runningcmake
. - Follow the official install insctructions of Colmap for Linux.
If you want to create patch files for a more recent Colmap version, you may want to use the following approach:
First define some (temporary) environment variables:
PathToColmapForVisSatPatched="/path/to/ColmapForVisSatPatched"
PathToColmapLatest="path/to/ColmapLatest"
Clone the repositories:
git clone https://github.com/SBCV/ColmapForVisSatPatched.git $PathToColmapForVisSatPatched
git clone https://github.com/colmap/colmap.git $PathToColmapLatest
cd $PathToColmapLatest
If desired checkout a specific commit - for example:
git checkout 31df46c6c82bbdcaddbca180bc220d2eab9a1b5e
Try to apply the patches (this will probably not succeed, but it will show for which files the application of the corresponding patch failed).
$PathToColmapForVisSatPatched/apply_patches.sh $PathToColmapLatest
Example error:
error: patch failed: src/base/cost_functions.h:267
error: src/base/cost_functions.h: patch does not apply
Use Github to view the corresponding patch file (e.g. src__base__cost_functions.h.patch) - it will highlight the required additions in green. Copy the desired changes (i.e. the green parts) to corresponding place in the source code in $PathToColmapLatest
! (e.g. cost_functions.h)
Open $PathToColmapForVisSatPatched/create_patches.sh
and comment out all lines git diff ...
for which the application of the patch worked in the previous run.
Run the modified create_patches.sh
script. It will create a new set of patches in $PathToColmapForVisSatPatched/patches
overwriting previously outdated patches.
$PathToColmapForVisSatPatched/create_patches.sh $PathToColmapLatest
-
src/base/reconstruction.cc
-->Reconstruction::Normalize()
-->if (translation_applied && scale_applied) {
- add
const Eigen::Vector3d mean_coord = std::get<2>(bound);
const Eigen::Vector3d translation = mean_coord;
- add
-
src/controllers/bundle_adjustment.cc
-->void BundleAdjustmentController::Run() {
-->- can not uncomment
reconstruction_->Normalize();
, since line does not exist. - => uncomment
reconstruction_->Normalize();
insrc/ui/bundle_adjustment_widget.cc
- keep
reconstruction_->Normalize();
insrc/sfm/incremental_mapper.cc
, since these are not touched in the adapted colmap version
- can not uncomment
- src/base/reconstruction.cc --> void Reconstruction::WriteCamerasText() --> file << std::setprecision(PRECISION);
- src/base/reconstruction.cc --> void Reconstruction::WriteCamerasText() --> line << std::setprecision(PRECISION);
- src/base/reconstruction.cc --> void Reconstruction::WriteImagesText() --> file << std::setprecision(PRECISION);
- src/base/reconstruction.cc --> void Reconstruction::WriteImagesText() --> line << std::setprecision(PRECISION);
- src/base/reconstruction.cc --> void Reconstruction::WritePoints3DText() --> file << std::setprecision(PRECISION);
- src/base/reconstruction.cc --> void Reconstruction::WritePoints3DText() --> line << std::setprecision(PRECISION);
- src/mvs/math.h
src/mvs/patch_match_cuda.cu
--> Deletedreturn
in line 181/385