[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.&nbsp; Here are are short term and long term 
plans.</FONT></SPAN></DIV>
<DIV><SPAN class=488373311-10102001><FONT size=2></FONT></SPAN>&nbsp;</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.&nbsp; 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.&nbsp; 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.&nbsp; 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.&nbsp;</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.&nbsp; 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.&nbsp;&nbsp;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.&nbsp; Maybe this will be called GenericDataObject.&nbsp; The idea here 
  is that filters can produce a series of outputs.&nbsp; Some of the output may 
  be images.&nbsp; Some of the outputs may be "standard types".&nbsp; For 
  instance, an image statistics filter could produce ValueDataObjects that wrap 
  the Mean, Standard Deviation, Median, etc. of an image.&nbsp; These "outputs" 
  could be set as the threshold "inputs" to a threshold filter.&nbsp; 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.&nbsp;</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.&nbsp; 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&nbsp;attempt at it soon so that I can scope the 
ramifications.</FONT></SPAN></DIV>
<DIV><SPAN class=488373311-10102001><FONT size=2></FONT></SPAN>&nbsp;</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 &amp; Computer Vision<BR>GE 
Corporate Research &amp; 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 &lt;<A 
href="mailto:millerjv@crd.ge.com">mailto:millerjv@crd.ge.com</A>&gt;</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>&nbsp;</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--