This is part 1 of a multipart blog series on the Virtual CTO project: A digital reconstruction of the CTO measurement train commissioned by the section Railway Engineering at Delft University of Technology. In this part I will describe the process and show results of making LiDAR scans of the train, both outside and inside. Future parts will cover CAD modeling (part 2) and handheld 3D scanning (part 3) amongst other things.
When the project started to take shape in early 2017, it appeared that a lot of detailed construction drawings were available for the bogies, but not so much for the vehicle chassis, body and interior. Therefore we decided early on that 3D laser scanning was the way to create a highly detailed digital reconstruction for those parts as well. Ultimately it would take multiple sessions over a period of nine months to capture the vehicle in full detail.
FIRST SESSION
The first scan session was set to take place in early August 2017 outside on a quiet ‘graveyard’ section of the railway yard in Amersfoort. My scanning workflow is best described by discussing the main issues I had to solve:
Decide which scanner to use
The table below shows a comparison of the 3D laser scanners I considered in my initial research. Ultimately, the better scanning range, accuracy and workflow drew me to the Z+F Imager 5010x, where the following workflow features stood out:
remote control and automatic synchronisation between Z+F 5010x and Z+F LaserControl software running on a Windows tablet or laptop,
instant automatic estimation of new scanner position, based on movement since last position, which works both outdoors and indoors,
automatic registration on the fly, using either cloud-to-cloud based alignment or Z+F AutoTargets,
acquire and process scanned targets in the field automatically or manually to guarantee a safe registration,
when a scanned target is faulty, a high res sub-scan for the target area can be carried out automatically to correctly detect the target,
easily find and fill gaps with more scans to make sure you return with a complete dataset.
Brand | Range | Range accuracy (linearity error) |
Angular accuracy |
Range noise @25m |
HDR | Leveling | Realtime registration |
Battery life | Dimensions | Weight |
---|---|---|---|---|---|---|---|---|---|---|
Faro Focus X130 | 0,6 to 130 m | 1 mm | 0,00528 deg | < 0,5 mm | 70 Mpx | Tribrach & dual axis compensator | No | > 4,5 h | 240x100 | 5,2 kg |
Leica BLK360 | 0,6 to 60 m | @10m: 4 mm @20m: 7 mm | 0,005 deg | — | 150 Mpx | Tripod head | No | No | 100x100 | 1 kg |
Trimble TX8 | 0,6 to 120 m | < 2 mm | 0,00458 deg | < 1 mm | 10 Mpx | Tribrach & dual axis compensator | No | > 2 h | 335x242 | 11,2 kg |
Z+F Imager 5010x | 0,3 to 187 m | < 1 mm | 0,007 deg | < 0,6 mm | 80 Mpx | Tribrach & dual axis compensator | Yes (also with AutoTargets | > 3 h | 286x170 | 11 kg |
Comparing 3D laser scanner specifications
Choose a scan and registration strategy
Knowing which scanner to use, I started thinking about the best possible capture plan with the information I had about the scan site. The exact layout of the scan site would not become apparent until the day before the scan session, so based on the expected size of the site and other insecurities I could not predict, I decided to use targets to ensure a safe registration for all scans.
The plan was to create two rings of numbered targets, one around the scan site and the other one around all sides of the scan subject, and especially on the windows in such a way that from within every room inside the train at least 3 targets would also be visible. That way the scan alignment should always be stabilized with targets visible on all sides, and accurately registering both exterior and interior scans in the same 3D space would become possible. Additional targets were added in multiple lines on the rails on both sides of and parallel to the scan subject, in the form of white golf balls, to create more feature points for aligning the texture photos with the LiDAR scan afterwards.
Altogether I placed about 50 golf balls and 35 numbered targets. Ideally I would have chosen for the Z+F AutoTargets, but because you can’t print them on a standard laser printer and they costed €20 each, I chose to print my own and assign the numbers manually within the Z+F LaserControl software. A lot of laser scanner manufacturers promote the use of generic A4 paper targets with horizontally aligned checkerboards, so I decided to use these as well.
In terms of scan positions, the plan was to scan in a pattern of 3 rings around the scan subject at different distances and heights, and add additional positions close to the ground below the train to cover the chassis in more detail as well. In total I estimated to need at least 28 different positions outside and up to 14 different positions inside the train.
Choose the resolution and quality settings
When pre-testing each part of the scan and registration strategy in an environment with similar conditions, I also experimented which resolution and quality settings I should use for an optimal outcome.
For choosing the optimal combination of settings, I took the following characteristics into consideration:
Low distances to the object and high resolutions result in considerable overlapping of neighboring measurement points, hence high resolutions do not improve image sharpness. Therefore high resolutions are only suitable for long distances to the object.
The typical scan resolution is “High”, which is optimal suited for most applications. “Super High” and “Ultra High” are only recommended for sub-scans or special tasks.
With a smaller angle of incidence, the possible target distance is reduced. The maximum angle based on the normal of target should be less than ±45 degrees.
Doubling acquisition time (higher quality setting) theoretically will reduce range noise by a factor of 1,41. Depending on the object’s surface roughness the actual factor may be smaller.
Besides the object distance, the range noise is also highly dependent on the color of the scanned surface. Highly absorbent black surfaces have a significantly higher range noise than white surfaces.
Moving and leveling the scanner to a new position on uneven ground takes ±7 minutes alone and ±5 minutes with assistance.
Resolution | Pixel / 360 deg (hor & vert) |
Increments | Distance between 3D points @10m |
Ideal object distance |
ZFS data file size (normal quality) |
---|---|---|---|---|---|
Middle | 5.000 px | 0,072 deg | 12,56 mm | > 2 m | ca. 96 MB |
High | 10.000 px | 0,036 deg | 6,28 mm | > 5 m | ca. 385 MB |
Super High | 20.000 px | 0,018 deg | 3,14 mm | > 20 m | ca. 1,5 GB |
Ultra High | 40.000 px | 0,009 deg | 1,57 mm | > 40 m | ca. 6 GB |
Selecting the right resolution level for the Z+F 5010x laser scanner
Resolution | with an angle of 90 deg |
with an angle of 60 deg |
with an angle of 45 deg |
---|---|---|---|
Middle | 1-12 m | 1-10 m | 1-8 m |
High | 1-25 m | 1-22 m | 1-20 m |
Super High | 1-50 m | 1-45 m | 1-35 m |
Ultra High | 1-100 m | 1-90 m | 1-70 m |
Recommended target distance (DIN A4 target) for the Z+F 5010x
Resolution | Low quality | Normal quality | High quality | Premium quality |
---|---|---|---|---|
Middle | 0h 0m 52s | 0h 1m 44s | 0h 3m 22s | 0h 6m 44s |
High | 0h 1m 44s | 0h 3m 22s | 0h 6m 44s | 0h 13m 28s |
Super High | 0h 3m 28s | 0h 6m 44s | 0h 13m 28s | 0h 26m 56s |
Ultra High | — | 0h 13m 28s | 0h 26m 56s | 0h 53m 20s |
Z+F 5010x scanning time estimations (excl. 3:23 min color panorama)
Object distance | black 14% | grey 37% | white 80% |
---|---|---|---|
10 m | 0,4 mm | 0,3 mm | 0,2 mm |
25 m | 0,6 mm | 0,4 mm | 0,3 mm |
50 m | 2,2 mm | 0,8 mm | 0,5 mm |
100 m | 10 mm | 3,3 mm | 1,6 mm |
Z+F 5010x range noise as a function of object distance and color
Translating these characteristics back to my expected scanning environment, lead me to choose “Super High - Normal” for the outer rings of the scan pattern, and “High - Normal” for the scan positions close to and inside the train (all without color to save time):
The quality setting “Normal” was chosen, because a higher setting would have too much impact on the total scan time with too little gain in quality, considering the expected high amount of scans.
The resolution setting “Super High” was chosen for the outer rings of the scan pattern to reduce the distance between 3D points around targets (which were often angled), and who needed to be usable until at least 40 meters from the scanner location.
The resolution setting “High” was chosen for the scan positions close to and inside the train to reduce scanning time and file size
So together with the time needed for moving and leveling the scanner between scans, and depending on the scan resolution, this meant that I was able to scan 4 to 6 positions per hour.
Find out how to scan reflective surfaces
It’s well known that highly reflective (polished metal, gloss paint), highly absorbent (black) and translucent (clear glass) surfaces are unfavorable for any form of 3D scanning. Of course the CTO measurement train had all of these surface characteristics to some degree.
A known method to improve the results of the measurement in these cases, is too color or powder the scan surface. Since coloring was obviously not a viable solution, I went on to research the powder solution. However, a lot of the 3D scanning sprays on the market appeared to be flammable and quite expensive, so using it on a train didn’t seem feasible either. Therefore I tested a low cost and self made talcum powder - water mixture on a car, sprayed on under high pressure. Even though this approach increased the scanning accuracy on the shiny silver-grey car paint, the train turned out to be way too big to spray entirely with the talcum-water mixture within a reasonable amount of time (let alone clean it afterwards). In the end this left me with no choice other than to scan the train as is.
Edit 2019: The self vanishing 3D scanning spray from AESUB is a good solution for smaller subjects.
Find out how to scan from an elevated position
A big challenge right from the start was also to find a way to scan all sides of the train, including the roof (and the chassis).
Initially we tried to find a location with some kind of natural elevation that we could use, but this turned out to be too difficult to arrange. Another option was to use a mobile scaffold, but when the scan location appeared to have a grass soil, we had to think of something else. So we rented a scissor lifting machine for rough terrain and brought an optional reinforcement kit with guy ropes and tent pegs. Out of the box the platform was less stable at 9 meter then we hoped, but with reinforcement this could be a viable solution. Sadly last minute time restrictions meant that reinforcing the scissor lifting machine for every scan position took too long, so we only used it for photos.
Deal with unfavorable conditions
In terms of unfavorable weather conditions, it’s pretty straightforward that fog, rain or snow will cause poor measurement results. But special attention should also be given to surfaces that are directly illuminated by the sun, because the sun can cause an increased range noise and therefore a larger measurement uncertainty. For some objects, even a “black hole” can appear in the reflectance image when they are scanned against the sunlight or a bright spotlight, because the optical receiver of the instrument can be dazzled so heavily that in this area no measured data is recorded.
In terms of unfavorable environment conditions, anything blocking the view between the scanner and the scan subject can cause poor measurement results as well. Additionally tall grass fluttering in the wind can make it impossible to do automatic registration on the fly, using cloud-to-cloud based alignment.
Execute the capture plan
When the layout of the scan site finally became apparent on the day before the scan session, the grass and vegetation turned out to be so high that it had to be cut first.
On day of the first scan session, the weather started a bit grey and cloudy, so after placing targets and pruning the vegetation somewhat, we decided to do the hdr texture photography first (as I will describe in a future part of this blog series).
When I finally got to the LiDAR scans in the afternoon, it became clear that the location manager had decided to shorten our time from the two days we agreed, to just one. This meant that we only had 5 instead of 15 hours, so we had to skip all scans in elevated positions and below the train, as well as most of the interior scans.
Run preprocessing filters and register scans
First thing I did in post before doing anything else was clean up all my scans by running the preprocessing filters in LaserControl:
The mixed pixel filter masks out pixels which are incorrect because the laser beam has hit an edge. In this case, a part of the laser beam hits a close object, another part hits an object further away. This results in a pixel in between which has to be removed.
The single pixel filter masks out single pixels that may be left over by the mixed pixel filter.
The intensity filter masks out pixels below minimum and above maximum intensity. This removes pixels on highly absorbent surfaces, pixels in the sky or otherwise out of range of the scanner, as well as pixels in bright specular reflections.
The overload filter masks out other pixels that are too bright, for example caused by spotlights.
The thin filter masks out pixels closer to the scanner to get an equal density pointcloud.
The range filter masks out pixels outside the selected distance range, in order to remove less accurate pixels further away.
Since I had to leave the scan site with an incomplete data set, the scan registration was a bit more difficult than I planned. The tall grass fluttering in the wind hindered cloud-to-cloud based alignment for a large part of the point cloud, so besides the relatively small train shapes within the (360 degree) scans, registration heavily depended on the targets I placed. And because there wasn’t time enough to do high res sub-scans to improve target detection, distant targets needed to be acquired or refined manually, especially for the scans made with the “High” resolution setting. Luckily in the end the strategy of having targets visible on all sides for every scan position payed out to register all scans together with reasonable accuracy.
After point cloud cleanup and successful registration, I used the 3D volume selection filter to cut off anything outside my volume of interest. The actual merged point cloud was created and triangulated in Reality Capture and rendered in Keyshot:
Assessing the result, the scan of the train body with its glossy paint doesn't look too bad at all considering the limitations I had during the scan session. But you can clearly see the effect of highly absorbent colors (like the black letters and NS logo) on the quality of the scanned surface in that area, as well as the lack of coverage on the roof and chassis.
Identify workflow improvements
A short reflection on my scanning workflow in the first session resulted in a few points for improvement:
set higher requirements for a more controlled scanning environment:
a more compact environment with less empty space provides more surfaces for a better automatic registration,
a flat floor that is level reduces the time needed for leveling the scanner between scan positions,
a scanning environment without weather influences ensures continuity in planning.
use checkerboards in white and dark grey and tilted by 45 degrees for more accurate registration (black/white contrast > 6:1),
choose a standard size for additional target spheres on the ground, for better automatic acquisition (bigger than golf balls),
take the time to do an initial registration of scan data in the field, to ensure returning to the office with a complete data set.
SECOND SESSION
After the first scan session it was clear a second session was needed. And because we soon heard that the CTO measurement train was due for maintenance, we decided to wait for that and try to secure a more optimal scanning environment. The second scan session took place in April 2018 inside in a maintenance workshop at NS Train Modernisation in Haarlem.
I will describe my updated scanning workflow again by discussing the main issues I had to solve:
Decide which scanner to use
The decision to stick with the accuracy and workflow advantages of Z+F was an easy one to make. It just so happened that, shortly after the first session, the Z+F Imager 5016 was released, an update for the 5010x which I was happy to take advantage of because of the following improvements:
significantly higher accuracy,
data file sizes cut in half,
smaller design and lighter in weight,
hot swappable batteries,
integrated led spots.
Brand | Range | Range accuracy (linearity error) |
Angular accuracy |
Range noise @25m |
HDR | Leveling | Realtime registration |
Battery life | Dimensions | Weight |
---|---|---|---|---|---|---|---|---|---|---|
Z+F Imager 5010x | 0,3 to 187 m | < 1 mm | 0,007 deg | < 0,6 mm | 80 Mpx | Tribrach & dual axis compensator | Yes (also with AutoTargets | > 3 h | 286x170 | 11 kg |
Z+F Imager 5016 | 0,3 to 360 m | < 1 mm | 0,004 deg | < 0,38 mm | 80 Mpx | Tribrach & dual axis compensator | Yes (also with AutoTargets | > 2 x 2 h hot swappable | 258x150 | 7,5 kg |
Comparing 3D laser scanner specifications
Choose a scan and registration strategy
As opposed to the first scan session, the location for the second session was ideal in almost every aspect. We could pick and choose the space that suited our needs the most, and use it how and whenever we wanted.
The plan was to capture every part of the train I wasn’t able to get in the first session in a single point cloud, and because the bogies were in maintenance, I had perfect access to the entire chassis and lower side of the body, as well as the complete interior.
Since I didn’t want to rely completely on cloud-to-cloud based registration, I placed numbered targets on the walls around the train at various heights, on the lower sides of the body and in the interior, in such a way that from every scan position targets would be visible on all sides of the scanner with enough overlap between scans. Altogether I placed about 46 numbered targets outside and 47 inside the train.
Because the generic A4 paper targets I used in the first scan session were often hard to register automatically, I decided to use Z+F paper targets (A4) with checkerboards tilted by 45 degrees, which are easier to register accurately by the target acquisition algorithms due to the rotation direction of the laser beam.
In terms of scan positions outside the train, the plan was to scan in a dense pattern of 1 ring around, and 1 ring and a center line below the train, with scans less than 3 meters apart to leave with as few gaps as possible. Inside the train I didn’t have a predefined plan, but chose scan positions as I progressed.
Choose the resolution and quality settings
Considering similar characteristics as for the Z+F 5010x used in the first scan session, combined with the increased performance of the Z+F 5016, I chose “Super High - Normal” for all scan positions outside the train, and “High - Normal” for all scan positions inside the train (all without color to save time):
The quality setting “Normal” was chosen, because a higher setting would have too much impact on the total scan time with too little gain in quality, considering the high amount of expected scans.
The resolution setting “Super High” was chosen for all scan positions outside the train to reduce the distance between 3D points around targets (which were often angled), to ensure they could be registered accurately up to 35 meters from the scanner location without the need for additional sub-scans (to save time).
The resolution setting “High” was chosen for the scan positions inside the train to reduce scanning time and data file size, and because accurate target registration up to 10 meters was enough for most inside locations.
So together with the time needed for moving and leveling the scanner between scans, which was significantly reduced because of the leveled floor, this meant that I should be able to scan 6 to 8 positions per hour, depending on the scan resolution.
Resolution | Pixel / 360 deg (hor & vert) |
Increments | Distance between 3D points @10m |
Ideal object distance |
ZFS data file size (normal quality) |
---|---|---|---|---|---|
Middle | 5.500 px | 0,065 deg | 11,42 mm | > 2 m | ca. 44 MB |
High | 11.000 px | 0,033 deg | 5,71 mm | > 5 m | ca. 177 MB |
Super High | 22.000 px | 0,016 deg | 2,85 mm | > 20 m | ca. 707 MB |
Ultra High | 44.000 px | 0,008 deg | 1,43 mm | > 40 m | ca. 2,8 GB |
Selecting the right resolution level for the Z+F 5016 laser scanner
Resolution | with an angle of 90 deg |
with an angle of 60 deg |
with an angle of 45 deg |
---|---|---|---|
Middle | 1-12 m | 1-10 m | 1-8 m |
High | 1-25 m | 1-22 m | 1-20 m |
Super High | 1-50 m | 1-45 m | 1-35 m |
Ultra High | 1-100 m | 1-90 m | 1-70 m |
Recommended target distance (DIN A4 target) for the Z+F 5016
Resolution | Low quality | Normal quality | High quality | Premium quality |
---|---|---|---|---|
Middle | 0h 0m 52s | 0h 1m 52s | 0h 3m 44s | 0h 7m 28s |
High | 0h 1m 44s | 0h 3m 44s | 0h 7m 28s | 0h 14m 56s |
Super High | 0h 3m 28s | 0h 7m 28s | 0h 14m 56s | 0h 29m 52s |
Ultra High | — | 0h 14m 56s | 0h 29m 52s | 0h 59m 44s |
Z+F 5016 scanning time estimations (excl. 3:23 min colour panorama)
Object distance | black 14% | grey 37% | white 80% |
---|---|---|---|
10 m | 0,23 mm | 0,19 mm | 0,14 mm |
25 m | 0,38 mm | 0,25 mm | 0,19 mm |
50 m | 1,0 mm | 0,6 mm | 0,3 mm |
100 m | 7,8 mm | 3,2 mm | 1,8 mm |
Z+F 5016 range noise as a function of object distance and colour
Execute the capture plan and register scans
Since the main focus of the second scan session was the dull colored chassis and the location was ideal in almost every aspect as well, I didn’t have to consider any measures for unfavorable surfaces or conditions. The freedom I enjoyed at this location also made it possible to take the time to do an initial registration of scan data in the field. An important thing I ran into though, is that automatic target acquisition combined with assigning numbers manually, took longer than running the next scan, so the manual work became a bottleneck for keeping up the scanning pace. In the end it took me about 14 hours to capture 39 scans outside and 27 scans inside the train. But it was priceless to have that continuous confirmation that I was building a complete data set before returning to the office.
Back in the office I ran the preprocessing filters to clean up my scans, before refining the initial scan registration I did on site. As expected this was much easier than I experienced in the first session. Additionally I used 4 natural point targets to register all scans in the same 3D space as the first session scans, to make it easier to build one single model and use the HDR textures registered to that same space.
Assessing the merged and triangulated point cloud, the outside scan looks really smooth and has an incredible amount of detail in the chassis, thanks to the workflow improvements I was able to implement in the second session. As expected the effect of highly absorbent colors (like the black letters) on the quality of the scanned surface in that area is still clearly visible.
For registering the inside scans I ran a similar workflow. And because enough targets on the walls were visible for most scan positions, the inside scans could be registered in the same 3D space as all the other scans quite easily as well. Assessing the result, the inside scan looks really good with a nice amount of detail, and very well aligned with the outside scan.
Identify workflow improvements
A short reflection on my scanning workflow in the second session resulted in a few points for improvement:
invest in Z+F auto targets, they are absolutely worth their price of €20 each for speeding up the initial registration of scan data in the field, especially when you have a lot of scans to do.
bring your own flexible solution for scanning at an elevated position, like the support systems that SCAN&GO offers for using laser scanners at heights up to 6 meter (optionally with automatic leveler).
REFERENCES