EFTDEM is a project done as part of the above mentioned seminar in the summer term of 2023. Its goal was to enable efficient filling of voids in point cloud data of digital elevation models using OpenGL and different filling algorithms. Data ingest is tightly coupled to the point cloud format used during this seminar.
Provide exactly one .yaml config of the type presented below as a command line argument.
Provide exactly one .tiff (must be tiff, not tif) followed by exactly one .yaml config of the type presented below as a command line argument.
Provide at least two .yaml configs of the type presented below.
CloudReaderOptions:
pointCloudPath: "../resources/pointCloud.txt"
# Currently implemented: mobileMapping, groundRadar
pointCloudType: mobileMapping
CloudSorterOptions:
pixelPerUnit: 5
#pixelPerUnitX: 5 ### optional, remove pixelPerUnit if you want to use this
#pixelPerUnitY: 5 ### optional, remove pixelPerUnit if you want to use this
useGPU: true
CloudRasterizerOptions:
useGPU: true
HeightMapFillerOptions:
useGPU: true
# Currently implemented: closingFilter, inverseDistanceWeightedFilter, radialFiller, gradientFiller, dummy (use dummy to output the unfilled rasterized version)
filler: inverseDistanceWeightedFilter
# for closingFilter, inverseDistanceWeightedFilter and gradientFiller
kernelBasedFilterOptions:
# gradientFiller will only use the first kernelSize
kernelSizes:
- 5
- 25
- 50
batchSize: 1024 # optional, if not set will default to 0 (automatically trying to find possible batch size)
# for radialFiller
radialFillerOptions:
maxHoleRadius: 50
HeightMapWriterOptions:
destinationPath: "../resources/map"
writeLowDepth: true
betterCompression: false # optional, will default to "false". If true, GDAL will use LZMA compression, if false, LZW.
# Using LZMA will reduce file size significantly, however, the export will take a much extended
# amount of time. Also, using LZMA max break compatibility with standard image viewers. You may
# use software such as QGIS to mitigate this issue.
OpenGLOptions:
shaderDirectory: "../shaders"
# for layer-wise comparison
ComparisonOptions:
destinationPath: "../resources/"
threshold: 8.336743E-09
- An OpenGL 4.3 or greater capable combination of GPU and graphics driver
- Lots of RAM
- EFTDEM uses 64 bit doubles and 32 bit floats for the values of points and height data
- Optimization of computation time requires lots of (shared) GPU memory
You may choose to provide a built version of all dependencies listed below yourself. For added convenience, we also provide installation scripts that fetch and build these dependencies for you. As a last step, these scripts also set up a valid CMake project for EFTDEM while copying all necessary shared libraries. For all systems, these scripts require CMake and git.
You may run build_deps.bat. The installation script requires CMake to be installed in the system PATH,
git, PowerShell and Visual Studio 2022.
Running the script will create a PowerShell instance that bypasses script execution policies and run .build_deps.ps1.
This will clone all necessary dependencies from GitHub and compile them into a directory called .deps
. GDAL will be installed via vcpkg.
Lastly, the script will execute .build_config.ps1 which will set up a valid CMake project for
EFTDEM with the build-directory specified as build
.
You may run build_deps.sh. The installation script requires CMake and git to be installed in the system PATH,
as well as a working C++ compiler.
The script will clone all necessary dependencies from GitHub and compile them into a directory called "deps". GDAL will be installed via vcpkg.
Lastly, the script will execute build_config.sh which will set up a valid CMake project for
EFTDEM with the build-directories specified as build-debug
, build-debug-coverage
and build-release
.
GDAL
glfw
glbinding
magic_enum
yaml-cpp
OpenGL
- When executing shaders on the GPU, Windows may terminate the graphics driver when a single compute invocations exceeds
a certain time limit (usually 2 seconds). This may lead to a program crash or visual artifacts in the resulting output.
- Fix: Specify a smaller
batchSize
in your config or setbatchSize=0
to trigger automatic testing for a good batch size (note: automatic testing may conclude with batch sizes that are smaller than technically possible. This leads to decreased performance. In rare cases automatic testing may also still choose batch sizes that are too large.)
- Fix: Specify a smaller
- EFTDEM may crash in either scenario:
- Amount of points in the specified point cloud file is too great for
std::vector
allocation with your current setup- Fix: Tile the data into multiple files and run EFTDEM on them seperately.
- Resolution specified in the config is too great for GPU buffers or
std::vector
allocations- Fix: Reduce either
pixelPerUnitX
orpixelPerUnitY
, or both. You may also tile your data as described above. In that case, make sure to sort the point cloud file in at least thex
ory
axis before proceeding with the tiling operation.
- Fix: Reduce either
- Amount of points in the specified point cloud file is too great for