Project 2: pb-lite: Boundary Detection

Varun Singh

For this assignment we had to improve on canny and sobel edge detections. We did so by first creating a filter bank and a set of half-disc masks, both of multiple scales and orientations.

I created a filter bank by convolving a gaussian filter and a sobel filter. The gaussian filter had an hSize of [3 3], and I created filters for a sigma size of 1 and 2, and 16 different rotations. This is the filter bank I used, made by simply rotating the filters using imrotate:

Then, I made a set of half-disc masks. I did so by creating a an array that represented a circle, by simply measuring the distance from the 'center' of the matrix. Then, I rotated the masks using imrotate. I also rotated each mask 180 degrees to get the half-disc pairs. I used radius sizes of 5, 10, and 20, and 8 different orientations. This is the set I used:

Then I made a texton map by filtering the images with all 32 filters from my bank, and reducing the 32-dimensional vector to a one-dimensional grouping with kmeans. Here is my texton map for the penguin image:

I then created texture and brightness gradients. I did this by centering all the different pairs of half-discs at each pixel, and comparing the histograms of either texture (from the texton map) or brightness of the images from both half discs using chi_sqr.

Finally, I simply took the mean of the feature vector for each pixel. I multiplied the mean of the brightness and texture gradients, and multiplied that by the canny baseline. This is a graph of my F score (in black):

My pb-lite did pretty well, but for some reason didn't do well for very low recalls, which I didn't work too hard to improve since it doesn't seem too important how well the algorithm does for recalls that low, since you're barely detecting any of the real edges. Heres the full data on my F score:

Boundary
ODS: F( 0.56, 0.65 ) = 0.60 [th = 0.09]
OIS: F( 0.56, 0.65 ) = 0.60
Area_PR = 0.44

My F score is unfortunately hardly higher than the baseline, but it would have been much much better if we didn't factor in recalls of less than around .7

Here are all of my detected edges, vs the baseline canny algorithm. My pb lite edges are first, followed by the canny edges. As you can see, due to the way I computed pb-lite (by simply multipying canny baseline with my feature strength and then normalizing), all I did was give less weight to edges that weren't really edges.