I'm a PhD student working in the field of computer vision and recently
used Perl for doing my research and am asking for an appropriate name
for my Perl module(s).
I implemented a geometrical toolbox called SUGR[1] for constructing
and testing points, lines, planes and transformations in 2D and 3D.
The toolbox is based on projective geometry and a simple but effective
uncertainty model, though one can use the tool without statistics,
too. See BACKGROUND section in this post for more details.
So, the question of my post is: what name should be used for this Perl
module? Currently, SUGR is not categorized to any toplevel name. IMHO there
are several possibilities, I could categorize it to some computational geometry
related field (Math::Geometry::SUGR) or some statistical field (Statistics::SUGR).
Since I cannot decide for one option or the other, I'd like to use
AI::SUGR since this toolbox can be used for reasoning with
uncertain geometric objects as you could do reasoning with logical
statements (plane $A is orthogonal to line $L, which in turn contains
point $X, without "choosing the epsilon", see BACKGROUND section).
So, what's the opinion of the community?
There is already a preview version of my library, it also
includes a special shell (based on the pdlshell) and a simple markup
language for offline computations. This is available from
http://www.ipb.uni-bonn.de/SUGR.html
-Stephan
Footnotes:
[1] SUGR is an acronym for "Statistically Uncertain Geometric
Reasoning"
############
# Details: #
############
BACKGROUND
----------
The (scientific) contribution of this work is the fact that the
geometrical toolbox uses simple statistical description (second
moments). This is helpful if you are not 100% sure about the exact
values of your points, lines and planes. For example if you
measure the length of your notebook with a simple ruler, you will
never know the length in - say - Angstrom (=1 hundred-millionth of
a centimeter), so you will always have some uncertainty about the
correct length.
Using simple statistics has several advantages: (i) you can propagate
the uncertainty to new geometrical objects. (ii) you get rid of the
"choosing-the-epsilon-problem"[2] when testing geometrical relations
such as "Does point X lie on the 3D-line L?". (iii) you can do a
weighted least-squares estimation to do _any_ kind of constructions
involving points, lines and planes in 2D and 3D.
Footnotes:
[2] The "Choosing-the-epsilon-problem" appears for example when you
want to test whether a number is zero. It is usually not really
zero, but close to it - so you choose a special small number
called epsilon and test if your number is smaller than epsilon.
INTERFACE
---------
# create a new 3D point, with an homogeneous 4-vector and
# a homogeneous 4x4 covariance matrix
$X = new SUGR::Point([0,1,1,1],
[[0.01,0 ,0 ,0],
[0 ,0.01,0 ,0],
[0 ,0 ,0.01,0],
[0 ,0 ,0 ,0]]);
# create two other points with
# the same covariance matrix as the first point
$Y = new SUGR::Point([0,2,3,1],$X->cov);
$Z = new SUGR::Point([2,2,0,1],$X->cov);
# construct a new 3D line using $X and $Y,
# including error propagation
$L = new SUGR::Line($X,$Y);
# and a plane with the third point $Z
$A = new SUGR::Plane($L,$Z);
# create a projective camera $P with given
# projection center $X0 (as a SUGR point!),
# rotation matrix $R and focal length $c with its
# variance $c_var
$X0 = new SUGR::Point([10,10,10,1],$X->cov);
$R = new PDL::Matrix([[0,1,0],[1,0,0],[0,0,1]]);
$P = sugr_ProjectiveCamera({ "X0" => $X0,
"R" => $R,
"c" => 1,
"c_var" => 0.001,
});
# construct a new 2D point as an image of $X with
# the projective camera $P
$x = new SUGR::Point2d($X,$P);
# test if two points $X and $Y are identical
$X == $Y
# test if a line $L is parallel to a plane $A in 3D
Parallel($A,$L)
--
Stephan Heuel fon: +49 228 73 2711
Institute for Photogrammetry fax: +49 228 73 2712
University of Bonn, Nussallee 15 mailto:stephan@heuel.org
53115 Bonn - GERMANY http://www.ipb.uni-bonn.de/~steve