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