Multi-scale filter bank



To create the multi-scale filter bank, we convolve s gaussian kernels with a sobel filter, and then rotate it at o orientations. In this case, s = 2 (one gaussian filter with a sigma of 1, one gaussian filter with a sigma of 2) and o = 16. In the end, this is 32 different filters. This is precomputed once at the beginning of the algorithm and we can use the same ones throughout the algorithm.e

Half-disc Masks



The next step is to compute the half-disc masks. Like with the filter bank, this only needs to be computed once and can be used on every image throughout the algorithm. For a given radius r, I constructed a r*r+1 image. Then, for each pixel on the left half of the image, if the pixel falls within a distance r of the center, turn it white. Otherwise, turn it black. Then do the same thing for the right half of a different image. This creates a pair of half-disc masks that will be used later on. In this algorithm I have three radii (5, 10, 20) and this time 8 different orientations.

Texton Map



The next step is to convolve the image img with each filter in the filter bank. If there are f filters (I believe that f = 32 in this case) then each pixel has f data points associated with it. You can imagine this as a nxmxf matrix of values. This matrix is then passed into kmeans. Kmeans "crushes" the matrix so that instead of having f values associated with each pixel, we only have one value that contains all the information necessary to cluster the pixels together.

Texton Distributions

Then we build a histogram of the data from the texton map. We create an mxnxb matrix, where mxn are the dimensions of the texton map, and b is the number of bins in the histogram. Each layer is a boolean mxn matrix where the value at a given pixel is a 1 if the pixel fell in the given bin b, and a 0 if it did not.

Texton Gradient and Brightness Gradient

For each layer in the mxnxb histogram matrix, we want to filter the boolean image with the right half of a disc and the left half of a the same disc. We then compare the values for each disc, and then we sum over the b dimension.

pb-lite

Finally, we use the original sobel and canny edge detections in conjunction with our computation to figure out which edges in sobel and canny were likely to have been caused by texture differences and not actual boundaries.

Results

Original

Sobel

Canny

pb-lite

Original

Sobel

Canny

pb-Lite

Original

Sobel

Canny

pb-Lite

Original

Sobel

Canny

pb-lite

Original

Sobel

Canny

pb-lite

Original

Sobel

Canny

pb-lite

Original

Sobel

Canny

pb-lite

Original

Sobel

Canny

pb-lite

Original

Sobel

Canny

pb-lite

Original

Sobel

Canny

pb-lite

Graph