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