CS148, Project 2: pb-lite: Boundary Detection

by Betsy Hilliard (betsy), 10/10/11


The Goal

Humans are very good at looking at a scene and processing what parts are individual objects and where the boundaries lie. We are not confused by the outlines of individual bricks or the bark of a tree and so we can easily separate and label objects. This is not as easy a task in computer vision. As an algorithm must act on pixel level information, complex textures can complicate an algorithm's ability to separate object correctly. In this project I aim to create a simplified version of work done by Arbelaez, Maire, Fowlkes, and Malik(TPAMI 2011).

Constructing A Filter Bank

Taking a Gaussian kernel matrix and filtering it with a Sobel matrix creates a filter. By rotating this filter to create a filter bank of filters of different radii. By using these filters individually on the image one can create "textons" at each pixel that describe the texture at that pixel.

Filter Bank Used

Creating a Texton Map

Taking the filter responses from each of the filters in the filter bank and computing means at each pixel generates a "texton" map that associates the array of text on responses with a value 1-k.

Example Texton Maps

Constructing Masks to Calculate Histograms

Create binary "masks" in order to easily sum the bin values present a certain distance away from each pixel. These masks are predominately half-circles of varying radii and orientations. For extra credit I also created a set of masks that consist of two squares at opposite corners in order to try and see if checking the gradient between two patches far away from the point might get rid of the noise associated with the pixels immediately adjacent to texture edges. the other similar masks are two masks that sum a bar bar shaped area at the top of the filter area and compare it to the bar shaped area at the bottom of the mask.

Computing Gradients

In order to determine the probability that a given point is a true edge and not part of a texture you can find the chi-squared distribution of textons on the right and left sides of the supposed edge points. Similarly, this can be used to compare the brightness changes across possible edge pixels. By using these gradients as probabilities (aka large changes indicate high probability of an edge) you can correct for the texture edges found by the canny or sober edge detectors.

Extra Credit

For extra credit I created extra masks to try to reduce the noise around texture edges. My thought was that if you sample points further away from the possible edge point and they had similar characteristics then the point is probably a texture edge as it more likely falls within an object. If there is a large change in the pixels between the two sample areas then the point if more likely an edge as it probably falls between two object with different textures/brightness/etc.

I also added laplacian of gaussian filters to the filter bank hoping to catch more texture qualities in the arrays of filter responses.These filters are circular and thus pick up different features. This presentation suggests that center surround filters are better at depicting skewness.

Results

My basic implementation was not better than the baseline, but when I added the filters and masks I was able to generate a result that was basically as good as the baseline. I that changing some of the parameters that were set by the stencil code would help to improve the results.

Before Additions After Additions