Dental Imaging Project – Every Tooth Tracked

As I promised in my previous post, here is an update to the segmentation work. We want to track the health of every tooth over time, and therefore wanted an algorithm that could extract the image of every single tooth from the stitch that we obtained in out previous step. Our first attempt was at a completely automated approach, and we soon found a paper[1] which attempted to solve a problem similar , but smaller, than ours. They wanted to separate the teeth part from the rest of the image, while we also wanted to segment every tooth from each other. The algorithm that theses guys had used was pretty basic (used Active Contours Without Edges[2]), and I got it working within half an hour, with the following results:

Obtained using Active Contours Without Edges (Chan-Vese)

But this approach had a fee problems. It was computationally expensive( ~ 2min to run on my Intel Core i7 machine), and could not be used to segment an individual tooth out.

So, I started looking at other algorithms, and soon stumbled across the Watershed transform[3]. In order to generate good results, watershed needs certain markers, and these markers can be generated using both automated or manual methods. One popular automated method for generating these markers is ‘opening-by-reconstruction’ and ‘closing-by-reconstruction’. The following results were obtained:

49_segAs you can see, the above is a complete mess. A lot of unwanted segments are obtained, and some superpixels (clusters of pixels) flow into each other.
So, I then tied a manual-marker approach, and the results were much better:


A matlab-based GUI is used to generate the masks as follows:

The mask file looks something like this:

In the final product, we can assume to have a touchscreen based user interface, wherein the user slashes with his finger across every tooth once, and then gets the segmented image as an output.

The Dental Imaging Team: Hyunsung, Avi, Ujjwal, Raghu, Meghasyam, Ashish, Ashray, Pratima, Samriddh