From: Ian Scott <ian.m.scott@st...>  20090106 13:12:01

Matthew Leotta wrote: > Hi Everyone, > > As part of writing my thesis, Prof. Mundy has suggested that I write > VXL book chapters for some of the supporting libraries I have written > and try to promote them to core if there is community interest. The > plan is to contribute book chapters both to VXL and as appendices in > my thesis. One such library is vidl2 which is already in the works to > move to core. I would like to gauge the interest in promoting a > couple of others. Both of these would need to be renamed when moved, > I'm open to suggestions on naming. > > > 1) BSTA  Brown Statistical Library (brl/bbas/bsta) > This is a template library for probability distributions which is > templated over dimension and numerical type. The current code is > focused on Gaussian distributions and mixtures of distributions, but > the framework is designed to work with arbitrary distributions. There > is also some old code in the library that does not fit in the > framework and would need to be cleaned out. > Currently implemented uses: video background modeling and > probabilistic voxel world modeling. > Dependencies: vnl and vnl_algo (deprecated code also uses vbl) There is definitely room for a distributions library in core. All of our code currently depends on vpdfl and pdf1d which have provided probability distributions over vectors and scalars respectively for a very long time. I think bsta's more general templated type is a better idea here. A caveat: I know mul/vpdfl very well and bsta only from skimming the code for twenty minutes. A doxygen build of bsta would be helpful as a start, but isn't in our or kitware's documentation. The problems of comparing two libraries (or languages) are well known (see Stroustrup's FAQ) and generally solved by refusing to engage in a comparison. In the case of a promotion proposal, we really do need to compare the libraries, and come to conclusion about the features we would like to see in a core library. I think someone from Brown should look at vpdfl and discuss its limitations from your needs. There are some other features of vpdfl/pdf1d that I haven't found in bsta. A couple of the more important features are 1. Types that are independent of vectorlength. We work with vectorspaces of dimensions from 1 to 100000. Most of the time we cannot know the dimensionality until runtime, and even if we did, the proliferation of types and object code would be prohibitive. 2. A base class (at least over the double scalars and vectors) set up as a strategy pattern, so that the actual distribution in use can be selected at runtime. 3. The base class should have API to perform the following a. mean and stddev (or throw for those types for which it is not meaningful). b. For double vectors and scalars we need p, grad_p, log_p (for accuracy and efficiency), threshold, nearest_plasusible, c. Independent sampling (must store an RNG somewhere) d. Estimating parameters from population. (Although there is no "best" algorithm for many distributions) > > > 2) IMESH  Indexed Mesh Library (brl/bbas/imesh) > This is a library for representing 2d surface meshes in Nd > (usually 2d or 3d) space. The mesh is represented by indexing into > vectors of data. The basic data structures provide an index face > mesh. An indexed halfedge representation can optionally be computed > for fast traversal of manifold meshes. The halfedge data structure > includes iterators for mesh surface traversal. There is code for > reading and writing some mesh file formats and algorithms for basic > mesh operations like triangulation and subdivision. There is also an > imesh_algo library with more complex algorithms like PCA on mesh > vertex positions, kdtrees for mesh faces, implicit surfaces from > meshes, and projecting 3d meshes into images. > Currently implemented uses: deformable vehicle mesh models and meshing > of buildings from lidar. > Dependencies: limited use of vgl and vul (these could be removed if > necessary to make imesh level 1 core). imesh_algo depends on vil, > vgl_algo, vnl_algo, and vpgl. > > > I think VPGL is also a good candidate for promotion to core, but > probably not as part of my thesis work. Well you would have to promote vpgl first before imesh_algo, and I'm not sure of the point of promoting imesh without imesh_algo. > > I'd be interested to know if anyone is using these libraries and if > there is any interest in promoting either of these to core. > IIRC The last time we had the discussion about this, the promotion should be supported by another group who was successfully using the author's code. This does appear to be the case for vpgl. Regards, Ian. 