about summary refs log tree commit diff
path: root/pamstereogram.html
blob: b035b60c15bfba3e835ed7857d059998ff185a5b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>Pamstereogram User Manual</title>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii"/>
</head>

<body>

<h1>pamstereogram</h1>

<p>Updated: 28 September 2010</p>

<p><a href="#contents">Table Of Contents</a></p>


<h2 id="name">NAME</h2>

<p>pamstereogram - create a single-image stereogram from a PAM
depth map</p>

<h2 id="synopsis">SYNOPSIS</h2>

<p>
<b>pamstereogram</b>
[<b>-help</b>]
[<b>-verbose</b>]
[<b>-blackandwhite</b> | <b>-grayscale</b> | <b>-color</b>]
[<b>-maxval=</b><i>value</i>]
[<b>-patfile=</b><i>pamfile</i>]
[<b>-texfile=</b><i>pamfile</i>]
[<b>-bgcolor=</b><i>color</i>]
[<b>-smoothing=</b><i>pixels</i>]
[<b>-xshift=</b><i>pixels</i>]
[<b>-yshift=</b><i>pixels</i>]
[<b>-magnifypat=</b><i>scale</i>]
[<b>-guidesize=</b><i>pixels</i>]
[<b>-dpi=</b><i>resolution</i>]
[<b>-crosseyed</b>]
[<b>-makemask</b>]
[<b>-eyesep=</b><i>inches</i>]
[<b>-depth=</b><i>fraction</i>]
[<b>-randomseed=</b><i>integer</i>]
[<i>infile</i>]
</p>



<h2 id="description">DESCRIPTION</h2>

<p>This program is part of <a href="index.html">Netpbm</a>.</p>

<p><b>pamstereogram</b> inputs a depth map (a map of the distances
from your eye of the points in a scene) and outputs a single-image
stereogram (SIS). A SIS is a 2-D image specially designed to appear
three dimensional when viewed with relaxed, slightly unfocused
eyes. What's exciting about single-image stereograms is that they
don't require special glasses to view, although it does require a bit
of practice to train your eyes to unfocus properly.  The
<b>pamstereogram</b> program provides a wealth of control over how the
stereogram is generated, including the following:</p>

<ul>
<li>black and white, grayscale, or color output</li>

<li>single-image random-dot stereograms (SIRDS), single-image
stereograms (SIS) using a tiled image, or mapped-texture stereograms
(MTS)</li>

<li>images targeting a given device resolution and eye separation</li>

<li>optional guide boxes to assist in focusing</li>

<li>the ability to trade off depth levels for easier viewing</li>

<li>choice of wall-eyed or cross-eyed stereograms</li>

</ul>
<p>The output is a PAM image on standard output.  Options control
the exact format of the PAM.  If you want a PNM (PBM, PGM, or PPM)
image, use <b>pamtopnm</b> on the output.  There is no need to convert
if you will use the image as input to a current Netpbm program, but
many other programs don't know what a PAM is.

<p>To make a red/green type of stereogram (that you view with 3-D
glasses) instead, see <b>ppm3d</b>.</p>


<h2 id="options">OPTIONS</h2>

<p>You may use either single or double hyphens to denote options.  You
may use either whitespace or an equals sign to separate an option name
from its value.</p>

<dl>

<dt><b>-verbose</b></dt>
<dd>Display messages about image sizes and formats and properties
of the stereogram being generated.</dd>

<dt><b>-blackandwhite</b></dt>
<dd>Produce a single-image random-dot black-and-white stereogram.
This is the default.</dd>

<dt><b>-grayscale</b></dt>
<dd>Produce a single-image random-dot grayscale stereogram.</dd>

<dt><b>-color</b></dt>
<dd>Produce a single-image random-dot color stereogram.</dd>

<dt><b>-maxval=</b><i>value</i></dt>
<dd>Designate the maximum value of each gray/color component, i.e.
the color resolution. Smaller values make the output image have
smaller numbers of unique grays/colors. If you don't specify
<b>-maxval</b>, <b>pamstereogram</b> uses the maxval of the input
image. This option has no effect with <b>-blackandwhite</b>.</dd>

<dt><b>-patfile=</b><i>pamfile</i></dt>
<dd>Specify an image to use as a repeated background pattern for
the stereogram instead of a random-dot pattern. Intricate images
generally produce a crisper 3-D effect that simpler images. The
output file will have the same maxval and format (black and white,
grayscale or color) as the pattern file. You cannot specify the
<b>-patfile</b> option along with <b>-blackandwhite</b>,
<b>-grayscale</b>, <b>-color</b>, or <b>-maxval</b>.</dd>

<dt><b>-texfile=</b><i>pamfile</i></dt>
<dd>Specify an image to use as the texture for a mapped-texture
stereogram.  The idea is that the depth-map image provides the depth
values of the 3-D object/scene while the texture image provides the
true-color values.  Consequently, the texture image should align with
the depth-map image.  (Note that it's required to have the same
dimensions.)  The texture image's background color is ignored when
blending colors.

<p>This option was new in Netpbm 10.53 (December 2010).</p>

<dt><b>-bgcolor=</b><i>color</i></dt>
<dd>Use <i>color</i> as the texture image's background color instead
of letting <b>pamstereogram</b> determine it automatically.  Specify
the color as described for the
<a href="libppm.html#colorname">argument of the ppm_parsecolor() library
routine</a>.  The <b>-bgcolor</b> option is meaningful only in conjunction
with <b>-texfile</b>.

<p>This option was new in Netpbm 10.53 (December 2010).</p>

<dt><b>-smoothing=</b><i>pixels</i></dt>
<dd>Horizontally blur non-background colors into background pixels up
to a distance of <i>pixels</i> pixels (default: 0).  This helps smooth
over distracting glitches introduced by the stereogram's color
constraints when producing a mapped-texture stereogram.
The <b>-smoothing</b> option is helpful when the texture image
includes smooth color transitions (as in a photograph) but makes crisp
texture images (as in a line drawing) appear blurry.
The <b>-smoothing</b> option is meaningful only in conjunction with
<b>-texfile</b>.

<p>This option was new in Netpbm 10.53 (December 2010).</p>
</dd>

<dt><b>-xshift=</b><i>pixels</i></dt>
<dd>Shift the pattern image (designated by <b>-patfile</b>) to the
right by <i>pixels</i> pixels (default: 0).
<!-- <b>-xshift</b> is helpful when creating "true-color" stereograms. -->
This option is valid only along with <b>-patfile</b>.</dd>

<dt><b>-yshift</b> <i>pixels</i></dt>
<dd>Shift the pattern image (designated by <b>-patfile</b>)
downwards by <i>pixels</i> pixels (default: 0). This option is
valid only along with <b>-patfile</b>.</dd>

<dt><b>-magnifypat=</b><i>scale</i></dt>
<dd>Magnify each pixel in the pattern file or each random dot by
integral scaling factor <i>scale</i>. Note that
<b>pamstereogram</b> applies the pattern magnification
<em>after</em> pattern shifting (<b>-xshift</b> and
<b>-yshift</b>).</dd>

<dt><b>-guidesize=</b><i>pixels</i></dt>
<dd>Draw a pair of <i>pixels</i> by <i>pixels</i> black squares on
a white background underneath the stereogram proper. These squares
help you guide your eyes into proper focus to view the 3-D image.
The trick is to focus your eyes some distance behind the image,
causing you to see four black squares, then continue altering your
focus distance until the middle two black squares fuse into a
single black square. At that point, a crisp, 3-D image will appear.

<p>If <i>pixels</i> is negative, <b>pamstereogram</b> will draw the
guide squares above the stereogram instead of below it. If
<i>pixels</i> is zero (the default), <b>pamstereogram</b> will draw
no guide squares.</p>
</dd>

<dt><b>-dpi=</b><i>resolution</i></dt>
<dd>Specify the resolution of the output device in dots per inch.
The default is 100 DPI, which represents a fairly crisp screen
resolution.

<p>Before Netpbm 10.53 (December 2010), the default was 96 DPI.</p>

</dd>

<dt><b>-crosseyed</b></dt>
<dd>Invert the gray levels in the depth map (input image) so that the 3-D
image pops out of the page where it would otherwise sink into the page and
vice versa. Some people are unable to diverge their eyes and can only cross
them. The <b>-crosseyed</b> option enables such people to see the 3-D image as
intended.  You can also specify the <b>-crosseyed</b> option if you prefer
using depth maps in which darker colors are closer to the eye and lighter
colors are farther from the eye.

<p>Before Netpbm 10.53 (December 2010), <b>pamstereogram</b> used higher
(lighter) numbers for things closer to the eye <em>without</em>
<b>-crosseyed</b> and vice versa.

</p>

</dd>

<dt><b>-makemask</b></dt>
<dd>Instead of a stereogram, output a PAM mask image showing
coloring constraints. New pixels will be taken from the pattern
file where the mask is black. Copies of existing pixels will be
taken from the pattern file where the mask is white. The
<b>-makemask</b> option can be used to help create more
sophisticated pattern files (to use with <b>-patfile</b>) Note that
<b>-makemask</b> ignores <b>-magnifypat</b>; it always produces
masks that assume a pattern magnification of 1.</dd>

<dt><b>-eyesep=</b><i>inches</i></dt>
<dd>Specify the separation in inches between your eyes. The
default, 2.5 inches (6.4 cm), should be sufficient for most people
and probably doesn't need to be changed.</dd>

<dt><b>-depth=</b><i>fraction</i></dt>
<dd>Specify the output image's depth of field. That is,
<i>fraction</i> represents the fractional distance of the near
plane from the far plane. Smaller numbers make the 3-D image easier
to perceive but flatter. Larger numbers make the 3-D image more
difficult to perceive but deeper. The default, 0.3333, generally
works fairly well.</dd>

<dt><b>-randomseed=</b><i>integer</i>
<dd>Specify a seed to be used for the random number generator.
The default is to use a seed based on the time of day, to one second
granularity.

<p>It is useful to specify the seed if you want to create reproducible
results.  With the same random seed, you should get identical results
every time you run <b>pamstereogram</b>.

<p>This is irrelevant if you use a pattern file (<b>-patfile</b>
option), because there is no random element to <b>pamstereogram</b>'s
behavior.

<p>This option was new in Netpbm 10.32 (February 2006).

</dl>


<h2 id="parameters">PARAMETERS</h2>

<p>The only parameter, <i>infile</i>, is the name of an input file
that is a depth map image. If you don't specify <i>infile</i>, the
input is from standard input.</p>

<p>The input is a PAM image of depth 1. Each sample represents the
distance from the eye that the 3-D image at that location should
be.  Lower (darker) numbers mean further from the eye.

<h2 id="notes">NOTES</h2>

<h3 id="inputimages">Input Images</h3>

<p><b>pamstereogram</b> pays no attention the the image's tuple
type and ignores all planes other than plane 0.</p>

<p>Like any Netpbm program, <b>pamstereogram</b> will accept PNM
input as if it were the PAM equivalent.</p>

<h3 id="mappedtexture">Mapped-texture Stereograms</h3>

<p>In a <i>mapped-texture stereogram</i> (MTS), the 3-D image can be
drawn with true colors.  Unlike a SIRDS or tiled-image SIS, however,
the image portrayed by an MTS is apparent in normal 2-D viewing.  It
appears repeated multiple times and overlapped with itself, but it is
not hidden.</p>

<p>You create an MTS with <b>pamstereogram</b> by passing the filename
of a PAM <q>texture image</q> with a <b>-texfile</b> option.  A
texture image portrays the same 3-D object as the depth-map image but
indicates the colors that the program should apply to the object.</p>

<p><b>pamstereogram</b> ignores the texture image's background color when it
overlaps copies of the 3-D object.  This prevents, for example, a bright-red
object on a black background from being drawn as a dark-red object (a blend of
50% bright red and 50% black); instead, the program ignores the black and the
object remains bright red.  A consequence of this feature is that an MTS looks
best when the objects in the texture image have a crisp outline.  Smooth
transitions to the background color result in unwanted color artifacts around
edges because the program ignores only <em>exact</em> matches with the
background color.</p>

<p>You should specify a larger-than-normal value for <b>-eyesep</b>
(and/or <b>-dpi</b>) when producing an MTS.  Otherwise, the 3-D object will
repeat so many times that most colored pixels will overlap other colored
pixels, reducing the number of true-colored pixels that remain.</p>

<p>An MTS can employ a background pattern (<b>-patfile</b>).  In this
case, <b>pamstereogram</b> replaces background pixels with pattern pixels in
the final step of generating the image.</p>


<h3 id="notes_misc">Miscellaneous</h3>

<p>A good initial test is to input an image consisting of a solid
shape of distance 0 within a large field of maximum distance (e.g., a
white square on a black background).</p>

<p>With the default values for <b>-dpi</b> and <b>-eyesep</b>, pattern
images that are 128 pixels wide can tile seamlessly.</p>


<h2 id="examples">EXAMPLES</h2>

<p>Generate a SIRDS out of small, brightly colored squares and
prepare it for display on an 87 DPI monitor:</p>

<pre>
    pamstereogram depthmap.pam \
        -dpi 87 -verbose -color -maxval 1 -magnifypat 3 \
        &gt;3d.pam
</pre>

<p>Generate a SIS by tiling a PPM file (a prior run with
<b>-verbose</b> indicates how wide the pattern file should be for
seamless tiling, although any width is acceptable for producing
SISes):</p>

<pre>
    pamstereogram depthmap.pam -patfile mypattern.ppm &gt;3d.pam
</pre>


<p>Generate an MTS by associating colors with a depth-mapped object
(using a large eye separation to reduce the number of repetitions of
the texture image) and twice smoothing over background-colored
speckles:</p>

<pre>
    pamstereogram depthmap.pam \
        -texfile colormap.pam -smoothing 2 -eyesep 3.5 \
        &gt;3d.pam
</pre>


<h2 id="seealso">SEE ALSO</h2>
<ul>
<li><a href="pam.html">pam</a></li>

<li><a href="pamsistoaglyph.html">pamsistoaglyph</a></li>

<li><a href="ppm3d.html">ppm3d</a></li>


<li>Harold W. Thimbleby, Stuart Inglis, and Ian H. Witten.
<em>Displaying 3D Images: Algorithms for Single Image Random Dot
Stereograms</em>. In IEEE Computer, <strong>27</strong>(10):38-48,
October 1994.  DOI <a
href="http://dx.doi.org/10.1109/2.318576">10.1109/2.318576</a>.</li>

</ul>


<h2><a id="history">HISTORY</a></h2>
<p><b>pamstereogram</b> was new in Netpbm 10.22 (April 2004),
but probably broken beyond usability until 
Netpbm 10.32 (Februrary 2006) and Netpbm 10.26.23 (January 2006).</p>


<h2><a id="author">AUTHOR</a></h2>
<p>Copyright (C) 2006, 2010 Scott Pakin, <a href="mailto:scott+pbm@pakin.org">scott+pbm@pakin.org</a>.</p>
<h2><a id="contents">Table Of Contents</a></h2>
<ul>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<li><a href="#options">OPTIONS</a></li>
<li><a href="#parameters">PARAMETERS</a></li>
<li><a href="#notes">NOTES</a>
<ul>
  <li><a href="inputimages">Input Images</a></li>
  <li><a href="mappedtexture">Mapped-texture Stereograms</a></li>
  <li><a href="notes_misc">Miscellaneous</a></li>
  </ul>
</li>
<li><a href="#examples">EXAMPLES</a></li>
<li><a href="#seealso">SEE ALSO</a></li>
<li><a href="#history">HISTORY</a></li>
<li><a href="#author">AUTHOR</a></li>
</ul>
</body>
</html>