This is an entirely straightforward implementation of the classic marching squares algorithm in Java (see http://en.wikipedia.org/wiki/Marching_squares for an introduction to the algorithm).
It consists of the following three classes, the source for which I am placing in the public domain:
The code anticipates that data will have been pre-thresholded into zero and non-zero byte values. Given a matrix of such values (supplied as a byte array) the code can find perimeters between regions of zero and non-zero values.
byte[] example = new byte[] {
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 1, 1, 0,
0, 0, 1, 1, 0,
0, 0, 0, 1, 0,
0, 0, 0, 0, 0
};
MarchingSquares ms = new MarchingSquares(5,6, example);
Path path = ms.identifyPerimeter();
//the path returned will be [S, S, E, S, E, N, N, N, W, W]
//the origin of the path being the point (2,-2)
The diagram below shows exhibits the coordinate system used by the algorithm.
A diagram highlighting the coordinate system used in the implementation.
For more information see the comments in the supplied code.