Available Code Implementations by Nicholas R. Howe
- MATLAB Implementation of Foreground/Background Motion Segmentation Based on Graph Cut
[Download Zip File][Supplemental Zip file with sample video & RUNME script] This package contains m-files for the segmentation of a moving foreground from video with a static background. The techniques implemented were described in the paper referenced below. If you find the code useful, I would appreciate a note of acknowledgement, and perhaps a citation if appropriate. Thanks!
- Better Foreground Segmentation Through Graph Cuts, N. Howe & A. Deschamps. Tech report, http://arxiv.org/abs/cs.CV/0401017. [PDF] [PS.GZ] [BibTeX].
- MATLAB Implementation of Contour-Pruned Skeletonization
[Download Zip File] This package contains mex-files for computing the skeleton of a binary image that is both intuitive and noise-resistant. These are my own implementation of a skeletonization method communicated to me by Alex Telea. See his papers for more details. If you find the code useful, I would appreciate a note of acknowledgement. Thanks!

Note: I have no published paper on this technique. The idea came to me orally from Alex Telea, and I believe it may be contained in one of his papers, but I am not sure which one. However, I can express the concept fairly easily. A point on the skeleton sits at the center of a circle that touches the edge of the figure at multiple points. The intensity in the gray-level skeleton image is based on the shortest distance you would have to travel around the perimeter of the figure to connect the most distant two points. Thus spurs in the skeleton due to small edge perturbations will have low intensity even if they are very long. If the circle touches two disconnected edges (like the inside and the outside of an O shape) then the skeleton will be infinite at that point. To get a final skeleton, you should pick your threshold depending on the expected size of any noisy protrusions in the silhouette.
- MATLAB Implementation of Turning Angle and Chamfer Distance for Silhouette Comparison
[Download Zip File] This package contains mex-files for computing the turning angle difference and chamfer distance between two shapes (binary images with a single positive connected component, e.g., human silhouettes). The techniques implemented were used in the paper referenced below. If you find the code useful, I would appreciate a note of acknowledgement, and perhaps a citation if appropriate. Thanks!
- Silhouette Lookup for Automatic Pose Tracking, N. Howe. IEEE Workshop on Articulated and Nonrigid Motion, June 2004. [PDF] [PS.GZ] [BibTeX] [PowerPoint].
A cautionary note on the "chain code" implemented in the files above: it is not a standard chain code from the textbooks. The chain code used here travels around the silhouette in unit moves in four cardinal directions (no diagonals) outlining all the foreground pixels. It follows the external boundary only and ignores any holes. In two bits it encodes the direction of one step. (The code is given by the defined constants at the top of chain.cpp.) Thus four steps fit into one byte, which is a more convenient unit to process. Since it is good to smooth things a little to get a better comparison of direction, the turning angle code compares the directions using these four-step units. The numbers in chaincode.h are the orientation and length of the vector from the start of a four-step sequence to the end. The indices of the arrays correspond to the bit string of the encoded movement. So for example, 0 is the code for four moves north: its direction is pi/2 and length is 4 units. 1 is the code for three moves north followed by one south, etc.