<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.na-mic.org/w/index.php?action=history&amp;feed=atom&amp;title=User%3AMathieu%2FMRML</id>
	<title>User:Mathieu/MRML - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.na-mic.org/w/index.php?action=history&amp;feed=atom&amp;title=User%3AMathieu%2FMRML"/>
	<link rel="alternate" type="text/html" href="https://www.na-mic.org/w/index.php?title=User:Mathieu/MRML&amp;action=history"/>
	<updated>2026-04-17T15:28:49Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://www.na-mic.org/w/index.php?title=User:Mathieu/MRML&amp;diff=4106&amp;oldid=prev</id>
		<title>Andy: Update from Wiki</title>
		<link rel="alternate" type="text/html" href="https://www.na-mic.org/w/index.php?title=User:Mathieu/MRML&amp;diff=4106&amp;oldid=prev"/>
		<updated>2006-12-18T13:36:00Z</updated>

		<summary type="html">&lt;p&gt;Update from Wiki&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Image:f62dc379710c4e82a20236f2d718274d.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Current Implementation ==&lt;br /&gt;
&lt;br /&gt;
[[Image:5d647cc5c34fa3d103191c05392096e3.png]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Implementation ==&lt;br /&gt;
&lt;br /&gt;
* The MRML lib should minimize its functionalities to the bare minimum expected from an IO library. No complex operation like transformation of volume should be expected from such a library. Thus the MRML lib should be seen as a lib on top of the MRML-XML file description: manipulating only filename, string and information about volumes.&lt;br /&gt;
* There is no notion of vtkPolyData or itk::Mesh, everything is delegated to specialization of mrml.&lt;br /&gt;
* For instance instanciating a mrlm::StorageNode will instanciate, using the Factory, a vtk type one or an itk one.&lt;br /&gt;
* Once instanciated, the only way to go from itk structure to vtk structure will be to used the third party ITK2VTK code.&lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* Clear separation&lt;br /&gt;
* No duplication, mrml will not have an internal representation of let say mrml::Image or mrml::Model&lt;br /&gt;
* ITK+MRML does not need -and should not- require VTK (in particular the flipping)&lt;br /&gt;
&lt;br /&gt;
[[Image:fc521a60cf35f329e7888016bddd6011.png]]&lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* mrml by itself will not be very useful, only specialized one will.&lt;br /&gt;
&lt;br /&gt;
== VTK MRML ==&lt;br /&gt;
&lt;br /&gt;
A Module that knows how to read FreeSurfer file should declare that and the ImageIO factory for vtk should know at run time which class to instanciate to read the file.&lt;br /&gt;
&lt;br /&gt;
=== Test case ===&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 imageData = scene.GetNthNodeByClass(0, &amp;quot;Volume&amp;quot;).GetImageData();&lt;br /&gt;
 vtkGaussianBlur gb;&lt;br /&gt;
 gb.SetInput( imageData );&lt;br /&gt;
 gb.Update();&lt;br /&gt;
 scene.GetNthNodeByClass(0, &amp;quot;Volume&amp;quot;).SetImageData (gb.GetOutput()); // reusing same id&lt;br /&gt;
&lt;br /&gt;
so basically the scene has the image data accessible and modifiable without going to disk.&lt;br /&gt;
&lt;br /&gt;
[[Image:d2512cf671445de9e451ae60aa0a6a3f.png]]&lt;br /&gt;
&lt;br /&gt;
At mrml level, it manipulates mrml::StorageNode class, but from vtk-mrml we have access to the full vtkStorageNode class.&lt;br /&gt;
&lt;br /&gt;
== ITK MRML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; $ xmllint --format volScene3.xml&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;MRML&amp;gt;&lt;br /&gt;
   &amp;lt;Volume Name=&amp;quot;head1&amp;quot; Description=&amp;quot;somebodys1&amp;quot; ID=&amp;quot;vol1&amp;quot; StorageNodeID=&amp;quot;storage1&amp;quot; DisplayNodeID=&amp;quot;display1&amp;quot; TransformNodeID=&amp;quot;xform1&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;Volume Name=&amp;quot;head2&amp;quot; Description=&amp;quot;somebodys2&amp;quot; ID=&amp;quot;vol2&amp;quot; StorageNodeID=&amp;quot;storage2&amp;quot; DisplayNodeID=&amp;quot;display1&amp;quot; TransformNodeID=&amp;quot;xform2&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;VolumeArchetypeStorage FileArchetype=&amp;quot;TestData/fixed.nrrd&amp;quot; ID=&amp;quot;storage1&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;VolumeArchetypeStorage FileArchetype=&amp;quot;TestData/moving.nrrd&amp;quot; ID=&amp;quot;storage2&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;VolumeDisplay Name=&amp;quot;disp1&amp;quot; ID=&amp;quot;display1&amp;quot; Level=&amp;quot;128&amp;quot; Window=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;LinearTransform Name=&amp;quot;matXform1&amp;quot; ID=&amp;quot;xform1&amp;quot; MatrixTransformToParent=&amp;quot;1 0 0 0 0 1 0 0 0 0 1 0 10 20 30 1&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;LinearTransform Name=&amp;quot;matXform2&amp;quot; ID=&amp;quot;xform2&amp;quot; MatrixTransformToParent=&amp;quot;1 0 0 0 0 1 0 0 0 0 1 0 10 20 30 1&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/MRML&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Current Issues ==&lt;br /&gt;
&lt;br /&gt;
=== RAS IJK Space ===&lt;br /&gt;
&lt;br /&gt;
Volumes are VTK-like. ie. vtkMRMLVolumeNode need a whole extra fonctunalities to handle conversion in between RAS space to IJK space.&lt;br /&gt;
&lt;br /&gt;
But on the other hand Model have an implicit representation are are assumed to be vtkPolyData expressed in mm units in IJK space (VTK).&lt;br /&gt;
&lt;br /&gt;
Problems:&lt;br /&gt;
&lt;br /&gt;
# How do I link a vtkPolyData to an itk::Mesh&lt;br /&gt;
# Connection in between VTK/Flip then pass to ITK then connected to ITK-VTK...&lt;br /&gt;
&lt;br /&gt;
=== Transforms ===&lt;br /&gt;
&lt;br /&gt;
mrml::Transforms are limited by the current VTK implementation. Thus cannot express the full range of itk::Transform (non-linear ones). There should be a way to encapsulate itk::Transform functionality into a subclass of vtkGeneralTranform to achieve this goal. Problem with vtkTransform, cannot support ITK's transforms : the non linear one, those deriving from itk::KernelTransform (BSpline, ThinPlate...).&lt;/div&gt;</summary>
		<author><name>Andy</name></author>
		
	</entry>
</feed>