User Tools

Site Tools


ece4580:module_pcd:bridgeproblem

This is an old revision of the document!


Point Clouds Processing and Interpretation

Recently, a section of the I-85 in Atlanta collapsed due to a human-caused fire (images below). The accident impacted Atlanta traffic and led to the closure of the I-85 in both directions in the vicinity of the damaged section.

i85_collapsed01.jpg i85_collapsed02.jpg i85_collapsed03.jpg

Due to the impact of the accident, damage removal, traffic control, and construction of the new section began almost immediately.

i85_routing01.jpg i85_repair01.jpg i85_repair02.jpg

Of course, the authorities also wanted to document the state of the bridge. As part of the damage assessment, the Georgia Department of Transportation needs to create a post-disaster scan of the bridge and compare it to a scan performed earlier, when the bridge was fully intact. The scan analysis will also assist in the repair as it will provide important geometric information regarding the section.

Bridge Comparison and Visualization

Let's go through a simulated version of the analysis. With the current tools in hand, you should be able to identify the missing components from the original laser scans. Now, these “laser scans” are far larger than what you have been dealing with so far, so your algorithms to date may not work out of the box due to memory constraints. We'll break this problem into a few smaller problems that will lead towards the final answer.

Part #1: Difference Calculation

The laser scanning folk were nice enough to register the original scan to the new scan, so they are both in the same coordinate system (i.e., they have a common origin). that means, you can directly check the point clouds to see what differences there are. Eventually, we'd like to quantify the differences not in terms of points, but in terms of surfaces. Since the point cloud is too big, we'll need to partition it too.

Proximity Check

Let's first see if we can identify the difference in the bridge due to both the collapse of the bridge, as well as due to the burning of some of the components. Create a new member function for your pts3D class that takes in another pts3D object (call it the testCloud) and a distance threshold ($\rho_{dist}$), then returns the indices into the points of the testCloud that are more than ($\rho_{dist}$) away from the points in the calling point cloud. For that, you may also want to create a member function called distanceToPoints. The idea is to be able to invoke a member function as follows:

  farPointInds = sourceCloud.getDifference(testCloud, rho);

and have it pass back the indices to the points in testCloud that are far away from the points in sourceCloud (as in a distance more than rho).

To aid this procedure, write a member function called distanceToPoints whose stub is:

function [minDist, minInd] = distanceToPoints(this, testPts)
...
end

Cleverly using pdist you can find both the minimizing distance and the associated index for the return arguments. Your main function getDifference should invoke it and then perform the distance thresholding to identify the outlier points and returns their indices.

You should also write a member function called removeInds

function remPts = removeInds(this, inds)
...
end

that takes a set of indices to remove, removes the points from the point set, and returns a new point set (e.g., a pts3D object) with the removed points. Using this removal function, you should visualize the set of points that are outliers, so you can visualize what parts of the bridge were damaged or altered in the fire.

====

References

ece4580/module_pcd/bridgeproblem.1491701954.txt.gz · Last modified: 2024/08/20 21:38 (external edit)