<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7650.28">
<TITLE>RE: [Insight-users] FW: Connected Threshold Filter</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>Hi Luis,<BR>
<BR>
for your information, i placed my seed in a vessel area where there is a contrast agent, therefore the upper and lower threshold i inputted is 250 - 255, hope it is clearer this way.<BR>
<BR>
rgds<BR>
Zach<BR>
<BR>
<BR>
-----Original Message-----<BR>
From: Wu Zheying<BR>
Sent: Thu 1/18/2007 4:39 PM<BR>
To: Luis Ibanez; Insight Users<BR>
Subject: RE: [Insight-users] FW: Connected Threshold Filter<BR>
<BR>
Hi Luis,<BR>
<BR>
i am attaching my code here for your reference. I am using unsigned char for the output pixel type. The seed coordinates should be ok because i tried them with fast marching and it worked. Pls let me know if anything is wrong with the code?<BR>
<BR>
rgds,<BR>
Zach<BR>
<BR>
code:<BR>
<BR>
#if defined(_MSC_VER)<BR>
#pragma warning ( disable : 4786 )<BR>
#endif<BR>
<BR>
#ifdef __BORLANDC__<BR>
#define ITK_LEAN_AND_MEAN<BR>
#endif<BR>
<BR>
<BR>
<BR>
<BR>
#include &quot;itkConnectedThresholdImageFilter.h&quot;<BR>
#include &quot;itkImage.h&quot;<BR>
#include &quot;itkCastImageFilter.h&quot;<BR>
#include &quot;itkSubtractImageFilter.h&quot; //added the image subtraction filter, but not used here<BR>
#include &quot;itkCurvatureFlowImageFilter.h&quot;<BR>
#include &quot;itkImageFileReader.h&quot;<BR>
#include &quot;itkImageFileWriter.h&quot;<BR>
<BR>
<BR>
int main( int argc, char *argv[])<BR>
{<BR>
&nbsp; if( argc &lt; 8 )<BR>
&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Missing Parameters &quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Usage: &quot; &lt;&lt; argv[0];<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot; inputImage&nbsp; outputImage seedX seedY lowerThreshold upperThreshold&nbsp; seedZ&quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; return 1;<BR>
&nbsp;&nbsp;&nbsp; }<BR>
<BR>
<BR>
&nbsp;<BR>
&nbsp; typedef&nbsp;&nbsp; unsigned char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalPixelType;<BR>
&nbsp; const&nbsp;&nbsp;&nbsp;&nbsp; unsigned int&nbsp;&nbsp;&nbsp; Dimension = 3;<BR>
&nbsp; typedef itk::Image&lt; InternalPixelType, Dimension &gt;&nbsp; InternalImageType;<BR>
&nbsp;<BR>
<BR>
&nbsp; typedef unsigned char OutputPixelType;<BR>
&nbsp; typedef itk::Image&lt; OutputPixelType, Dimension &gt; OutputImageType;<BR>
&nbsp; typedef itk::CastImageFilter&lt; InternalImageType, OutputImageType &gt;<BR>
&nbsp;&nbsp;&nbsp; CastFilterType;<BR>
&nbsp; CastFilterType::Pointer caster = CastFilterType::New();<BR>
&nbsp;<BR>
&nbsp; typedef&nbsp; itk::ImageFileReader&lt; InternalImageType &gt; ReaderType;<BR>
&nbsp; typedef&nbsp; itk::ImageFileWriter&lt;&nbsp; OutputImageType&nbsp; &gt; WriterType;<BR>
<BR>
<BR>
<BR>
<BR>
&nbsp; ReaderType::Pointer reader = ReaderType::New();<BR>
&nbsp;<BR>
&nbsp; WriterType::Pointer writer = WriterType::New();<BR>
&nbsp;<BR>
<BR>
&nbsp; reader-&gt;SetFileName( argv[1] );<BR>
&nbsp;<BR>
&nbsp; writer-&gt;SetFileName( argv[2] );<BR>
<BR>
&nbsp;<BR>
<BR>
<BR>
&nbsp;&nbsp;&nbsp; typedef itk::CurvatureFlowImageFilter&lt; InternalImageType, InternalImageType &gt;<BR>
&nbsp;&nbsp;&nbsp; CurvatureFlowImageFilterType;<BR>
&nbsp;<BR>
<BR>
<BR>
&nbsp;&nbsp; CurvatureFlowImageFilterType::Pointer smoothing =<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CurvatureFlowImageFilterType::New();<BR>
&nbsp;<BR>
<BR>
&nbsp; typedef itk::ConnectedThresholdImageFilter&lt; InternalImageType,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType &gt; ConnectedFilterType;<BR>
&nbsp;&nbsp;&nbsp; ConnectedFilterType::Pointer connectedThreshold = ConnectedFilterType::New();<BR>
&nbsp;<BR>
&nbsp; typedef itk::SubtractImageFilter&lt;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType &gt; DifferenceFilterType;<BR>
<BR>
&nbsp; DifferenceFilterType::Pointer difference = DifferenceFilterType::New();<BR>
<BR>
&nbsp; smoothing-&gt;SetInput( reader-&gt;GetOutput() );<BR>
&nbsp; connectedThreshold-&gt;SetInput( smoothing-&gt;GetOutput() );<BR>
&nbsp; caster-&gt;SetInput (connectedThreshold-&gt;GetOutput());<BR>
&nbsp; writer-&gt;SetInput ( caster-&gt;GetOutput());<BR>
<BR>
&nbsp;<BR>
<BR>
<BR>
<BR>
&nbsp; smoothing-&gt;SetNumberOfIterations( 1 );<BR>
&nbsp; smoothing-&gt;SetTimeStep( 0.0625 );<BR>
&nbsp;<BR>
<BR>
<BR>
<BR>
&nbsp; const InternalPixelType lowerThreshold = atof( argv[5] );<BR>
&nbsp; const InternalPixelType upperThreshold = atof( argv[6] );<BR>
<BR>
&nbsp; connectedThreshold-&gt;SetLower(&nbsp; lowerThreshold&nbsp; );<BR>
&nbsp; connectedThreshold-&gt;SetUpper(&nbsp; upperThreshold&nbsp; );<BR>
&nbsp;<BR>
<BR>
<BR>
&nbsp; connectedThreshold-&gt;SetReplaceValue( 255 );<BR>
&nbsp;<BR>
<BR>
<BR>
<BR>
&nbsp; InternalImageType::IndexType&nbsp; index;<BR>
&nbsp;<BR>
&nbsp; index[0] = atoi( argv[3] );<BR>
&nbsp; index[1] = atoi( argv[4] );<BR>
&nbsp; index[2] = atoi( argv[7] );<BR>
<BR>
<BR>
&nbsp; connectedThreshold-&gt;SetSeed( index );<BR>
<BR>
&nbsp;&nbsp;&nbsp; try<BR>
&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; writer-&gt;Update();<BR>
&nbsp;&nbsp;&nbsp; }<BR>
&nbsp; catch( itk::ExceptionObject &amp; excep )<BR>
&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Exception caught !&quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; excep &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;<BR>
<BR>
<BR>
<BR>
<BR>
&nbsp; return 0;<BR>
}<BR>
<BR>
<BR>
<BR>
<BR>
<BR>
<BR>
-----Original Message-----<BR>
From: Luis Ibanez [<A HREF="mailto:luis.ibanez@kitware.com">mailto:luis.ibanez@kitware.com</A>]<BR>
Sent: Tue 1/16/2007 6:25 AM<BR>
To: Wu Zheying; Insight Users<BR>
Subject: Re: [Insight-users] FW: Connected Threshold Filter<BR>
<BR>
<BR>
<BR>
Hi Zach,<BR>
<BR>
&nbsp;From your limited description is very difficult<BR>
to identify what the problem is.<BR>
<BR>
You may have to start eliminating suspects one at<BR>
a time.<BR>
<BR>
1) Have you verified that the analyze files are<BR>
&nbsp;&nbsp;&nbsp; read correctly ? For example, pass the output<BR>
&nbsp;&nbsp;&nbsp; of the reader to a writer, save the image and<BR>
&nbsp;&nbsp;&nbsp; open it with a viewer to see if it is the same<BR>
&nbsp;&nbsp;&nbsp; as the original.<BR>
<BR>
2) Have you verified that the seeds are located<BR>
&nbsp;&nbsp;&nbsp; in pixels with values that are inside the range<BR>
&nbsp;&nbsp;&nbsp; defined by the lower,upper thresholds ?<BR>
<BR>
3) What pixel type did you used for instantiating<BR>
&nbsp;&nbsp;&nbsp; the output of the ConnectedThreshold image filter.<BR>
<BR>
4) When you say that &quot;My output is all black and<BR>
&nbsp;&nbsp;&nbsp; has been reduced from 16 bit to 8bit when i view<BR>
&nbsp;&nbsp;&nbsp; in MRIcro. &quot;&nbsp; do you mean that MRIcro reduced<BR>
&nbsp;&nbsp;&nbsp; the pixel type of the image ? or do you mean<BR>
&nbsp;&nbsp;&nbsp; that you change the pixel type inside your code ?<BR>
<BR>
<BR>
<BR>
It will help a lot if you post your source code to<BR>
the list.<BR>
<BR>
<BR>
&nbsp;&nbsp; Thanks<BR>
<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Luis<BR>
<BR>
<BR>
<BR>
---------------------<BR>
Wu Zheying wrote:<BR>
&gt; Hi all,<BR>
&gt;<BR>
&gt; I am doing the connected threshold filter example using analyze datasets and<BR>
&gt; 3d input seeds. My output is all black and has been reduced from 16 bit to<BR>
&gt; 8bit when i view in MRIcro. What is the reason for this? and what is the<BR>
&gt; proper way to get past this problem?<BR>
&gt;<BR>
&gt; much thanks,<BR>
&gt; Zach<BR>
&gt;<BR>
&gt;<BR>
&gt; ------------------------------------------------------------------------<BR>
&gt;<BR>
&gt; _______________________________________________<BR>
&gt; Insight-users mailing list<BR>
&gt; Insight-users@itk.org<BR>
&gt; <A HREF="http://www.itk.org/mailman/listinfo/insight-users">http://www.itk.org/mailman/listinfo/insight-users</A><BR>
<BR>
<BR>
</FONT>
</P>

</BODY>
</HTML>