<br>Hi Luis et al.,<br><br>Now the ITK library is compiled and installed with the additional features available.  Now this code will compile:<br><br><span style="font-family: courier new,monospace;">typedef itk::MeanSquaresImageToImageMetric&lt;iBWImgType,iBWImgType&gt; MetricType;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">MetricType::Pointer metric = MetricType::New();</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">metric-&gt;SetUseFixedImageSamplesIntensityThreshold( true );</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">metric-&gt;SetFixedImageSamplesIntensityThreshold( intensityThreshold );</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">//metric-&gt;SetUseSequentialSampling( true );</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">//metric-&gt;SetUseAllPixels( true );</span><br style="font-family: courier new,monospace;"><br><br>Now a question arises about the range of values for the &quot;intensityThreshold&quot;.  The input pixel and image typedefs are:<br>
<br><span style="font-family: courier new,monospace;">const unsigned short dimImg = 2;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">typedef float iPixType;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">typedef itk::Image&lt; iPixType, dimImg &gt; iBWImgType;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">typedef itk::ImageFileReader&lt; iBWImgType &gt; bwImageReaderType;</span><br style="font-family: courier new,monospace;">
<br><br>The image reader is pulling in .tif images, which ImageMagick identifies as (see verbose output in attachment):<br><br><span style="font-family: courier new,monospace;">$  identify testdata/bw/section0003_w1.tif </span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">testdata/bw/section0003_w1.tif TIFF 549x539 549x539+0+0 16-bit Grayscale DirectClass 615KB 0.010u 0:00.030</span><br><br>When this image is read into the iPixType, I assume the range of these &quot;unsigned short&quot; values is mapped or cast into a range of &quot;float&quot; values.  Is the new range of values from 0.0 to 1.0, is that correct for the &quot;float&quot; pixel type in ITK?  How does the ITK image reader convert or cast the pixel values to float?  (The reason the input images are specified as &quot;float&quot; rather than &quot;unsigned short&quot; is to have them input to the registration method as floats - should this be done with an explicit cast filter?)<br>
<br>The input images have a black background (RGB value: 0 0 0).  It would be great to threshold the <span style="font-family: courier new,monospace;">MeanSquaresImageToImageMetric</span> to exclude all the black pixels.  In the range of values for the input pixel data that are an unsigned short (0 to 65535), any pixel above 0 would be<br>
<br><span style="font-family: courier new,monospace;">unsigned short intensityThreshold = 1;</span><br><br>However, the intensityThreshold is declared and initialized as:<br><br><span style="font-family: courier new,monospace;">iBWImgType::PixelType intensityThreshold = 0.0;</span><br style="font-family: courier new,monospace;">
<br>Is this a reasonable value for this float intensityThreshold:<br><br><span style="font-family: courier new,monospace;">iBWImgType::PixelType 
intensityThreshold = 1.0 / USHRT_MAX;</span><br><br><br>TIA,<br>Darren<br><br><br><br><br><div class="gmail_quote">On Sat, Mar 6, 2010 at 12:15 PM, Luis Ibanez <span dir="ltr">&lt;<a href="mailto:luis.ibanez@kitware.com">luis.ibanez@kitware.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Hi Darren,<br>
<br>
The feature that you are referring to, is only available<br>
in the new version of the metrics that are in the<br>
Code/Review directory.<br>
<br>
In order to use this classes you must reconfigure your<br>
binary build of ITK, by rerunning CMake and turning<br>
ON the CMake variables:<br>
<br>
   *  ITK_USE_REVIEW<br>
   *  OPTIMIZED_REGISTRATION_METHODS<br>
<br>
Then you can rebuild your application.<br>
<br>
<br>
     Regards,<br>
<br>
<br>
            Luis<br>
<br>
<br>
-----------------------------------------------------------------------------------<br>
<div><div></div><div class="h5">On Thu, Mar 4, 2010 at 5:56 PM, Darren Weber<br>
&lt;<a href="mailto:darren.weber.lists@gmail.com">darren.weber.lists@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; In an image registration framework, the metric determines image &quot;matches&quot;.<br>
&gt; Let&#39;s suppose we have large images that contain a majority of background<br>
&gt; color (or transparency).  In a metric like the<br>
&gt; itk::MeanSquaresImageToImageMetric, the majority of the sqaured-diff-values<br>
&gt; would be zero and the remainder of the &quot;relevant&quot; pixel differences may be<br>
&gt; &quot;swamped&quot; or &quot;lost&quot; in the division by a large N.<br>
&gt; Also, it appears the default metric sampling is a random-sample of the image<br>
&gt; pixels (this might be modified with methods like &quot;SetUseAllPixels(bool)&quot;).<br>
&gt;  In this case, it is possible, perhaps likely, that few of the &quot;relevant&quot;<br>
&gt; pixels will be evaluated in the metric.<br>
&gt; See:<br>
&gt; <a href="http://www.itk.org/Doxygen316/html/classitk_1_1ImageToImageMetric.html#42b876134388099afbf34b14faf83cdb" target="_blank">http://www.itk.org/Doxygen316/html/classitk_1_1ImageToImageMetric.html#42b876134388099afbf34b14faf83cdb</a><br>

&gt; This documentation suggests there are also options to define:<br>
&gt; IntensityThreshold, Masks, and SequentialSampling<br>
&gt; In my reading of the doxy page (see next link), there is a method called<br>
&gt; &quot;SetFixedImageSamplesIntensityThreshold&quot; that might be useful to define a<br>
&gt; background value (like zero) to be excluded from the metric.  Is that right?<br>
&gt; <a href="http://www.itk.org/Doxygen316/html/classitk_1_1MeanSquaresImageToImageMetric-members.html" target="_blank">http://www.itk.org/Doxygen316/html/classitk_1_1MeanSquaresImageToImageMetric-members.html</a><br>
&gt; What is the logic of this &quot;threshold&quot; method?  From the documentation, it<br>
&gt; appears to be a minima value.  So if the background intensity is zero, the<br>
&gt; threshold value of 1 would include all pixels &gt; 0 (note the threshold value<br>
&gt; must be the same type as the fixed image PixelType).<br>
&gt; There is no equivalent method for the moving image,<br>
&gt; like &quot;SetMovingImageSamplesIntensityThreshold&quot;.  Is this unnecessary because<br>
&gt; the metric only scans the pixels of the moving image that fall within the<br>
&gt; &quot;domain&quot; of fixed image after the transform &amp; interpolation?<br>
&gt; I could not locate this method in the class hierarchy - is it available<br>
&gt; (inherited) in all metrics?<br>
&gt; I&#39;m confused because these methods do not appear to be available<br>
&gt; to itk::MeanSquaresImageToImageMetric<br>
&gt; e.g.:  CODE:<br>
&gt;     typedef itk::MeanSquaresImageToImageMetric&lt; iBWImgType, iBWImgType &gt;<br>
&gt; MetricType;<br>
&gt;     MetricType::Pointer metric = MetricType::New();<br>
&gt;     metric-&gt;SetFixedImageSamplesIntensityThreshold( 0.0 );<br>
&gt;     metric-&gt;SetUseAllPixels( true );<br>
&gt; e.g.:  COMPILATION:<br>
&gt; itkImageRigid2DCoregistration.cxx: In function ‘int main(int, char**)’:<br>
&gt; itkImageRigid2DCoregistration.cxx:442: error: ‘class<br>
&gt; itk::MeanSquaresImageToImageMetric&lt;iBWImgType, iBWImgType&gt;’ has no member<br>
&gt; named ‘SetFixedImageSamplesIntensityThreshold’<br>
&gt; itkImageRigid2DCoregistration.cxx:443: error: ‘class<br>
&gt; itk::MeanSquaresImageToImageMetric&lt;iBWImgType, iBWImgType&gt;’ has no member<br>
&gt; named ‘SetUseAllPixels’<br>
&gt; gmake[2]: ***<br>
&gt; [CMakeFiles/itkImageRigid2DCoregistration.dir/itkImageRigid2DCoregistration.cxx.o]<br>
&gt; Error 1<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; TIA,<br>
&gt; Darren<br>
&gt;<br>
</div></div>&gt; _____________________________________<br>
&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;<br>
&gt; Visit other Kitware open-source projects at<br>
&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;<br>
&gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt; <a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
&gt;<br>
&gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;<br>
&gt; Follow this link to subscribe/unsubscribe:<br>
&gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;<br>
&gt;<br>
</blockquote></div><br>