MindImages - Documentation for P.C. version 1.00: 8 December 1992
V.G.A. required at the moment (unless there is sufficient
demand for support of other graphics adapters).
Program conceived and created by:
Eric Thompson : [email protected]
Rob Scott : [email protected]
Gordon Flanagan : [email protected]
To run MindImages from a dos prompt type:
MindImages was written to allow the creation of single image random dot
stereograms (sirds) from compressed depth information. The compression format
was specifically designed to allow direct transmission across the Internet
to the newsgroup alt.3d, where the interest in sirds has snowballed in the
last few months, thanks to Andy Kinsmans' Torus - a couple of hundred K
postscript bit image.
Needless to say, postscript images take up a lot of network bandwidth, so
it was decided to take the original depth information, compress it and
transmit the much smaller (5 - 30K typ.) files.
MindImages will take the files as input and create either:
An on screen black and white rds,
An on screen red/green or red/blue stereogram (use coloured glasses)
A postscript bit image to throw at your postscript printer.
There are two ways to view these stereograms. These are:
1) wide eyed.
2) cross eyed.
Both will create a 3d image in the brain, but the image will be inverted
using one way as opposed to the other. That is to say, parts of the image
which are raised when viewed wide eyed will descend into the screen or paper
if viewed cross eyed.
It is helpful when starting to put two small pieces of blu-tac or coloured
sticky tape on the top of the monitor. These should be at exactly 1/5 of
the display window apart, in the centre.
With the stereogram on the monitor or piece of paper:
1) At about 30 - 50 cm from the display, focus on a point directly
behind (3 metres or more away) so that the two marks are out of focus and
have split into four marks. Now, by adjusting your focus/distance try to
get the right hand mark as seen by the left eye and the left hand mark as
seen by the right eye to converge. When these lock together, keep the same
dopey look and allow your eyes to drop down onto the random pattern -
you should now be smiling as the 3d picture appears from nowhere.
2) At a distance that is comfortable, cross your eyes until you have
three marks in focus and gaze at the random pattern as above.
Note: If you are using the screen display, *Density 128 makes the picture
easier to see for most people, whereas *Density 200 is easier for a
postscript image (and saves toner).
Compressed file format:
[You need only read this if you are curious]
The first line of the compressed file contains a copyright message
terminated by a line feed and/or carriage return.
The following lines are separated by line feeds and/or carriage returns
at a convenient line width (usually 75 chars). These separators are ignored
by the program.
The next two bytes refer to the xcale and yscale respectively. The largest
size handled being 512x by 512y (xscale=1 yscale=1). An xscale of 2 and
yscale of 4 would describe depth info of a 256x by 128y grid. The scale
values are added to 33 to get them into the ascii range (this would have
been 32, the space character, but some terminals/machines strip trailing
In this case, the depth value has been limited to the range 0 - 63,
conveniently leaving 30 unused values in the ascii range after adding the
33 offset. Total range here is 33 to 126.
In creating the output file, a variation of run length encoding is used to
fill a large buffer with depth values and running counts (up to 96)
i.e. if there are 12 horizontal values of depth 25 then the buffer would
Now the unused ascii values come into play:
We can look at the previous 30 colour/count combinations (or up to the
current number of combinations processed-2 if we have done less than 30)
and if we find that this 25,12 combination has appeared within this range
at say, the 14th position back, then we would place the single value:
33+63+14=110 in our output file.
If however, this colour/count combination did not exist within this range,
then we would place the values:
33+colour and 33+count in our output file.
Thus if repeated values are present we reduce the total number of bytes
needed even further.
The last valid byte in the output file is a checksum which is the sum of all
the bytes in the title string that are greater than 32 added to (the sum of
all the succeeding bytes in the output file - 33, ignoring line feeds etc).
Now take this number MOD 64 and add 33 ...done!
The checksum allows a check on file integrity and helps to protect the
copyright string at the start which will be printed at the top left hand
corner of the printed image.