Implementation of the AAAI 2025 paper Object-level Geometric Structure Preserving for Natural Image Stitching (Unofficial Port).
This README is rewritten for this fork based on commit history since 98828c91b6db825ec3ec4aad698e03653f319e3a, with emphasis on required engineering changes.
-
Migrated from manual
.slnmanagement to unified CMake builds.- Added top-level and per-module
CMakeLists.txt. - Split
Debugger/Feature/Mesh/Stitching/Util/saminto static libraries and linked them centrally. - Why necessary: better maintainability and reproducible Linux/WSL/CI builds.
- Added top-level and per-module
-
Added CMake presets and vcpkg manifest workflow.
- Added
CMakePresets.json,CMakeUserPresets.json,vcpkg.json, andvcpkg-configuration.json. - Why necessary: standardized setup and easier onboarding on new machines.
- Added
-
Updated dependency strategy.
- vcpkg now manages
gflags,vlfeat, andeigen3. eigen3is pinned to3.4.0via override.onnxruntimeis no longer pulled through manifest and should be provided as a local/system CMake package.- Why necessary: improves dependency resolution reliability across platforms.
- vcpkg now manages
-
Refactored linking and enabled OpenMP.
- Added
find_package(OpenMP REQUIRED)in root CMake. - Submodules now use explicit
target_link_librariesdependencies. - Why necessary: avoids hidden linker issues and ensures parallel-related paths build correctly.
- Added
-
Cross-platform cleanup (removed Windows-specific artifacts).
- Replaced directory creation with
mkdir(path, 0755)inStitching/Parameter.cpp. - Removed
VlFeat.propsandvl.dllfrom repository. - Removed bundled
dirent.hand switched to system header usage. - Why necessary: native Linux build compatibility without platform-bound binaries.
- Replaced directory creation with
-
Header/include cleanup and formatting fixes.
- Adjusted include paths and Eigen geometry-related headers.
- Why necessary: reduces compiler-dependent include/symbol issues.
- Ubuntu 22.04 LTS (container or whatever else)
- CMake >= 3.22
- Ninja
- GCC/G++ (current preset defaults to
gcc-9/g++-9, not guranteed to work with newer versions due to potential C++ grammar changes) - OpenCV (4.x recommended)
- ONNX Runtime (must be discoverable by
find_package(onnxruntime CONFIG REQUIRED)) - vcpkg (for
gflags,vlfeat,eigen3)
- Set vcpkg root:
export VCPKG_ROOT=/root/vcpkg- Configure:
cmake --preset vcpkg- Build:
cmake --build build -j- Run:
./build/mainIf CMake cannot find OpenCV or ONNX Runtime, compile and install them manually with the .pc files or CMake config files properly set up.
-
StitchBench
- Sample pair in
./input-data/AANAP-01_skyline. - Full dataset: https://huggingface.co/datasets/RussRobin/StitchBench
- Sample pair in
-
Aerial234
The repository includes sam/ and sam.ipynb. For SAM-related reproduction, ensure ONNX model paths and runtime I/O expectations match your local setup.
@inproceedings{cai2025object,
title={Object-level geometric structure preserving for natural image stitching},
author={Cai, Wenxiao and Yang, Wankou},
booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
volume={39},
number={2},
pages={1926--1934},
year={2025}
}@article{cai2023uav,
title={UAV image stitching by estimating orthograph with RGB cameras},
author={Cai, Wenxiao and Du, Songlin and Yang, Wankou},
journal={Journal of Visual Communication and Image Representation},
volume={94},
pages={103835},
year={2023},
publisher={Elsevier}
}If you have questions, feel free to open an issue.