ShapeLogic is an open source toolkit for declarative programming, image processing and computer vision.

ShapeLogic has 2 applications: The Color Particle Analyzer will find and categorize particles on a relatively uniform background then make a report of geometric properties for each of the particles. The main application is for recognizing cells in medical image processing. The Letter Matcher is a general categorizer for skeletonized lines.

ShapeLogic is a library for lazy streams, works a little like LINQ, but for Java.

Code hosted on From there you can download both source files and binary distributions.

Join the ShapeLogic mailing list for announcements, questions, bug reports, suggestions and feature requests. You can help improving the stability of ShapeLogic by filing a bug report.

The first ShapeLogic implementation is in Java. ShapeLogic C++ was started in September 2008.

Started in ShapeLogic 1.5 the categorization in the Color Particle Analyzer and the Letter Matcher, can either be done with handwritten rules or generated by machine learning. The first machine learning technique in ShapeLogic is a multi-layer feed forward neural network that is trained externally but run internally.

Main ideas and motivation

ShapeLogic is a library for

While ShapeLogic's declarative programming system was initially developed for image processing and computer vision, it is widely applicable. It is currently difficult to combine declarative programming and image processing. ShapeLogic is intended as basic plumbing software that turns a logic engine or a neural network into a simple plugin component to ease entry into vision and image analysis. ShapeLogic also fills gaps missing from current Java image processing libraries, and uses a commercially friendly license.


  • Declarative lazy stream driven logic engine with lazy computations
  • Contains a framework for declarative and functional programming.
  • Specialized for the domain of image processing and computer vision
  • The user can store rules in a flat file, decreasing user reliance on Java programming
  • User rules are written with Java or the Java 6 Scripting interface JSR 223. Groovy, JRuby, JavaScript have been tested
  • Implementation of 2D geometry primitives, vectorization and segmentation
  • It is free (as in free speech and free beer)
  • Commercially friendly MIT open source software license, also called the X11 License
  • Annotations of point as different type of junctions, end points, hard or soft points
  • Annotations of lines as straight, curved, concave or inflection points
  • Programmed in Java
  • Can be used as a plugin for ImageJ, the leading Java open source project used in medical image processing
  • Image processing algorithms now work both in ImageJ and on Java's BufferedImage.

Particle analyzer

ShapeLogic 1.6 contains a Color Particle Analyzer.

Here is an example particle image embryos.jpg

Here is the result of running the non-customized particle analyzer on it.

The categories for the particles are only examples, it is easy to setup different rules for categorizing particles.

In ShapeLogic 1.7 train a neural network to categorize specific cells.

ShapeLogic 1.6 also contains the second version of a color particle counter. It also prints a smaller report of the particle's properties.


To run as a library for functional and declarative programming there are no requirements.

To run as an ImageJ plugin ShapeLogic uses the following libraries:

  • ImageJ ShapeLogic can either run as a plugin in popular ImageJ framework or stand alone in pure Java2D
  • Commons math: Math library for geometry
  • Antlr: For parsing build in filter language

You can run all current image processing algorithms outside ImageJ, using just a BufferedImage should you want to embed ShapeLogic in your application.

Optional requirements

These are used in unit tests, builds or old versions of image processing functionalities:

Development Status: Beta

  • ShapeLogic is in Beta, as of version 1.0.
  • ShapeLogic currently consists of 37,000 lines of Java code including 600 unit tests.

ShapeLogic C++

ShapeLogic C++ started as an attempt to port some algorithms from ShapeLogic Java. ImageJ makes image processing programming very accessible under Java. While there are great open source libraries in C++ there did not appear to be anything like ImageJ with an commercially friendly OSS license. Before algorithms could be ported from ShapeLogic Java some of the functionality of ImageJ had to be established. Simplicity of programming is a main concern.

This was mainly a question of finding the best OSS C++ libraries and getting them to work together. After a good deal of experimenting this was the libraries that were chosen:


2009/05/14 ShapeLogic Java 1.6 improve neural network and rules

  • Extend Multi-layer feed forward neural network to work with letter matcher
  • Load neural network from categorizer setup file
  • Load categorizer rules from categorizer setup file
  • Load columns for result table from categorizer setup file

2009/04/09 ShapeLogic Java 1.5 with machine learning released

  • Start combining machine learning and declarative programming
  • The categorize in Color Particle Analyzer can now either use rules or a multi-layer feed forward neural network, and it easier to select which particle properties to print out

The neural network need to be trained externally and you need override a class to import the weights. This override is simple but does require some knowledge of Java.

2009/03/22 ShapeLogic C++ 0.5 released

  • Added binary thresholds operations
    • Threshold with fixed limit of 127
    • Adaptive threshold with a small block size of 3
  • Added morphological operations
    • Dilate
    • Erode

Future plans for ShapeLogic

For more up to date information on ongoing development work look at these

Low hanging fruits for ShapeLogic Java

  • Vectorizer for particle analyzer is specialized for letter recognition and very coarse grained, should be adjusted to split edge into more lines
  • Expand OCR to cover lower case letters using neural network matching
  • Make custom rule sets or train neural networks to recognize specific cells. Users can upload rule sets or neural networks to
  • Add the ability of the user to define lazy data stream in the categorizer setup file.
  • The rule sets and neural networks that are now defined in categorizer setup file could just as well be defined in a database.
  • Component framework for hybrid and complex vision problems
  • HSV mode for the particle analyzer

Low hanging fruits for ShapeLogic C++

  • Make generic dialog to get parameters for algorithms
  • Optimize draw
  • Draw continues line instead of points
  • More pen sizes for draw
  • Change brushes to to have a class each brush, that takes parameters
  • Macro system

The test images for the particle analyzer

Here are 2 other test image for the particle analyzer. They are taken from the sample images from ImageJ.



Examples applications

  1. Mathematical problems from Project Euler. This is a list of 193 mathematical problems that can be solved by computers. They vary in complexity from simple to hard. The goal is to test ShapeLogic's new declarative and functional constructs on real problems and make sure they are terse and intuitive.