Image Processing and Graphics
Grayscale Image Processing
A C++ class library to do many boring and exciting things with
- Elementary pixel operations: assigning, subtracting, adding, etc. a
value to all pixels; comparing every pixel with a value; assigning,
adding, subtracting, comparing two images; computing image extrema,
various norms and ``scalar'' products.
- Operations on square or rectangular parts of an image without much
fuss, and without moving a lot of stuff around.
- Reading and writing
Group G (grayscale)
TIFF 6.0 file formats with automatic
recognition of the input image file format. When reading a TIFF file,
we can look up the value of a private or non-mandatory tag. Likewise,
we can add any optional or private tag into the TIFF file being created.
We can also iterate over and clone TIFF IFD entries.
- Squeezing, stretching and
coercing images. The latter
operation is an assignment of one image to another no matter what
their dimensions are. The source image would be shrunk or stretched
to fit. Any dimension ratios are possible.
Iterators for ``sweeping'' image processing: that
is, for an operation that involves every pixel in a systematic way.
Rather than writing a loop over all image rows and columns, we merely
specify an action to perform on the current pixel. The package
would take care of the iteration, which is
Image streams: objects
Image_iostream are safe pixel pointers. They permit
arbitrary iterations on an image. Image streams are just as
efficient as the naked pointers, yet they are safe.
Lazy images: objects that represent a ``recipe''
for making images. Rather than passing an image object as a return
value of a function, we return a lazy image instead. The full image
would be rolled out only when and where it is needed.
- Image filtering. The package supports several image
morphological. The filters are optimized
and done in-place. It seems that it takes noticeably more
time to read an image than to filter it. A convolution or a median filters
can be applied to rows only, to columns only, or to both
rows and columns. A general, non-separable 2D filtration is supported
- Non-deterministic 3x3-averaging that
may spare some pixels. The probability of pixel's survival
depends on how much it sticks out of its neighborhood.
- Lookup table substitutions are powerful and fast.
See the README file for a few examples.
- Fractal cloud generator of plasma fractals. It is
implemented as a LazyImage.
Every feature of the package is tested in the included
validation code. The README file tells far much more about the
features and how to use them.
- i686/FreeBSD 4.0, gcc 2.95.2
various commercial UNIX flavors (Sun Ultra-2/Solaris 2.6, HP-UX
B.10.10) with gcc 2.95.2
i686/Linux 2.2.14, gcc 2.95.2
Mac and PowerMac, Win95/WinNT
- Public Domain
- The current version is 2.4, December 2000.
The README file [plain text file]
Complete source code and
the validation/sample code
Handling TIFF files in Scheme
Advanced i/o and arithmetic compression classlib is required as a dependency
Sample GUI Class library
A C++ wrapper around a platform-independent XVT GUI engine (with a
distinct Windows flavor). The cornerstone class
XVTBasicWindow does all the registration chores, receives
events firsthand and handles them roughly, using appropriate (virtual)
handlers for finer processing. The class also has methods to handle
other controls. The package then defines a number of classes to
- handle modal and modeless dialogs, windows with subwindows
- display a grayscale image with high fidelity (which
involves a lot of playing with CLUT tables)
- manipulate color cells of CLUT, relying solely on Xlib
- implement a rubber rectangle
- SunOS and Solaris 2.x, HP-UX, g++ v2.6.3
- The current version is 1.2, September 1994.
Complete source code. The archive also includes the verification code for all features.
XVT library is required to actually run the code
Last updated January 1, 2006
This site's top page is
Your comments, problem reports, questions are very welcome!
Converted from SXML by SXML->HTML