Project 2: pb-lite: Boundary Detection
Project Overview
Boundary detection is an important, well-studied computer vision problem. Classical edge detection algorithms, including the Canny and Sobel look for intensity discontinuities. The more recent pb boundary detectors significantly outperform these classical methods by considering texture and color gradients in addition to intensity. Qualitatively, much of this performance jump comes from the ability of the pb algorithm to suppress false positives that the classical methods produce in textured regions. The method used in this project is a simplified version of pb boundary detections.The major steps are to pre-define:
- a filter bank of multiple scales and orientations.
- half-disc masks of multiple scales and orientations.
and then for every image:
- create a texton map by filtering and clustering the responses with kmeans.
- compute per pixel texture gradient (tg) and brightness gradient (bg) by comparing local half-disc distributions.
- output a per-pixel boundary score based on the magnitude of these gradients combined with a baseline edge detector (Canny or Sobel).
Finally the output for all of the evaluate using the the Berkeley Segmentation Data Set 500 (BSDS500)
Texture Representation
Filter Bank
A collection of oriented derivative of Gaussian filters. The filters are created by convolving a sobel filter and a Gaussian kernel and then rotating the result.The filter banks are used to compute textons in this project. I create (3*16) filters. (3scals and 16 orientations)

Half-disc Masks
Half-disc masks are pairs of binary images of half-discs. The half-disc masks will allow us to compute the chi-square distances using a filtering operation, which is much faster than looping over each pixel neighborhood and aggregating counts for histograms. Following are a set of 4*8 masks( 4 scales, 8 orientations)

pb-lite results
The pb are calcualted using the following method:
- change rgb image to CIE Lab colorspace.
- pass each channle of the lab image to get_gradient method and get the result lg,ag,bg.
- pass texonmap to get_gradient mthod and get the result tg
- pb = (tg+lb+bg+ag).*canny
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Evaluating Boundary Detection
