<!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.7655.8">
<TITLE>classification of a region defined by a PolyLine</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->
<BR>

<P><FONT SIZE=2>Hi<BR>
I am interested in the classification of a region of an image with kmeans. My problem is that:<BR>
I want to classify only the pixel of a region that it isn't rectangular, for example a region represented by a polylineparametricpath.<BR>
How can I do this? is there a filter that can transform a itkPolyLineParametricPath to a RegionType?<BR>
I write this code that works only with rectangular region:<BR>
#include &quot;itkImage.h&quot;<BR>
#include &quot;itkImageFileReader.h&quot;<BR>
#include &quot;itkImageFileWriter.h&quot;<BR>
#include &quot;itkScalarImageKmeansImageFilter.h&quot;<BR>
<BR>
int main( int argc, char * argv [] )<BR>
{<BR>
&nbsp; if( argc &lt; 5 )<BR>
&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Usage: &quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; argv[0];<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot; inputScalarImage outputLabeledImage contiguousLabels&quot;;<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot; numberOfClasses mean1 mean2... meanN &quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<BR>
&nbsp;&nbsp;&nbsp; }<BR>
<BR>
&nbsp; const char * inputImageFileName = argv[1];<BR>
<BR>
&nbsp; typedef signed short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PixelType;<BR>
&nbsp; const unsigned int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dimension = 2;<BR>
<BR>
&nbsp; typedef itk::Image&lt;PixelType, Dimension &gt; ImageType;<BR>
<BR>
&nbsp; typedef itk::ImageFileReader&lt; ImageType &gt; ReaderType;<BR>
&nbsp; ReaderType::Pointer reader = ReaderType::New();<BR>
&nbsp; reader-&gt;SetFileName( inputImageFileName );<BR>
<BR>
&nbsp; typedef itk::ScalarImageKmeansImageFilter&lt; ImageType &gt; KMeansFilterType;<BR>
<BR>
&nbsp; KMeansFilterType::Pointer kmeansFilter = KMeansFilterType::New();<BR>
<BR>
&nbsp; kmeansFilter-&gt;SetInput( reader-&gt;GetOutput() );<BR>
<BR>
&nbsp; const unsigned int numberOfInitialClasses = atoi( argv[4] );<BR>
<BR>
&nbsp; const unsigned int useNonContiguousLabels = atoi( argv[3] );<BR>
<BR>
&nbsp; kmeansFilter-&gt;UseNonContiguousLabelsOn ();<BR>
<BR>
// to constrain classfication to a certain region<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageType::IndexType start;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start[0] = 40;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start[1] = 40;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageType::SizeType size;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size[0] = 100;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size[1] = 100;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageType::RegionType desiredRegion;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; desiredRegion.SetSize( size );<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; desiredRegion.SetIndex( start );<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kmeansFilter-&gt;SetImageRegion( desiredRegion );<BR>
<BR>
<BR>
&nbsp; const unsigned int argoffset = 5;<BR>
<BR>
&nbsp; if( static_cast&lt;unsigned int&gt;(argc) &lt; numberOfInitialClasses + argoffset )<BR>
&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Error: &quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; numberOfInitialClasses &lt;&lt; &quot; classes has been specified &quot;;<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;but no enough means have been provided in the command &quot;;<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;line arguments &quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<BR>
&nbsp;&nbsp;&nbsp; }<BR>
<BR>
&nbsp; for( unsigned k=0; k &lt; numberOfInitialClasses; k++ )<BR>
&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; const double userProvidedInitialMean = atof( argv[k+argoffset] );<BR>
&nbsp;&nbsp;&nbsp; kmeansFilter-&gt;AddClassWithInitialMean( userProvidedInitialMean );<BR>
&nbsp;&nbsp;&nbsp; }<BR>
<BR>
&nbsp; const char * outputImageFileName = argv[2];<BR>
<BR>
&nbsp; typedef KMeansFilterType::OutputImageType&nbsp; OutputImageType;<BR>
<BR>
&nbsp; typedef itk::ImageFileWriter&lt; OutputImageType &gt; WriterType;<BR>
<BR>
&nbsp; WriterType::Pointer writer = WriterType::New();<BR>
&nbsp;<BR>
&nbsp; writer-&gt;SetInput( kmeansFilter-&gt;GetOutput() );<BR>
<BR>
&nbsp; writer-&gt;SetFileName( outputImageFileName );<BR>
<BR>
&nbsp; try<BR>
&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; writer-&gt;Update();<BR>
&nbsp;&nbsp;&nbsp; }<BR>
&nbsp; catch( itk::ExceptionObject &amp; excp )<BR>
&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Problem encountered while writing &quot;;<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot; image file : &quot; &lt;&lt; argv[2] &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; excp &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<BR>
&nbsp;&nbsp;&nbsp; }<BR>
<BR>
&nbsp; KMeansFilterType::ParametersType estimatedMeans = kmeansFilter-&gt;GetFinalMeans();<BR>
<BR>
&nbsp; const unsigned int numberOfClasses = estimatedMeans.Size();<BR>
<BR>
&nbsp; for ( unsigned int i = 0 ; i &lt; numberOfClasses ; ++i )<BR>
&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; &quot;cluster[&quot; &lt;&lt; i &lt;&lt; &quot;] &quot;;<BR>
&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; &quot;&nbsp;&nbsp;&nbsp; estimated mean : &quot; &lt;&lt; estimatedMeans[i] &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; }<BR>
<BR>
&nbsp; return EXIT_SUCCESS;<BR>
&nbsp;<BR>
}<BR>
<BR>
<BR>
<BR>
Thank you very much<BR>
Edoardo<BR>
</FONT>
</P>

</BODY>
</HTML>