Available Code Implementations by Nicholas R. Howe


MATLAB/C Implementation of Part-Structured Inkball Models
generative handwriting model

[Download Zip File] This package contains m-files for implementing part-structured inkball models, as described in the paper listed below, and including a CUDA GPU implementation of the matching routine. This code serves as the reference implementation for the paper. If you find the software useful, and your use of the material leads to a publication, please cite the paper below. I also appreciate notes of acknowledgement if you feel so inclined. Thanks!

  • Part-Structured Inkball Models for One-Shot Handwritten Word Spotting. N. Howe. International Conference on Document Analysis and Recognition, August 2013. Preprint: [PDF] [BibTeX]. Copyright IEEE.

Last modified 2013-08-28. See readme for changelog.


MATLAB Implementation of Document Binarization Code
binarized handwriting

[Download Zip File] This package contains m-files for the binarization of document images using automatic parameter tuning, as described in the paper listed below. This code serves as the reference implementation for that paper. To use the software, you will also need to download the separately licensed max-flow package by V. Kolmogorov and compile it in combination with my source files, as described in the readme text. If you find the software useful, and your use of the material leads to a publication, please cite the paper below. I also appreciate notes of acknowledgement if you feel so inclined. Thanks!

  • Document Binarization with Automatic Parameter Tuning, N. Howe.  To appear in International Journal of Document Analysis and Recognition. DOI: 10.1007/s10032-012-0192-x. [PDF] [BibTeX]. The final publication is available at www.springerlink.com.

An earlier version of this algorithm (actually the base algorithm for the parameter tuning) was described in a conference paper appearing in ICDAR 2011. Although the journal paper above largely supersedes this work, the citation and associated code package are still available here: [Download Zip File]

  • A Laplacian Energy for Document Binarization, N. Howe.  International Conference on Document Analysis and Recognition, 2011. [PDF] [PS.GZ] [BibTeX].

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!


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.