<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>

<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:black;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body bgcolor=white lang=DE-AT link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Hi Alberto,<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-GB style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Thank you for your code. At this point i just want to visualise the
vector to understand what the algorithm is doing and not creating a display
window. So, i am trying to look at the vector field using paraview, which is
going pretty good.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-GB style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>There are some tutorial which help to load data and view the
vector fields. <o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-GB style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-GB style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Regards,<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-GB style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Kana <o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-GB style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<div>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'>

<p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:
"Tahoma","sans-serif";color:windowtext'>From:</span></b><span lang=EN-US
style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext'>
Gomez, Alberto [mailto:alberto.gomez@kcl.ac.uk] <br>
<b>Sent:</b> 11 February 2010 12:14<br>
<b>To:</b> Kishore Mosaliganti<br>
<b>Cc:</b> Arunachalam Kana; insight-users@itk.org<br>
<b>Subject:</b> Re: [Insight-users] Gradient vector flow calculation<o:p></o:p></span></p>

</div>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><br>
Hi,<br>
<br>
You can visualize the vector field as arrows (or any other shape) using
vtkGlyph. I found it quite unclear when I first did it and I don't know if I am
doing it the best way, but here is an example of what works for me.<br>
<br>
You need to provide a set of points and a set of vectors corresponding to those
points (in world coords). I store them in two std::vector ,
&quot;directions&quot; and &quot;positions&quot;:<br>
<br>
<br>
//positions<br>
&nbsp;&nbsp;&nbsp; int num_pts = directions.size();<br>
&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkPoints&gt; pts =
vtkSmartPointer&lt;vtkPoints&gt;::New();<br>
&nbsp;&nbsp;&nbsp; pts-&gt;SetNumberOfPoints(num_pts);<br>
<br>
&nbsp;&nbsp;&nbsp; //directions<br>
&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkDoubleArray&gt; vecArr =
vtkSmartPointer&lt;vtkDoubleArray&gt;::New();<br>
&nbsp;&nbsp;&nbsp; vecArr-&gt;SetNumberOfComponents(3);<br>
&nbsp;&nbsp;&nbsp; vecArr-&gt;SetNumberOfTuples(num_pts);<br>
<br>
&nbsp;&nbsp;&nbsp; for( int i=0; i &lt; num_pts; i++)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pts-&gt;InsertPoint(i, positions[i][0],
positions[i][1], positions[i][2]);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; vecArr-&gt;InsertTuple3(i,
directions[i][0]*sf, directions[i][1]*sf, directions[i][2]*sf);<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; // put vectors and positions into a grid which will be the
glyph's input<br>
&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkUnstructuredGrid&gt; uGrid =
vtkSmartPointer&lt;vtkUnstructuredGrid&gt;::New();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; uGrid-&gt;SetPoints(pts);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
uGrid-&gt;GetPointData()-&gt;SetVectors(vecArr);<br>
<br>
<br>
<br>
&nbsp;&nbsp;&nbsp; // glyph construction<br>
&nbsp;&nbsp;&nbsp; // build arrow<br>
&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkArrowSource&gt; arrow =
vtkSmartPointer&lt;vtkArrowSource&gt;::New();<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp; //build arrow Field<br>
&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkGlyph3D&gt; glyph =
vtkSmartPointer&lt;vtkGlyph3D&gt;::New();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glyph-&gt;SetInput(uGrid);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
glyph-&gt;SetSource(arrow-&gt;GetOutput());<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glyph-&gt;SetScaleModeToScaleByVector();<br>
<br>
&nbsp;&nbsp; //display<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkPolyDataMapper&gt;
gMapper = vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; gMapper-&gt;SetInput(
glyph-&gt;GetOutput());<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
gMapper-&gt;ScalarVisibilityOn();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
gMapper-&gt;SetScalarRange(uGrid-&gt;GetScalarRange());<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkActor&gt; gactor =
vtkSmartPointer&lt;vtkActor&gt;::New();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
gactor-&gt;SetMapper(gMapper);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
gactor-&gt;GetProperty()-&gt;SetColor(color);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ren-&gt;AddActor(gactor);<br>
<br>
<br>
Hope this helps,<br>
<br>
<br>
Alberto<br>
<br>
<br>
<br>
<br>
<br>
<br>
Kishore Mosaliganti wrote: <o:p></o:p></p>

<pre>For 2, you can use Paraview to visualize the vector field.<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>Kishore<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>On Wed, Feb 10, 2010 at 8:35 AM, Arunachalam Kana<o:p></o:p></pre><pre><a
href="mailto:Kana.Arunachalam@fh-wels.at">&lt;Kana.Arunachalam@fh-wels.at&gt;</a> wrote:<o:p></o:p></pre><pre>  <o:p></o:p></pre>

<blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><pre>Hi User,<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>My goal is to implement insight journal paper:<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>&quot;Edge based tube detection for coronary artery centerline extraction&quot;<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>From the paper i understood that i have to calculate the following:<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>1. Gradient vector field<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>2. Anisotropic diffusion of gradient vector<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>3. Gradient vector flow<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>4. Hessian matrix<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>I calculate the gradientimage using itkGradientImageFilter. I use<o:p></o:p></pre><pre>itkGradientVectorFlowImageFilter<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>to directly calculate the gradient vector flow as it is given the diffusion<o:p></o:p></pre><pre>is already inbuilt in<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>itkGradientVectorFlowImageFilter.<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>I use QVTK for visualisation. The image is loaded as vtk image. To apply<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>itk algorithm, i convert the vtk image to itk image using vtkKWEITKImage.cxx<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>from vtkedge. The same file is used for itk image to vtk image for display.<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>typedef itk::Image&lt; T, 3 &gt;&nbsp;&nbsp; InputImageType; //input image type<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>typedef itk::Image&lt; float, 3 &gt;&nbsp;&nbsp; OutputImageType; //outputimage type<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>/// cast filter which converts any inputimage type to outputimage type<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>typedef itk::CastImageFilter &lt;InputImageType, OutputImageType&gt; castType;<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>castType::Pointer castfilter = castType::New();<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>// image is vtkKWEITKImage object<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>castfilter-&gt;SetInput( dynamic_cast&lt; InputImageType * &gt;( image-&gt;GetITKImage()<o:p></o:p></pre><pre>) );<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>//itk vector image declaration<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>typedef itk::CovariantVector&lt;float, 3&gt; VectorPixelType;<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>typedef itk::Image&lt;VectorPixelType, 3&gt; VectorImageType;<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>//calculate the gradient vector of image<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>typedef itk::GradientImageFilter &lt;OutputImageType, float, float&gt;<o:p></o:p></pre><pre>GradientType;<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>GradientType::Pointer gradient = GradientType::New();<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>gradient-&gt;SetInput(castfilter-&gt;GetOutput());<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>gradient-&gt;Update();<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>//calculation of gradient vector flow from diffused gradient vector<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>typedef itk::GradientVectorFlowImageFilter&lt;VectorImageType, VectorImageType,<o:p></o:p></pre><pre>double&gt; VectorFlowType;<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>VectorFlowType::Pointer flowfilter = VectorFlowType::New();<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>flowfilter-&gt;SetInput(gradient-&gt;GetOutput());<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>//observer of algorithm execution for time<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>p-&gt;Observe( flowfilter );<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>//the image object is updated with output image from flowfilter<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>image-&gt;SetImage( flowfilter-&gt;GetOutput( ) );<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>image-&gt;Modified();<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>flowfilter-&gt;ReleaseDataFlagOn();<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>return EXIT_SUCCESS;<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>Questions:<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>1. I would like to know whether itkGradientVectorFlowImageFilter computes<o:p></o:p></pre><pre>anisotropic diffusion or gaussian diffusion ?<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>2. I want to visualise the gradient vector flow as arrows. How can i achieve<o:p></o:p></pre><pre>this visualisation?<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>3. If there is any example, which would help me fully or partially I would<o:p></o:p></pre><pre>like to know.<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>Thank you in advance.<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>Regards,<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>Kana<o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>_____________________________________<o:p></o:p></pre><pre>Powered by <a
href="http://www.kitware.com">www.kitware.com</a><o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>Visit other Kitware open-source projects at<o:p></o:p></pre><pre><a
href="http://www.kitware.com/opensource/opensource.html">http://www.kitware.com/opensource/opensource.html</a><o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>Kitware offers ITK Training Courses, for more information visit:<o:p></o:p></pre><pre><a
href="http://www.kitware.com/products/protraining.html">http://www.kitware.com/products/protraining.html</a><o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>Please keep messages on-topic and check the ITK FAQ at:<o:p></o:p></pre><pre><a
href="http://www.itk.org/Wiki/ITK_FAQ">http://www.itk.org/Wiki/ITK_FAQ</a><o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>Follow this link to subscribe/unsubscribe:<o:p></o:p></pre><pre><a
href="http://www.itk.org/mailman/listinfo/insight-users">http://www.itk.org/mailman/listinfo/insight-users</a><o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>    <o:p></o:p></pre></blockquote>

<pre>_____________________________________<o:p></o:p></pre><pre>Powered by <a
href="http://www.kitware.com">www.kitware.com</a><o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>Visit other Kitware open-source projects at<o:p></o:p></pre><pre><a
href="http://www.kitware.com/opensource/opensource.html">http://www.kitware.com/opensource/opensource.html</a><o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>Kitware offers ITK Training Courses, for more information visit:<o:p></o:p></pre><pre><a
href="http://www.kitware.com/products/protraining.html">http://www.kitware.com/products/protraining.html</a><o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>Please keep messages on-topic and check the ITK FAQ at:<o:p></o:p></pre><pre><a
href="http://www.itk.org/Wiki/ITK_FAQ">http://www.itk.org/Wiki/ITK_FAQ</a><o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre><pre>Follow this link to subscribe/unsubscribe:<o:p></o:p></pre><pre><a
href="http://www.itk.org/mailman/listinfo/insight-users">http://www.itk.org/mailman/listinfo/insight-users</a><o:p></o:p></pre><pre>  <o:p></o:p></pre>

<p class=MsoNormal style='margin-bottom:12.0pt'><o:p>&nbsp;</o:p></p>

<div>

<p class=MsoNormal>-- <o:p></o:p></p>

<p>Alberto Gómez<o:p></o:p></p>

<p><i>Division of Imaging Sciences <br>
The Rayne Institute<br>
4th Floor, Lambeth Wing<br>
St Thomas' Hospital<br>
London SE1 7EH </i><o:p></o:p></p>

<p>phone: +44 (0) 20 718 88364<br>
email: <a href="mailto:alberto.gomez@kcl.ac.uk">alberto.gomez@kcl.ac.uk</a> <o:p></o:p></p>

</div>

</div>

</body>

</html>