[Insight-developers] StreamingDataObject, StreamingPipelineObject
Miller, James V (CRD)
millerjv@crd.ge.com
Wed, 10 Oct 2001 08:24:35 -0400
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
------_=_NextPart_000_01C15186.85F4E050
Content-Type: multipart/alternative;
boundary="----_=_NextPart_001_01C15186.85F4E050"
------_=_NextPart_001_01C15186.85F4E050
Content-Type: text/plain;
charset="iso-8859-1"
At the code review yesterday, we discussed the need to get various algorithms integrated into the
pipeline mechanism. Here are are short term and long term plans.
Short term
---------------
1. I will add an Update() method (and associated support methods) to the RegistrationMethod
class. This will allow registration algorithms to respond to an Update() call which will propagate
up their inputs and rerun the algorithm if necessary. This will give the appearance of the
registration methods being integrated into the pipeline. In general, I do not want objects to have
their own Update() methods since that becomes a support problem. The pipeline mechanism is
complicated enough without having several "copies" of it. This will be reworked in the long term
section.
2. I will add a GetTransform() to the registration methods. This will convert the registration
parameters into a suitable transform that a user can do something with. This transform will be
treated as if it were a first class output of the registration method transform object. Again, this
is a short term solution.
3. I will add an Update() and Source to the superclass of the transform hierarchy. This will
allow someone to call Update() on the transform produced by a registration method and it will rerun
the registration method if it needs to.
Long term
--------------
1. I will divide ProcessObject into two classes: ProcessObject and StreamingProcessingObject.
The streaming version will have "region" support.
2. I will divide DataObject into two classes: DataObject and StreamingDataObject. The streaming
version will have "region" support.
3. ImageBase, PointSet, and Mesh will be subclasses of StreamingDataObject.
4. Transforms will be a subclass DataObject.
5. I will add a ValueDataObject (or someother name) that will be a subclass of DataObject but
wraps a single value. Maybe this will be called GenericDataObject. The idea here is that filters
can produce a series of outputs. Some of the output may be images. Some of the outputs may be
"standard types". For instance, an image statistics filter could produce ValueDataObjects that wrap
the Mean, Standard Deviation, Median, etc. of an image. These "outputs" could be set as the
threshold "inputs" to a threshold filter. If an input image to the image statistics is modified,
then statistics and thresholds will be recalculated when an Update() is called on the threshold
filter.
6. Existing objects like Calculators, Mappers, etc. fit into the architecture cleanly and will
respond as pipeline objects.
This will be a "Big Brain" activity. I'll need to clear a pretty good slot of time to make these
changes. I may have to ask people not to refactor other parts of the toolkit while I am doing this.
At this point, I am not sure when I will get to it. I may make a quick attempt at it soon so that I
can scope the ramifications.
Jim Miller
_____________________________________
Visualization & Computer Vision
GE Corporate Research & Development
Bldg. KW, Room C218B
P.O. Box 8, Schenectady NY 12301
millerjv@crd.ge.com < mailto:millerjv@crd.ge.com <mailto:millerjv@crd.ge.com> >
(518) 387-4005, Dial Comm: 8*833-4005,
Cell: (518) 505-7065, Fax: (518) 387-6981
------_=_NextPart_001_01C15186.85F4E050
Content-Type: text/html;
charset="iso-8859-1"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META content="MSHTML 5.50.4807.2300" name=GENERATOR></HEAD>
<BODY>
<DIV><SPAN class=488373311-10102001><FONT size=2>At the code review yesterday,
we discussed the need to get various algorithms integrated into the pipeline
mechanism. Here are are short term and long term
plans.</FONT></SPAN></DIV>
<DIV><SPAN class=488373311-10102001><FONT size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=488373311-10102001><FONT size=2>Short term</FONT></SPAN></DIV>
<DIV><SPAN class=488373311-10102001><FONT
size=2>---------------</FONT></SPAN></DIV>
<OL>
<LI><SPAN class=488373311-10102001><FONT size=2>I will add an Update() method
(and associated support methods) to the RegistrationMethod class. This
will allow registration algorithms to respond to an Update() call which will
propagate up their inputs and rerun the algorithm if necessary. This will give
the appearance of the registration methods being integrated into the
pipeline. In general, I do not want objects to have their own Update()
methods since that becomes a support problem. The pipeline mechanism is
complicated enough without having several "copies" of it. This will be
reworked in the long term section.</FONT></SPAN></LI>
<LI><SPAN class=488373311-10102001><FONT size=2>I will add a GetTransform() to
the registration methods. This will convert the registration parameters
into a suitable transform that a user can do something with. This transform
will be treated as if it were a first class output of the registration method
transform object. Again, this is a short term
solution. </FONT></SPAN></LI>
<LI><SPAN class=488373311-10102001><FONT size=2>I will add an Update() and
Source to the superclass of the transform hierarchy. This will allow
someone to call Update() on the transform produced by a registration method
and it will rerun the registration method if it needs
to.</FONT></SPAN></LI></OL>
<DIV><SPAN class=488373311-10102001><FONT size=2>Long term</FONT></SPAN></DIV>
<DIV><SPAN class=488373311-10102001><FONT
size=2>--------------</FONT></SPAN></DIV>
<OL>
<LI><SPAN class=488373311-10102001><FONT size=2>I will divide ProcessObject
into two classes: ProcessObject and StreamingProcessingObject. The
streaming version will have "region" support.</FONT></SPAN></LI>
<LI><SPAN class=488373311-10102001><FONT size=2>I will divide DataObject into
two classes: DataObject and StreamingDataObject. The streaming version will
have "region" support.</FONT></SPAN></LI>
<LI><SPAN class=488373311-10102001><FONT size=2>ImageBase, PointSet, and Mesh
will be subclasses of StreamingDataObject.</FONT></SPAN></LI>
<LI><SPAN class=488373311-10102001><FONT size=2>Transforms will be a subclass
DataObject.</FONT></SPAN></LI>
<LI><SPAN class=488373311-10102001><FONT size=2>I will add a ValueDataObject
(or someother name) that will be a subclass of DataObject but wraps a single
value. Maybe this will be called GenericDataObject. The idea here
is that filters can produce a series of outputs. Some of the output may
be images. Some of the outputs may be "standard types". For
instance, an image statistics filter could produce ValueDataObjects that wrap
the Mean, Standard Deviation, Median, etc. of an image. These "outputs"
could be set as the threshold "inputs" to a threshold filter. If an
input image to the image statistics is modified, then statistics and
thresholds will be recalculated when an Update() is called on the threshold
filter. </FONT></SPAN></LI>
<LI><SPAN class=488373311-10102001><FONT size=2>Existing objects like
Calculators, Mappers, etc. fit into the architecture cleanly and will respond
as pipeline objects.</FONT></SPAN></LI></OL>
<DIV><SPAN class=488373311-10102001><FONT size=2>This will be a "Big Brain"
activity. I'll need to clear a pretty good slot of time to make these
changes. I may have to ask people not to refactor other parts of the toolkit
while I am doing this. At this point, I am not sure when I will get to it. I may
make a quick attempt at it soon so that I can scope the
ramifications.</FONT></SPAN></DIV>
<DIV><SPAN class=488373311-10102001><FONT size=2></FONT></SPAN> </DIV><BR>
<P><B><FONT face="Comic Sans MS" color=#000080>Jim Miller</FONT></B>
<BR><B><I><FONT face=Arial color=#ff0000
size=2>_____________________________________</FONT></I></B><I></I><BR><I></I><I><FONT
face=Arial color=#000000 size=1>Visualization & Computer Vision<BR>GE
Corporate Research & Development<BR>Bldg. KW, Room C218B<BR>P.O. Box 8,
Schenectady NY 12301<BR><BR></FONT><U><FONT face=Arial color=#0000ff
size=1>millerjv@crd.ge.com <<A
href="mailto:millerjv@crd.ge.com">mailto:millerjv@crd.ge.com</A>></FONT></U></I><BR><I><FONT
face=Arial color=#000000 size=1>(518) 387-4005, Dial Comm: 8*833-4005,
</FONT></I><BR><I><FONT face=Arial color=#000000 size=1>Cell: (518) 505-7065,
Fax: (518) 387-6981</FONT></I> </P><BR>
<DIV> </DIV></BODY></HTML>
------_=_NextPart_001_01C15186.85F4E050--
------_=_NextPart_000_01C15186.85F4E050
Content-Type: application/octet-stream;
name="Miller, James V (CRD).vcf"
Content-Disposition: attachment;
filename="Miller, James V (CRD).vcf"
BEGIN:VCARD
VERSION:2.1
N:Miller;James
FN:Miller, James V (CRD)
ORG:CRD;ESL
TITLE:Computer Scientist
TEL;WORK;VOICE:*833-4005
TEL;WORK;VOICE:1 518 387-4005
ADR;WORK:;KW-C218B;P.O. Box 8;Schenectady;New York;12301;USA
LABEL;WORK;ENCODING=QUOTED-PRINTABLE:KW-C218B=0D=0AP.O. Box 8=0D=0ASchenectady, New York 12301=0D=0AUSA
EMAIL;PREF;INTERNET:millerjv@crd.ge.com
REV:20010420T140329Z
END:VCARD
------_=_NextPart_000_01C15186.85F4E050--