Jeremy’s Status Update for 2/29/2020

This week I helped work on the design review presentation and design document. I also did a good amount of research into different methods to get their tradeoffs that we discussed in the design review presentation. I helped create a 3D render of what our project would approximately look like and also helped construct the block diagrams and other visuals for the presentation. I did some research into PCL and its tradeoffs, as well as some metrics we could use for the metrics and validation slide. I mainly helped with the overall design review presentation such as coming up with risk factors and unknowns, fixing different visuals and the Gantt chart, etc. The main time sink was just doing a heavy amount of research into considering different scanning methods and sensors, since we settled on using a laser projection with a camera as our sensor and needed some metrics and data to justify this choice, which took a fair bit of effort to find good papers on since most scanning approaches just use digital cameras or depth cameras. This approach will definitely be more challenging than just using a packaged depth camera like the Intel RealSense SR305, but it may be able to provide higher accuracy, since a lot of depth cameras don’t give very specific accuracy numbers. 

I did some research into noise reduction and outlier removal as well this week. Point clouds obtained from 3D scanners with any methods, including laser projection, would regularly be contaminated with lots of noise and outliers. The first step for dealing with raw point cloud data obtained after conversion from laser projection to depth would be to discard outlier samples and denoise the data. Alex mentions removing points in the background and in the foreground on the turntable; this step would come after that where the point cloud is already created. There have been decades of research in denoising point cloud data, which include methods categorized as projecting points to estimated local surfaces, classifying points as outliers with statistical methods, coalescing patches of points with nonlocal means, or local smoothing using other input information, and so on. There are generally three types of outliers: sparse, isolated, and nonisolated. Sparse outliers have low local point density that are obvious erroneous measurements i.e. points that float outside of the rest of the data. Isolated outliers have high local point density but are separated from the rest of the point cloud, i.e. outlier clumps. Nonisolated outliers are the most tricky – they are outliers that are very close to the main point cloud and cannot be easily separated, akin to noise. To remove sparse and isolated outliers, we can use a method that looks at average distance to k-nearest neighbors, then removes that point based on a threshold defined in practice. Let the average distance of point p_i be defined as:

d_i = 1/k * sum(j=1 to k) dist(p_i, q_j)

where q_j is the jth nearest neighbor to point p_i. Then, the local density function of p_i is defined as follows: 

LD(p_i) = 1/k * sum(q_j in kNN(p_i)) exp(-dist(p_i, q_j) / d_i)

with d_i defined earlier. Now we can define the probability that a point belongs to an outlier: 

P_outlier (p_i) = 1 – LD(p_i)

We can then take this probability and if it is above a certain threshold (one paper I read uses P_outlier (p_i) > 0.1 * d_i as their threshold in practice which is dynamic based on d_i), then that point will be removed from the point cloud data (PCD). 

I am certain that the PCL (point cloud library) will have a wide range of functions available for noise reduction and outlier removal but this methodology seems easily implementable and robust. I can implement our own outlier removal method and compare with some open source options available as well looking at the results qualitatively to see how well it removes outlier points from the raw point cloud. I will also need to make sure that I tune the threshold for removing outliers, since archaeological objects tend to have more jagged edges and be more abrupt in shape, so we definitely don’t want to over-smooth the object and lose too much accuracy in the data; the goal should be to increase our accuracy to the ground truth model rather than trying to over-smooth to make something that “looks nicer”. 

My progress is mostly on track, but I will be aiming to start finding and constructing our validation database (my main task from the Gantt chart) and potentially 3D printing some of the ground truth models out, and also start writing and testing the code for filtering the sensor data such as noise reduction and outlier removal, experimenting with the PCL library. I will also look into triangulation using the PCL library as it is too complex and unnecessary for us to implement triangulation ourselves in the scope of the project.