1 \documentclass[11pt]{article} 2 \parskip1mm\parindent0mm\advance\textheight5cm\advance\textwidth4cm\advance\oddsidemargin-2cm\advance\topmargin-2cm 3 \def\TargetJr{{T\kern-0.2em arget\kern-0.3em\lower.5ex\hbox{\Large J}\kern-0.13em r}} 4 \def\by#1.{{\normalsize\sf\it(#1)}}\relax 5 \edef\@{@}\edef\<{<}\edef\|{|} 6 \catcode64=\active\def@#1@{{\em#1\/}} 7 \catcode124=\active\def|#1|{{\tt#1}} 8 \catcode60=\active\def<#1>{\hspace*{-3mm}{\bf#1}} 9 \catcode42=\active\def*#1*{\hfil\penalty-8000\section{#1}} 10 \catcode95=\active\let_\_ 11 \begin{document} 12 13 \centerline{\bf\large 14Minutes of the \TargetJr{} meeting at Orlando, December 9\&10, 1999. 15 } 16 17 18* Participants: * 19 20 \begin{tabbing} 21Manchester: ~ \= Dave Cooper, Alan Beveridge \\ 22GE/CRD: \> Joe Mundy, Richard Hartley, Don Hamilton, Peter Tu \\ 23Oxford: \> Andrew Zisserman, Andrew Fitzgibbon, David Capel, Geoff Cross, 24 Karen McGaul, Fred Schaffalitzky \\ 25Leuven: \> Peter Vanroose, Joris Schouteden \\ 26Zurich: \> Manuel Oetiker, Stephan Scholze, Andreas Turina \\ 27 \end{tabbing} 28 29 30* Overview and GE demo \by Joe Mundy. * 31 32<GE concerns:> 33 34-- \TargetJr{} fragmentation 35 36-- Repository fragility 37 38-- Too infrequent coordination 39 40-- Departure of Bill Hoffman 41 42<Recent developments at GE:> 43 44-- Improved junction closure of Canny edge detection through @region analysis@ 45(class |IntensityFace|). Allows planar intensity fit. Note that regions are 46subpixel. 47 48-- boolean operations (intersection, \dots) on solids, implemented using 49BSPTree. Useful for (e.g.) refining 3D shape from contours in different 50views. 51 52 53* Oxford demo \by Andrew Fitzgibbon. * 54 55demo of new `vgui'. 56 57 58* Leuven overview \by Peter Vanroose. * 59 60overview of new functionality, and of research projects using \TargetJr. 61 62 63* Reorganisation of \TargetJr{} packages \by Andrew Fitzgibbon. * 64 65Ideally, we want a software environment which is easy to learn/read.\\ 66@keywords:@ |consistency|; |power| (algos+interface); 67|lightweight|; |compatibility| (e.g.~MMX). 68 69<Ways of achieving this:> rewrite (the model used when Target junior was 70created from Target), springclean (used for \TargetJr{} version 3). 71Rewrite has the advantage that above goals are achievable. The 72disadvantage of any springclean is that bugs are reintroduced. 73 74-- Proposed libraries in the `cleanland' |v$x$l| suite: 75|vcl| (ISO compatibility level), |vbl| (basics layer), |vsl| (spatial objects), 76|vnl| (numerics), |vil| (imaging), |vgl| (GUI). \\ 77An example application (xcv) should be included. 78 79<Did the following experiment:> 80-- Can xcv be rewritten from scratch (but `cleanly') in 1 day by 4 people? 81Participants: Andrew Fitzgibbon, Karen McGaul, Fred Schaffalitzky, David Cooper. 824 hours at the whiteboard, setting up guiderules and structure, then 834 hours of programming (including grabbing existing \TargetJr{} code). 84At that point, numerics demos run, basics library contains 20 ``.h'' files 85 86-- In order to obtain such a result, @clean coding rules@ are needed. 87(Note that it will be difficult to decide on such rules, as tastes differ\ldots) 88AWF: It may be difficult, but there will be agreement. 89Appendix 3 contains an initial list, as discussed at the Oxford/Manchester meeting. 90 91<Discussion:> 92 93-- There will be problems in re-writing algorithms: now depending on (say) 94Topology, must be rewritten in an independent way. This could cost several days 95per algorithm. 96 97-- How to reconcile different @paradigms@, and possibly perform paradigm 98change (from ``old but functional'' code to ``new, clean'' code)~? \\ 99Examples: embedding dimension splitup (|IUPoint_2d| -- |IUPoint_3d|); 100 |CoolList| node sharing vs.~STL; 101 102-- To avoid that non-clean code enters `cleanland', some @people@ have to 103function as whatchdog, and perform the actual move. 104 105-- How can we assure that `smart, exotic' behaviour (like large image support, 106hacks needed for a specific platform, \ldots) is not destroyed by this move? 107 108-- Have to avoid code duplication! I.e., move implementation, and leave a 109`pointer' to it in the old place. 110Gradually, the old \TargetJr{} will be re-implemented in terms of the new 111design. 112 113<Summary:> 114 115-- Rationalise the basic functionality in \TargetJr{}, forming a 116``reptilian brain'' area, around which `cleanland' can be built. 117 118-- Gradually re-implement existing algorithms and structures in `oldland', 119taking care of maintaining its functionality. 120 121-- The resulting @clean@ system alone should be capable of doing non-trivial 122demos: we will define 5 ``killer demos'' (like VanDuc Canny), see further. 123 124-- @Timing:@ design meeting by the end of January (3 to 5 days, 5 to 8 people, 125possibly in Oxford), which results in a clean reptilian brain core system. 126The complete cleanland system must be ready before ECCV and CVPR (June 2000). 127 128 129* \TargetJr{} and the IUE \by Joe Mundy. * 130 131<The current situation:> 132 133DARPA is stopping (after 25 years) its financial support for image processing 134research, so the IUE has no money any more. AAI will no longer be able to 135continue its IUE support. 136 137<How to proceed:> 138 139either (A) IUE goes its own way (if there is still an active IUE community), \\ 140or (B) we incorporate the IUE bits in our restructured \TargetJr{} 141 (in much the same way as we do with the \TargetJr{} bits). \\ 142Good points in the IUE are e.g. its neat @structure@, its transform graph 143network (local coordinate systems, and transforms between neighbours, 144cf. robotics), templated images, its documentation system, and the algorithms 145embedded in the |Tasks-IUE| package. 146 147We will ask the IUE community (|iue-users\@aai.com|) which path (A or B) they 148prefer. No explicit choice in favour of A will imply B. 149 150* Makefiles \by Richard Hartley. * 151 152<Current situation:> 153in order to build a new application, one has to spend several hours 154finding out what the |IULIBS| variable should look like. 155 156The point is that I don't (want to) know that libraries which I need, are 157themselves using a (possibly changing) set of other libraries. 158 159<Proposal:> 160It is possible to setup the makefiles so that |IULIBS| is automatically 161determined, using a pre-generated global |iu_library_table| and an 162|IU_LibDependencies| file in every library directory. 163 164Your (application) library only has to specify |IMMEDIATE_LIBS|, include 165the auto-generated |LDLIBS.mk| and then set |IULIBS| equal to 166\verb|$(STDLIBS)|. %$ 167|USES| is no longer used to find libraries, only include files. 168Actually, |USES| can be dropped completely. 169 170<Discussion:> 171 172-- There are some concerns, like the danger of over-crosslink libraries, 173of makefiles becoming less readable, and of increased unwanted 174library/package interdependency because the makefile author does not have to 175specify |USES| any more, so has no control over unwanted dependencies. 176 177-- However, the advantages are more important, so we go for it. 178The objections can easily be overcome by appropriate changes to |rules.mk|, 179and by still requiring |USES|, but only issuing a warning when something 180outside of that list is being used. 181 182 183* STL (versus COOL) and portability status * 184 185-- Shall we start replacing |CoolList| etc.? This is very difficult because of 186the different semantics (be it in maybe only 1\% of the used places). 187 188-- The `cleanland' code will exclusively use STL. 189 190 191* Smart pointers \by Richard Hartley. * 192 193Using smart pointers avoids memory leaks without any extra effort. 194 195However, the current implementation (in Fresco's CORBA) is {\bf bad}: 196not the smart pointer @constructor@ should increment the refcount, 197the @assignment@ to something of type |\ldots_ref| should do. 198 199In the new implementation (|GeneralUtility/Basics/smart_ptr.h|), 200every |RefCntTimeStampMixin| can be made into a smart pointer. 201(Actually, every class which has methods |Protect()| and |UnProtect()|.) 202 203Note that it is still up to the user to actually @use@ smart pointers. 204 205Example: 206 {\obeylines\tt 207typedef IUE_smart_ptr\<Image> Image_ref; // this is in Image_ref.h 208Image_ref ptr = new Image(...); 209 } 210 211%%% RICHARD, COULD YOU INSERT YOUR CODE EXAMPLES HERE, PLEASE? 212 213We will include this in the ``reptilian brain'' design. 214 215 216* Video processing in \TargetJr \by Richard Hartley. * 217 218GE has a new Video package, which operates on either AVI files (NT only) or 219on Image sequences. A demo is shown, where we see the video playing, with 220spatial object overlay (Harris corners). \\ 221The package will be released soon, after some necessary cleanup. 222 223@Internals:@ classes |VideoMovie| (= list of clips), |VideoTake| (= header info: 224file + number of frames + list of frames), |VideoClip| (= ptr to |VideoTake|), 225|VideoFrame| (= ptr to codec), |VideoCodec| (sort of ImageInterface + framenr.), 226|VideoAsImage| (derived class from |Image|, also contains current frame nr.). 227 228For the GUI: all overlay planes (one for each frame) are populated in advance, 229before starting the video display. There is only one image plane, which is 230updated with the different frames during display of the video. 231 232<Discussion:> 233 234-- Patent issue: do we support MPEG? (We cannot distribute freeware MPEG 235readers/writers with a \TargetJr{} release without paying royalties). 236 237-- Do we need 4-D (time-aware) spatial objects? Note that a 4D object is more 238than just a list of 3D objects, one for each frame: a continuous time notion 239will e.g. allow to specify object @speed@ (which is necessary for e.g. 240predictive image coding). 241 242 243* The next release * 244 245Should be ready just before ECCV and CVPR, i.e., June 1, 2000. On ECCV a 246tutorial day is scheduled devoted to TargetJr/IUE (Peter Vanroose). Joe 247will try to organize a similar event at CVPR. 248 249Should contain 5 ``killer demos'', which should be completely written in 250`cleanland' code. Suggestions are: 251 252-- VanDuc Canny, Harris corner detection, line fitting. 253 254-- 3D geometry (boolean ops, BSPTree, Cameras, VRML I/O). 255 256-- geometry GUI interaction, in the style of |xfig|. 257E.g.: edit conic parameters, draw bitangent~\ldots\ 258Also: plane overlay + update (timestamp); RTree selection speed; extrusion. 259 260-- MultiView: find point correspondences, compute fundamental matrix, display 261epipolar geometry. 262 263-- a 10 to 20 line code example, showing how easy it is to program \TargetJr. 264 265-- other suggestions are welcome (e.g.: Video; splines/snakes; \ldots) 266 267 268<Timing:> 269 270 \begin{tabbing} 271February 1: ~ \= design meeting, first version of core `reptilian brain'. \\ 272March 1: \> end of pass 1, including the 5 demos. \\ 273April 1: \> end of pass 2, including fully functional demos. \\ 274May 1: \> documentation (incl. example code) ready. \\ 275June 1: \> CD release, possibly including NT binaries. 276 \end{tabbing} 277 278* A new name ? * 279 280-- Several suggestions are made, but nothing really appealing came up. 281Acronyms versus full names (of, e.g., historical persons, from literature, 282opera, \ldots) 283 284-- New suggestions are welcome. The final decision is for June 1, 2000. 285 286 287* GUI issues --- the Oxford/Manchester VGUI design * 288 289-- David Cooper sketches GUI history at Manchester: \\ 290never liked Fresco; tcl(/tk) looked promising, but does not scale well to 291large GUIs; now prefer Qt (but: need to work out object display). 292 293<Introduction> \by Andrew Fitzgibbon. 294 295-- a GUI is a necessary I/O interface to a package like \TargetJr. 296 297-- but try to be as independent as possible from the graphics package used. 298 299-- @2 design choices:@ 300 301- VGUI deals with geometry, not widgets/buttons\ldots 302~(note: this was one of Parmesan's mistakes.)\\ 303$\Rightarrow$ able to use MFC or Qt or GTK or glut or glX or Motif or \ldots \\ 304VGUI codes the geometry, the graphical package does the rendering and widgets. 305 306- Assume fast OpenGL is available (with Mesa as a fallback). \\ 307(Note: OpenGL has a pure 3D interface: you give it 3D directives: absolute 308coordinates and camera position ($4\times4$ matrix).) 309Assuming that only OpenGL is supported greatly simplifies the design. 310(Should maybe support Direct3D in the future?) 311 312<VGUI design:> 313 314A @tableau@ is a screen rectangle (``canvas/context/subwindow''), which 315receives events and draws GL. It has methods |draw()| and |handle(event e)|. 316(Actually, |draw()| is an event, not a method.) 317 318An application consists of several tableaux. Some have already been 319predefined, like an image drawer, an image zoomer, an `acetate' (which just 320draws its children one after another), a point overlay, an image raster \ldots 321 322Example of an application: video with point overlay. Consists of $2+3n$ 323tableaux: a top ``image zoom'' tableau, an ``image deck'' with $n$ 324``acetate'' children, each having an image drawer and point overlay as 325children. 326 327<Discussion:> 328 329-- some technical issues (``does it do 16-bit images or colormapped images?'') 330will have to be answered in the coming days. 331 332-- how can we provide backward compatibility with Parmesan? nobody seems to be 333willing to write a Fresco implementation, although this is perfectly possible 334but probably time consuming. 335 336-- There is no general camera support in GL; how to use a non-linear camera, 337like radial distortion? 338\\ Answer: you will need to do the rendering manually, line by line, so 339should write an appropriate tableau (VGUI_nonlinear_camera_tableau for 340example). 341 342<Case study: GTK implementation> \by Karen McGaul. 343 344%%% KAREN, PLEASE FILL IN DETAILS. 345 346<Status:> almost ready for release, which is planned for January 8, 2000. \\ 347there are plans for a netscape plugin. \\ 348MFC: has to be done. 349 350 351* \TargetJr{} and VTK \by Joris Schouteden. * 352 353-- goal: GUI must be able to do 3D editing/picking, which vtk provides. 354 should be easily extensible $\Rightarrow$ plugin system. 355 356-- New |ImportVtk| package provides a \TargetJr{} to vtk interface. 357vtk is mainly used for visualisation (on top of OpenGL). 358 359-- GUI independent C++ @manipulators@ have been set up for interaction. 360They receive events from GUI, which cause calling one of the functions 361|finish()|, |cancel()| or |temporary()|. 362 363A demo is shown (uses Qt as GUI): \\ 364image can be rotated; corner detector $\Rightarrow$ point overlay. 3653D points can be selected. 366 367 368* VTK and \TargetJr{} \by Peter Tu. * 369 370The @Visualisation ToolKit@ is open source, $ > 500 $ C++ classes. 371See |http://www.kitware.com|. 372 373Rendering primitives: point, line, polygon, triangular strip, volume, \ldots 374 375Easy to use (e.g.) \TargetJr{} Numerics within a vtk application. 376 377Currently not very strong on 2D, not recommended for 2D work. 378 379 380* Java advanced imaging (JAI) and Java3D \by Joe Mundy. * 381 382These are new Java libraries to support image operations; 383still too slow to be used. 384 385VanDuc has ported \TargetJr's Topology to Jave3D. 386 387 388* GUI: discussion and way forward * 389 390Integrating the different ideas (VGUI, vtk, Qt, Fresco): 391 392-- VGUI is an interesting concept; 393it must be shown that it can interoperate with vtk (maybe modify the VGUI 394design slightly?) 395 396-- One solution : make a vtk VGUI tableau, or make a VGUI vtk renderer \\ 397-- Other solution: (partially) separate design, use VGUI for 2D, vtk for 3D. \\ 398-- Or: make a vtk actor which delegates to a tableau (which may be better 399 because vtk is more general than vgui; e.g. it does not assume OpenGL). 400 401-- We have to make sure that the new GUI can do the current sophisticated things 402like displaying 16-bit images, colourmapped images, parts of very large images \ldots 403 404-- We should not make the same errors as when we went from InterViews to Fresco. 405which are? 406 407-- Inform |iue-users| in January (say) so that they know as soon as is sensible 408that there is going to be an alternative to Fresco/Pamesan $-$ this will also 409enable feedback from them. 410 411* Repository (CVS) issues * 412 413-- Apparently there have been ``bad'' CVS commits in September. 414How to avoid this in the future? 415 416-- Idea: give every active group a time slot (1 week?) during which no other 417commits can happen. This allows them to prepare the commit and make sure 418everything compiles OK before doing so. 419 420-- Maybe this is only necessary for ``large'' or ``deep'' commits. The current 421policy at GE (daily (small) commits by several researchers) works perfectly. 422Infrequent CVS updates and commits have the important disadvantage that 423conflicts occur more frequent, in which case (and also in the case of compile 424errors) the person who was responsible for the `bad' commit cannot remember 425why he made that change, which makes it very difficult to find the correct fix. 426 427-- We must make sure that the central (Leuven) repository compiles OK at all 428times. We will set up a dashboard (accessible through http) where this can 429be verified. There are about 20 platform/compiler combinations which we 430actively support (Linux/Solaris/IRIX/WinNT; gcc 2.7, 2.91, 2.95, VC 5.0, 6.0, 431CC-n32; complete list in appendix), so we need 20 computers which do a nightly 432build and make their logfile available for inclusion on the dashboard. 433 434 435* Identify @core@ \TargetJr{} -- avoid Balkanization \by Joe Mundy. * 436 437An example: there are 11 different line intersection algorithm implementations 438in \TargetJr, not counting the IUE ones: 5 in |ImplicitLine|, 2 in |CompGeom|, 4393 in |MultiView|, 1 in |Polyhedra|. 440 441-- @Proposal:@ create a @Standard Geometry Library@ (SGL), 442with ultra lightweight classes, both 2D and 3D, both Euclidean and projective. 443 444-- @Issues:@ which representation? which interface for (e.g.) intersection? \\ 445which types of objects? (e.g., point, line, triangle? spline? box?) 446infinite lines or line segments? \\ 447Tolerances: user-settable or default? used in |operator==()| or not? 448 449-- Discussion: do we really need separating Euclidean and projective? 450A 3D point is an abstract concept, should be able to behave as 3-vector 451(Euclidean) or homogeneous 4-vector (projective). 452 453 454* Documentation * 455 456-- We want to use |perceps| instead of |gendoc|, and possibly re-define the 457structured comments. 458 459-- Zurich proposes to set up a web ``HowTo'' server page, which will be kept 460up-to-date, containing code snippets and the possibility for anybody to add 461examples. 462 463-- The present example code should be kept up-to-date. This could be made 464sure automatically, by also running these examples (just like the tests) 465during building, and verifying the output. 466 467-- We need a better mailing list setup, so that users should not hesitate 468to submit questions. 469 470-- Stefan Scholze is willing to write a FAQ list (without answers ;-) 471 472 473* ToDo list after this meeting * %%% PLEASE MAKE ADDITIONS !! 474 475Contact |iue-users\@aai.com| to find out if they want to continue with IUE 476on their own (Joe) 477 478Organize VXL meeting in late Jan/early February (AWF) 479 480Set up a HowTo server (Stefan) 481 482Set up a CVS-repo compile status dashboard (Peter V) 483 484Prepare for the big changes. (Some ideas in appendix.) 485 486Work out how to integrate different GUI ideas (Joris, AWF) 487 488Release VGUI on January 8, 2000 (AWF) 489 490\newpage 491 492 493APPENDIX 1 --- Supported platforms, and who's responsible for nightly build: 494 495 \begin{tabbing} 496 497platform \> compiler \> organization \\ 498Linux 2.x \> gcc 2.95.2 \> Oxford \\ 499Solaris 2.5 \> gcc 2.7.2 \> \\ 500Solaris 2.5 \> gcc 2.95.2 \> \\ 501Solaris 2.6 \> gcc 2.7.2 \> \\ 502Solaris 2.6 \> EGCS 1.1.x \> \\ 503Solaris 2.6 \> gcc 2.95.2 \> Leuven \\ 504Alpha 4 \> gcc 2.95.2 \> \\ 505HP-UX \> gcc 2.95.2 \> Leuven \\ 506WinNT \> VC++ 5.0 \> \\ 507WinNT \> VC++ 6.0 \> GE \\ 508 509 \end{tabbing} 510 511APPENDIX 2 --- Prepare for the big changes 512 513The following initial steps can already be taken. \\ 514Report on this will help making the correct decisions in February: 515 516-- CoolListP $\rightarrow$ CoolList etc. \\ 517-- |reset()|, |next()|, |value()| $\rightarrow$ |CoolList_iterator|, in 518those `perlable' situations where a |for| loop only uses |value()|, not (e.g.) 519|remove()| or |find()|. \\ 520-- CoolList $\rightarrow$ STL list, etc., with provisional automatic conversion 521to allow gradual substitution. 522 523\vskip1cm 524 525APPENDIX 3 --- Coding conventions 526 527\def\vxl{|v$x$l} 528A subset of rules: 529\begin{itemize} 530\item All identifiers are lowercase with underscores separating words. 531 532{\em Rationale:} 533This choice is preferred as MixedCase identifiers are poisoned by Visual 534C++ headers. 535 536 537\item All class names (and file names) start with the 538|vcl_| |vbl_| |vnl_| etc.~prefixes. 539 540{\em Rationale:} Avoid conflict with other libraries. If conflicts do 541occur, adherence to the prefix rules means that names are more likely to be 542easily changed automatically. 543 544{\em Rejected alternatives:} (1) Use of the C++ namespace feature. We do 545not wish to depend on nearly-ready C++ functionality, as we have in the 546past (e.g.\ usage of STL in the early days of the IUE). (2) Use of 547\verb|#define| to simulate namespaces. Experience with InterViews and 548Fresco shows that that way lies madness. 549 550 551\item The file \vxl_$y$.h| defines one or more globally visible identifiers 552(class names, functions, cpp macros). 553All globally visible identifiers defined in |vxl_y.h| begin with |vxl_y|. 554 555{\em Rationale:} Make it easy to locate the definitions of 556identifiers. e.g.\ on seeing the symbol |vbl_rtree_iterator|, one must look 557in library |vbl|, file |vbl_rtr|$\langle${\sc tab}$\rangle$ 558 559{\em Rejected alternatives:} 560Stricter rules are possible, for example the file |vxl_y.h| defines only the 561identifier |vxl_y|. These will not be obeyed, so it is better to propose 562rules that can be. 563 564 565\item Each library contains the file \vxl_dll.h|. 566 567{\em Rationale:} standard practice, this formalizes the naming. 568 569 570\item Each library contains the file \vxl_fwd.h|, which forward-declares 571all global identifiers in the library. 572 573{\em Rationale:} Naming is by analogy with the ISO C++ \verb|<iosfwd>| 574header. One file per library means a larger recompilation burden whenever 575a new class is added, but in normal use, new classes are added rarely. 576 577{\em Rejected alternatives:} One file per \vxl| header, so that \vxl_$y$.h| 578has a corresponding \vxl_$y$_fwd.h|. This was considered too great a 579burden on the user, so that they would be tempted to simply write |class 580vbl_generic_image;| rather than \verb|#include <vbl/vbl_generic_image_fwd.h>|. 581 582 583\end{itemize} 584 585 586\end{document} 587