285 lines
9.8 KiB
HTML
285 lines
9.8 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
<title>ALE User Manual: Rendering</title>
|
|
|
|
<style type="text/css">
|
|
TABLE.ba { max-width: 678; text-align: center; padding-bottom: 15; padding-top: 5}
|
|
TABLE.inline { padding-right: 300; clear: left}
|
|
TD.text_table {padding-left: 2; padding-right: 2; border-width: 1}
|
|
H2 {clear: left}
|
|
P {max-width: none; padding-right: 300; clear: left}
|
|
BLOCKQUOTE {padding-right: 400 }
|
|
LI {max-width: 640; clear: left}
|
|
P.footer {max-width: none; width: auto; padding-left: 0}
|
|
P.header {max-width: none; width: auto; padding-left: 0}
|
|
HR.main {max-width: 640; clear: left; padding-left: 0; margin-left: 0}
|
|
HR.footer {clear: both}
|
|
</style>
|
|
</head><body>
|
|
|
|
|
|
|
|
<table align=right valign=top width=160>
|
|
<td valign=top height=600 width=160>
|
|
<a href="http://auricle.dyndns.org/ALE/">
|
|
<big>ALE</big>
|
|
<br>
|
|
Image Processing Software
|
|
<br>
|
|
<br>
|
|
<small>Deblurring, Anti-aliasing, and Superresolution.</small></a>
|
|
<br><br>
|
|
<big>
|
|
Local Operation
|
|
</big>
|
|
<hr>
|
|
localhost<br>
|
|
2684415918<br>
|
|
</table>
|
|
|
|
|
|
|
|
<p><b>[ <a href="../">Up</a> ]</b></p>
|
|
<h1>ALE Rendering</h1>
|
|
|
|
Rendering determines how an output image is constructed from a series of
|
|
aligned input frames. The incremental renderers, merging and drizzling, update
|
|
the output image after reading each new frame from the series, whereas
|
|
non-incremental renderers wait until the last frame has been loaded before
|
|
producing output. More than one renderer can be involved in producing the
|
|
final output. Available rendering options are outlined below.
|
|
|
|
<h2>Merging</h2>
|
|
|
|
Merging, the default incremental renderer, works most effectively on images
|
|
that have no large changes in scale (e.g. camera zooming). Since it uses
|
|
bilinear interpolation, output images are approximately convolved with the
|
|
triangle, or Bartlett, filter, and may appear to have reduced contrast and
|
|
resolution when compared with the output of other renderers.
|
|
|
|
<h2>Drizzling</h2>
|
|
|
|
The drizzling renderer is an incremental renderer that can usually produce
|
|
better images than merging, but it works most effectively with devices having
|
|
very little blur and optical distortion. Devices sampling very small angles of
|
|
the scene at each pixel are ideal; hence, if very fine staircase aliasing is
|
|
visible in the input frames, drizzling should work very well. (For creation of
|
|
higher resolution images with drizzling, use also the --scale option described
|
|
below.)
|
|
|
|
<pre>
|
|
--drizzle-diam=x Drizzle with input pixel diameter x (where x > 0)
|
|
--drizzle-only If drizzling, output black for pixels with no drizzle data.
|
|
</pre>
|
|
|
|
<p>For more information about drizzling, see the paper by Richard Hook and
|
|
Andrew Fruchter, "Variable-Pixel Linear Combination", or the following URL:
|
|
|
|
<p><a href="http://www.cv.nrao.edu/adass/adassVI/hookr.html">http://www.cv.nrao.edu/adass/adassVI/hookr.html</a>
|
|
|
|
<h2>Point-spread Function (PSF)</h2>
|
|
|
|
<p>Non-incremental renderers use a point-spread function to model the optical
|
|
and electronic properties of the capture device used. The PSF can be specified
|
|
in terms of a linear and non-linear component. The non-linear component is
|
|
disabled by default.
|
|
|
|
<h3>Determining the PSF</h3>
|
|
|
|
<p>The point-spread function can be approximated through trial-and-error or
|
|
based on known scenes. ALE includes a script that numerically approximates the
|
|
point-spread function based on images captured from known scenes. This script
|
|
can be found in the source distribution
|
|
(<code>d2/render/psf/ale-psf-calibrate</code>).
|
|
|
|
<h3>Device Specification</h3>
|
|
|
|
If a device is known to ALE, then its PSF can be implicitly set with the device
|
|
option.
|
|
|
|
<pre>
|
|
--device <d> Set the capture device to <d>.
|
|
</pre>
|
|
|
|
Available devices are as follows:
|
|
|
|
<pre>
|
|
xvp610_320x240 IBM PC Camera Pro (XVP610) in 320x240 mode.
|
|
</pre>
|
|
|
|
<h3>PSF specification</h3>
|
|
|
|
<p>The PSF can also be explicitly specified by using one or both of the psf
|
|
options. These options have precedence over the device option.
|
|
|
|
<pre>
|
|
--lpsf <p> Set linear colorspace point-spread function to <p>
|
|
--nlpsf <p> Set non-linear colorspace point-spread function to <p>
|
|
</pre>
|
|
|
|
Available explicit point-spread functions are as follows:
|
|
|
|
<pre>
|
|
box=<d> Set the PSF to a box filter with diameter <d>.
|
|
stdin Specify a custom filter at runtime.
|
|
<p>+<p> Summation of two functions
|
|
</pre>
|
|
|
|
<h2>Unsharp Mask (USM) Renderer</h2>
|
|
|
|
<p>This non-incremental renderer uses an unsharp mask to compensate for
|
|
blur introduced by the image capture device. It is fairly inexpensive
|
|
computationally, but it may not be effective in all cases.
|
|
|
|
<pre>
|
|
--usm <m> Apply an unsharp mask with multiplier <m>.
|
|
</pre>
|
|
|
|
<h2>Irani-Peleg iterative solver</h2>
|
|
|
|
<p>This non-incremental renderer is very general, and attempts to reconstruct the
|
|
original scene based on the captured frames and the PSF. Unlike the USM
|
|
renderer, it can compensate for blur introduced by the incremental
|
|
renderers, and it may be more effective than the USM renderer in compensating
|
|
for blur introduced by the image capture device.
|
|
|
|
<p>Note that this method can take a long time to produce output. If
|
|
incremental output is enabled (see below), output is written after each
|
|
iteration is complete. Using more iterations will generally improve output, up
|
|
to the point of convergence, when additional iterations have no effect. A dot
|
|
is displayed to indicate the completion of each iteration.
|
|
|
|
<pre>
|
|
--ips <i> Run <i> iterations.
|
|
</pre>
|
|
|
|
<p>For more information on the iterative backprojection technique of Michal Irani and
|
|
Shmuel Peleg, see their paper, "Improving Resolution by Image Registration", at
|
|
|
|
<p><a href="ftp://ftp.wisdom.weizmann.ac.il/pub/irani/PAPERS/SR_CVGIP91.pdf">ftp://ftp.wisdom.weizmann.ac.il/pub/irani/PAPERS/SR_CVGIP91.pdf</a>
|
|
|
|
<h2>Exposure Registration</h2>
|
|
|
|
<p>By default, ALE adjusts an exposure model to minimize differences in tone
|
|
between frames. The option <code>--exp-noregister</code> indicates that
|
|
exposure should be assumed uniform across all frames. In this case, no
|
|
adjustment is performed.</p>
|
|
|
|
<pre>
|
|
--exp-register Register exposure between frames. [default]
|
|
--exp-noregister Assume uniform exposure across all frames.
|
|
</pre>
|
|
|
|
For more information about analyzing and processing images having differing
|
|
exposures, see Steve Mann's comparametric paper, at
|
|
|
|
<p><a href="http://wearcam.org/comparam.htm">http://wearcam.org/comparam.htm</a>
|
|
|
|
<h2>Certainty-weighted Rendering</h2>
|
|
|
|
<p>The exposure model in ALE includes an associated certainty function, which
|
|
quantifies the reliability of sensor measurements. By default, this function
|
|
is raised to the zeroth power to obtain uniform certainty for all measurements.
|
|
To specify a different certainty exponent, the option <code>--cx</code> can be
|
|
used.
|
|
|
|
<pre>
|
|
--cx <x> Render with certainty exponent <x>
|
|
--no-cx Render with uniform certainty. [default]
|
|
</pre>
|
|
|
|
Note that ALE uses a one-sided certainty function, biased by
|
|
backprojection value, in Irani-Peleg rendering. In some cases, this approach
|
|
seems to offer better results than the unbiased function used in drizzling and
|
|
merging. For more information on the certainty weighting approach used by ALE,
|
|
see the ALE source code.
|
|
|
|
<p>For more information on Steve Mann's original approach to certainty-weighted
|
|
rendering, see his comparametric paper, at
|
|
|
|
<p><a href="http://wearcam.org/comparam.htm">http://wearcam.org/comparam.htm</a>
|
|
|
|
<h2>Scale factor</h2>
|
|
|
|
Rendering with a larger scale factor causes internal data structures to store
|
|
more information, resulting in image output of the specified larger scale.
|
|
Larger scales can improve alignment precision and output image quality, but can
|
|
also increase alignment and rendering times.
|
|
|
|
<pre>
|
|
--scale=x Scale images by the factor x (where x is at least 1.0)
|
|
</pre>
|
|
|
|
<h2>Image extents</h2>
|
|
|
|
The --extend option records pixel data that falls outside of the region of the
|
|
first frame in the sequence. This can be useful for providing additional
|
|
alignment constraints or creating panoramic image mosaics. (See also the
|
|
description of the --follow option in the <a href="../alignment">alignment</a>
|
|
section.)
|
|
|
|
<pre>
|
|
--extend Increase image extents to accommodate all pixel data.
|
|
--no-extend Don't increase extents; crop to original frame. [default]
|
|
</pre>
|
|
|
|
<h2>Incremental output</h2>
|
|
|
|
By default, the output file is written every time a renderer completes an
|
|
update cycle. In order to suppress output until the final image is rendered,
|
|
specify the --no-inc option.
|
|
|
|
<pre>
|
|
--inc Produce incremental output. [default]
|
|
--no-inc Don't produce incremental output.
|
|
</pre>
|
|
|
|
<h2>Pixel replacement</h2>
|
|
|
|
<p>When using the merging or drizzling renderer, --replace indicates that each
|
|
new frame should replace the corresponding region of the rendering, instead of
|
|
being averaged with data from previous frames. This option was originally
|
|
suggested by Jeff Treece for use in stabilization of video streams. His
|
|
approach to stabilization is outlined below.
|
|
|
|
<h3>Video Stabilization</h3>
|
|
|
|
<p>If the files
|
|
|
|
<pre>0.ppm, 1.ppm, ..., 9.ppm</pre>
|
|
|
|
represent frames from an unstabilized video stream, then the following sequence
|
|
of commands may result in a stabilized sequence:
|
|
|
|
<pre>
|
|
ale --replace 0.ppm 1.ppm 1.stable.ppm
|
|
ale --replace 1.stable.ppm 2.ppm 2.stable.ppm
|
|
ale --replace 2.stable.ppm 3.ppm 3.stable.ppm
|
|
.
|
|
.
|
|
.
|
|
ale --replace 8.stable.ppm 9.ppm 9.stable.ppm
|
|
</pre>
|
|
|
|
<p>The resulting stabilized sequence would be:
|
|
|
|
<pre>0.ppm, 1.stable.ppm, 2.stable.ppm, ..., 9.stable.ppm</pre>
|
|
|
|
<h3>Option Syntax</h3>
|
|
|
|
<pre>
|
|
--replace Replace overlapping areas when merging and drizzling.
|
|
--no-replace Do not replace. [default]
|
|
</pre>
|
|
|
|
|
|
<br>
|
|
<hr>
|
|
<i>Copyright 2003, 2004 <a href="mailto:dhilvert@auricle.dyndns.org">David Hilvert</a></i>
|
|
<p>Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
|
|
|
|
|
|
</body>
|
|
</html>
|