Challenge Overview
1. Context
Project Context
This is the first challenge in a brand new project, which aims to build an application that can perform operation of large 3D Point Cloud File, and produce resultant point clouds as output.
Challenge Context
Within the project context mentioned above, the current challenge aims to start building an application that takes two point cloud files (in .e57 file format) as input and calculates the difference between the two. The tool is also expected to configurable (more details on the configurability discussed ahead). The application can either be CLI or GUI based.2. Challenge Details
- The tool should take two point cloud files as input (should be .e57 file type), pass the tuning parameters with, and generate the difference between the two point clouds.
- After finding the difference, it should return an output point cloud file. By difference, we mean the delta or the change that can be noticed between the two.
- In addition to the above output, it should also return a 'reconstructed' point cloud file, i.e. base point cloud + the calculated 'difference'. Here which cloud file will be used as the base should be taken as an input in the tool. By default, the file with filename appearing first in alphabetical order should be treat as the base if the base is not indicated in the input.
- If preferable for any case, the output can also be in .LAS file format.
- Important note on configurability - the code should be as configurable as much as possible. We don't have any specific instruction of the kinds of configurability that's expected, but some configurations can be:
- ability to increase or decrease the minimum resolution (this can be used to make the tool faster at the cost of some inaccuracy)
- distance/area for change tolerance (eg scale 1cm - 1m)
- Volume points changes (eg scale 1 - 100,000)
- Basically, anything that the competitors think can be made configurable, should be made configurable, and hence any kind of hardcoding should be avoided.
Introduction to Point Clouds
For basic introduction to point clouds, refer to its wikipedia article and this pretty informative video we found on the web (the video makers are not related to the client):
Provided Dataset
The dataset provided by the client contains two point cloud files. The two files can be downloaded at this forum link.It should be noted that only one pair of input files have been provided by the client. Your submission should include the output files generated using these two files as input.
Additional Dataset
Because the provided dataset and the two files are of large size, it is strongly advised that the competitors find and download smaller sized point cloud files, and use that for quick testing. Once that basic algorithm is ready, it can be tested and tuned using the larger dataset provided by the client.Programming Language
Any major programming language like Python, Javascript, Java, C, C++ is acceptable. For any other language, please seek a confirmation in the forum.Individual Requirements
The goal of this challenge is to build a command line tool (graphical UI based tools are also acceptable), that fulfills the following Requirements:Ability to Handle Large Input Files
One of the key areas the competitors are expected to fulfill it to ensure that the code has the ability to handle large files (each file can be around 50GB). Hence this consideration should be kept in mind at all times during the application development.Background on Client Use-case
The client has industrial facilities with heavy machinery that are 3D scanned with the help of devices like LiDAR at regular intervals. The obtained point cloud files, which are basically re=construction of machineries via 3D models are then used for variety of purposed. One of the important purposes is to find what has changed near or around the machinery etc.These scans are currently used by the client using expensive commercial tool or cloud based tools to perform analyses such as: see if some lever has been pull, check if some tool or object has been left near the machinery, check if any object was moved from one place to another etc.
The client would like us to help them do this job more easily - via an command line application developed to achieve these relatively straightforward but heavy duty use-cases.
3. Scorecard Aid
- In first stage Topcoder's internal reviewer will check for 7 already-known changes in the 'difference' point cloud to see if those changes are present in the generated difference point cloud. The client has provided images of those changes to help our reviewers quickly look for those changes. These images will of course not shared with the contestants, but can be shared after the end of the challenge (depending on client's discretion)
- The second stage review will be done by the client.
- Number of significant features/changes identified
- Speed in seconds for the code to run in a particular test resolution
- (secs) and scalability of the tool
- Code quality of the solution
- Customisability of application through the use of tuneable parameters
- Speed and accuracy of reconstructed point cloud
- The code quality should be high.
- Implementation of tuneable parameters, as described above.
- The very best solutions ideally should be capable of gracefully handling much larger clouds as well
Judging Structuring
The review of this challenge will be done mostly subjectively in two stages:Judging Criteria
The review of this challenge will broadly done on the basis of:If the above result in ties, the following criteria will also be applied, in this order, to further rank results:
Final Submission Guidelines
The submission should include the following (note the following has been shared by the client and for the sake of consistency, it has been shared verbatim:- An algorithm that takes in a pair of point cloud files and includes parameters to adjust the output
- Execution documentation
- Point cloud file representing the difference between the two
- Reconstructed point cloud (and execution instructions to create this)
NOTE - simply providing changes isnt enough, participants should identify the best way to take their identified changes and then reconstruct a new pointcloud from the original plus the changes. This is required because in use on our sites the change algorithm will be executed at site, and only changed dataset will be transmitted to the cloud where a reconstruction should occur. This reduces the file sizes needing to be transferred and stored.