<div dir="ltr">Hi!<div><br></div><div>I debug the code of the MMI implementation and the bottleneck is in in this part: <br></div><div><br></div><div><b>itkImageToImageMetricv4GetValueAndDerivativeThreader.hxx:</b><br></div><div><br></div><div><div>template< typename TImageToImageMetricv4 ></div><div>void</div><div>ImageToImageMetricv4GetValueAndDerivativeThreader< ThreadedIndexedContainerPartitioner, TImageToImageMetricv4 ></div><div>::<b>ThreadedExecution</b> ( const DomainType & indexSubRange,</div><div>                      const ThreadIdType threadId )</div><div>{</div><div>  //Initialize per thread buffers and variables.</div><div>  this->m_Associate->InitializeThread( threadId );</div><div><br></div><div>  typename TImageToImageMetricv4::VirtualPointSetType::ConstPointer virtualSampledPointSet = this->m_Associate->GetVirtualSampledPointSet();</div><div>  typedef typename TImageToImageMetricv4::VirtualPointSetType::MeshTraits::PointIdentifier ElementIdentifierType;</div><div>  const ElementIdentifierType begin = indexSubRange[0];</div><div>  const ElementIdentifierType end   = indexSubRange[1];</div><div>  VirtualIndexType virtualIndex;</div><div>  typename VirtualImageType::ConstPointer virtualImage = this->m_Associate->GetVirtualImage();</div><div> <b> for( ElementIdentifierType i = begin; i <= end; ++i )</b></div><div><b>    {</b></div><div><b>    const VirtualPointType & virtualPoint = virtualSampledPointSet->GetPoint( i );</b></div><div><b>    virtualImage->TransformPhysicalPointToIndex( virtualPoint, virtualIndex );</b></div><div><b>    this->ProcessVirtualPoint( virtualIndex, virtualPoint, threadId );</b></div><div><b>    }</b></div><div>  //Finalize per thread actions</div><div>  this->m_Associate->FinalizeThread( threadId );</div><div>}</div></div><div><br></div><div>The "for" statement takes a long time to finish running... and I think the default multithreaded is 2...I tried to raise this value through seter "SetMaximumNumberOfThreads()" but did not notice substantial improvements in performance ..<br></div><div><br></div><div>However, when set build-type to "release" instead "debug" the performance is much better (2 ~ 3 sec.) but without reaching to the order of milliseconds....would I like it to be.<br></div><div><br></div><div>I could not do the test with the ITK 3D Slicer (my OS is of 32-bits only).<br></div><div><br></div><div>What do you think? can further improve performance?<br></div><div><br></div><div>Thanks and regards!<br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-03-11 9:37 GMT-03:00 Gabriel A. Giménez <span dir="ltr"><<a href="mailto:gabrielgimenez85@gmail.com" target="_blank">gabrielgimenez85@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Ok...I understand...,I'll try...and I commented the results....<div><br></div><div>Thanks in advance!<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-03-11 9:26 GMT-03:00 Braun Tim <span dir="ltr"><<a href="mailto:Tim.Braun@sirona.com" target="_blank">Tim.Braun@sirona.com</a>></span>:<div><div class="h5"><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="DE" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Yes, exactly.
</span><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">If you compile ITK e.g. with Visual Studio, you can set the compile profile either to ‘debug’, which is slow but allows the debugger to stop at breakpoints etc,
 and ‘release’, which is much faster due to enabled optimizations but cannot be debugged easily.. If you have trouble compiling ITK, there are some good youtube tutorials around covering this topic.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">Von:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Gabriel A. Giménez [mailto:<a href="mailto:gabrielgimenez85@gmail.com" target="_blank">gabrielgimenez85@gmail.com</a>]
<br>
<b>Gesendet:</b> Mittwoch, 11. März 2015 13:21</span></p><div><div><br>
<b>An:</b> Braun Tim<br>
<b>Betreff:</b> Re: [ITK] [ITK-users] Mattes Mutual Information Speed with 3D Images<u></u><u></u></div></div><p></p><div><div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Hi! thank you very much for your answer!<u></u><u></u></p>
<div>
<p class="MsoNormal">I'll try the alternatives do you recommend me...,I do not understand the execution mode "Release" ? it is a compile option?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Regards!<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">2015-03-11 6:18 GMT-03:00 Braun Tim <<a href="mailto:Tim.Braun@sirona.com" target="_blank">Tim.Braun@sirona.com</a>>:<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Hi Gabriel,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">this is several orders of magnitude slower than it should be, so I assume there is something
 weird going on. Applying the metric should take a couple of milliseconds, not longer. Did you compile ITK from source yourself? Then you should be able to use the ‘DEBUG’ configuration to trace into the metric evaluation and find out what the performance bottleneck
 is – that’s probably faster than empirical testing.. Running the algorithm must be done in release mode, of course. Another option would be to try the ITK Slicer program, which contains the Brainsfit algorithm which uses MMI for registration – here, you can
 try different parameters and check the runtime..</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">cheers, Tim</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">Von:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Gabriel A. Giménez [mailto:<a href="mailto:gabrielgimenez85@gmail.com" target="_blank">gabrielgimenez85@gmail.com</a>]
<br>
<b>Gesendet:</b> Dienstag, 10. März 2015 13:33<br>
<b>An:</b> Braun Tim<br>
<b>Betreff:</b> Re: [ITK] [ITK-users] Mattes Mutual Information Speed with 3D Images</span><u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">Hi Braun, thanks for your answer...<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I use images of RIRE BD (<a href="http://www.insight-journal.org/rire/" target="_blank">http://www.insight-journal.org/rire/</a>), my initial tests I make with package training_001
 (CT - MR_PD). Following your recommendation here is my configuration:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">         metric->SetNumberOfHistogramBins( 50 );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">         double samplingPercentage = 0.002;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">         registration->SetMetricSamplingPercentage( samplingPercentage );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">         RegistrationType::MetricSamplingStrategyType  samplingStrategy  =<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">                                                                                           RegistrationType::REGULAR;<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Unfortunately, the results were not good ... the average execution time remains the same (25 ~ 30 seconds). With a population size equal to 50, the execution time of an iteration
 is in the order of 25 minutes, very slow for me ...<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">These are the image data:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">Fixed Image:<u></u><u></u></p>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">ObjectType = Image<u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">NDims = 3<u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">BinaryDataByteOrderMSB = True<u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">AnatomicalOrientation = LPH<u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">ElementSpacing = 0.653595 0.653595 4.000000<u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal"><b>DimSize = 512 512 29</b><u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">ElementType = MET_SHORT<u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">ElementDataFile = image.bin<u></u><u></u></p>
</div>
</div>
</blockquote>
</blockquote>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Moving Image:<u></u><u></u></p>
</div>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">ObjectType = Image<u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">NDims = 3<u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">BinaryDataByteOrderMSB = True<u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">AnatomicalOrientation = LPH<u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">ElementSpacing = 1.250000 1.250000 4.000000<u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal"><b>DimSize = 256 256 26</b><u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">ElementType = MET_SHORT<u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">ElementDataFile = image.bin<u></u><u></u></p>
</div>
</div>
</blockquote>
</blockquote>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks and regards!<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">2015-03-10 5:51 GMT-03:00 Braun Tim <<a href="mailto:Tim.Braun@sirona.com" target="_blank">Tim.Braun@sirona.com</a>>:<u></u><u></u></p>
<p class="MsoNormal">Hi Gabriel,<br>
<br>
the easiest way to speed up the metric calculation I can think of (without having more detailed information about your setup) is to reduce the numbers of samples used to build the MMI histogram estimates. For 256^3 Voxel Volumes, we typically use a value of
 0.002. You can set the sampling percentage in the registration method that manages the metric and the optimizer:<br>
<br>
        registrationMethod->SetMetricSamplingStrategy(ImageRegistrationMethodTypev4::REGULAR);<br>
        registrationMethod->SetMetricSamplingPercentage(0.002);<br>
<br>
Another way to speed up calculation would be to reduce the resolution of the registered volumes - which is somewhat similar to reducing the sampling percentage, but has memory benefits and might reduce aliasing..<br>
<br>
<br>
Hope that helps!<br>
<br>
Cheers,<br>
Tim<br>
<br>
-----Ursprüngliche Nachricht-----<br>
Von: Community [mailto:<a href="mailto:community-bounces@itk.org" target="_blank">community-bounces@itk.org</a>] Im Auftrag von Gabriel A. Giménez<br>
Gesendet: Dienstag, 10. März 2015 00:02<br>
An: <a href="mailto:insight-users@itk.org" target="_blank">insight-users@itk.org</a><br>
Betreff: [ITK] [ITK-users] Mattes Mutual Information Speed with 3D Images<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><br>
Hello everyone...<br>
<br>
I'm working on a genetic optimizer for Rigid 3D Registration.<br>
<br>
The fitness of each individual is calculated using Mattes Mutual Information, the execution time of the metric is high ... (30 seconds on average). This makes the registration too slow.<br>
<br>
Any recommendations? could improve the performance metrics? otherwise most appropriate metric?<br>
<br>
Regards!<br>
<br>
<br>
<br>
--<br>
View this message in context: <a href="http://itk-insight-users.2283740.n2.nabble.com/Mattes-Mutual-Information-Speed-with-3D-Images-tp7586971.html" target="_blank">
http://itk-insight-users.2283740.n2.nabble.com/Mattes-Mutual-Information-Speed-with-3D-Images-tp7586971.html</a><br>
Sent from the ITK Insight Users mailing list archive at Nabble.com.<br>
_____________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">
http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
<br>
Please keep messages on-topic and check the ITK FAQ at:<br>
<a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/insight-users" target="_blank">http://public.kitware.com/mailman/listinfo/insight-users</a><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal">_______________________________________________<br>
Community mailing list<br>
<a href="mailto:Community@itk.org" target="_blank">Community@itk.org</a><br>
<a href="http://public.kitware.com/mailman/listinfo/community" target="_blank">http://public.kitware.com/mailman/listinfo/community</a><br>
<br>
<br>
-----------------------------------------------------------------------------------------------------------<br>
Sirona Dental Systems GmbH * HRB 24948 *<br>
Vorsitzender des Aufsichtsrats: Dr. Erich Blum *<br>
Sirona Dental Services GmbH * HRB 25817 *<br>
Geschaeftsfuehrung: Rainer Berthan * Michael Geil *<br>
Sitz der Gesellschaften: Bensheim * Registergericht: AG Darmstadt *<br>
------------------------------------------------------------------------------------------------------------<br>
Diese E-Mail ist ausschliesslich fuer den angesprochenen Adressaten<br>
bestimmt und kann vertrauliche Informationen beinhalten.<br>
--<br>
This e-mail is intended only for the designated recipient(s). It may<br>
contain confidential or proprietary information.<br>
------------------------------------------------------------------------------------------------------------<u></u><u></u></p>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<p class="MsoNormal">--
<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><b><i><span style="font-size:7.5pt;color:#666666">Gabriel Alberto Giménez.</span></i></b><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
<p> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">-----------------------------------------------------------------------------------------------------------<br>
Sirona Dental Systems GmbH • HRB 24948 •<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal">Vorsitzender des Aufsichtsrats: Dr. Erich Blum •<br>
Sirona Dental Services GmbH • HRB 25817 •<br>
Geschäftsführung: Rainer Berthan • Michael Geil •<br>
Sitz der Gesellschaften: Bensheim • Registergericht: AG Darmstadt •<br>
------------------------------------------------------------------------------------------------------------<br>
Diese E-Mail ist ausschliesslich fuer den angesprochenen Adressaten<br>
bestimmt und kann vertrauliche Informationen beinhalten.<br>
--<br>
This e-mail is intended only for the designated recipient(s). It may<br>
contain confidential or proprietary information.<br>
------------------------------------------------------------------------------------------------------------<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><b><i><span style="font-size:7.5pt;color:#666666">Gabriel Alberto Giménez.</span></i></b><u></u><u></u></p>
</div>
</div>
</div>
</div></div></div>
</div>

</blockquote></div></div></div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr"><font color="#666666" size="1"><i><b>Gabriel Alberto Giménez.</b></i></font></div></div>
</font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><font color="#666666" size="1"><i><b>Gabriel Alberto Giménez.</b></i></font></div></div>
</div>