<br>I don&#39;t see a Compose method for the bspline transform class, only a SetBulkTransform.<br><br><br>Some code is able to read a series of transforms and report the content of the transforms, i.e.:<br><br><font size="1"><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">*****************************************</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">section0181_w1</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">section0181_w1 : /Volumes/data/plastic_imgproc/n2_04d/w1/tif/section0179_w1.tif</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">section0181_w1 : /Volumes/data/plastic_imgproc/n2_04d/w1/bw_align/section0179to0178_w1_bspline.xfm</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Number of transforms = 1</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline transform parameters:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">[-0.00101862, -0.000136816, 0.0428942, -0.0173411, -0.0012381, 0, -0.0152427, -0.0829083, 0.562787, 0.0513636, 0.00563827, 0, -0.0978897, 0.17254, -0.187553, 0.132699, 0.118559, 0, -0.0423971, 0.0390156, -0.254502, -0.211898, 0.0186821, 0, 0.000965728, 0.0209634, 0.0971252, 0.0268716, -0.00159635, 0, 0, 0, 0, 0, 0, 0, -0.000822122, -0.0595562, -0.106872, 0.0393177, 0.00243043, 0, 0.0182722, -0.183968, 0.136984, 1.16236, 0.064037, 0, 0.0551541, 0.37945, -0.741088, 0.394497, 0.0657694, 0, -0.0302881, -0.371698, 0.340337, 0.463057, -0.00263912, 0, -0.00393346, -0.00450752, 0.209972, 0.0928676, -0.000414552, 0, 0, 0, 0, 0, 0, 0]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline transform fixed parameters:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">[6, 6, -5.7771, -6.41285, 5.74946, 6.38521, 1, 0, 0, 1]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline bulk transform name:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">IdentityTransform</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline bulk transform parameters:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">[-59.7311]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline bulk transform fixed parameters:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">[-2.00001]</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">section0181_w1 : /Volumes/data/plastic_imgproc/n2_04d/w1/tif/section0180_w1.tif</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">section0181_w1 : /Volumes/data/plastic_imgproc/n2_04d/w1/bw_align/section0180to0179_w1_bspline.xfm</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Number of transforms = 2</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline transform parameters:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">[-0.00167702, 0.0400107, 0.163826, 0.0494486, 0.000260499, 0, -0.112263, -0.962398, 0.382706, 0.0468105, 0.000545406, 0, -0.013627, 0.032147, 0.303242, -0.248178, 0.0577727, 0, 0.0310104, 0.0608204, -0.450371, 0.0761785, 0.0396465, 0, -0.00145428, -0.0748339, -0.142132, -0.0117953, 0.00109538, 0, 0, 0, 0, 0, 0, 0, -0.000739103, 0.0115463, -0.233451, -0.151604, -0.00148716, 0, -0.124814, -0.51848, -0.0427284, -1.13778, -0.0332992, 0, -0.22645, -1.40995, 1.29008, -0.406795, -0.0169783, 0, -0.014309, 0.492513, -0.433653, -0.484105, 0.0174839, 0, 0.00246247, 0.100723, 0.0245804, -0.038708, 0.000375209, 0, 0, 0, 0, 0, 0, 0]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline transform fixed parameters:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">[6, 6, -5.7771, -6.32993, 5.74946, 6.30229, 1, 0, 0, 1]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline bulk transform name:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">IdentityTransform</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline bulk transform parameters:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">[-2.00001]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline bulk transform fixed parameters:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">[-59.7206]</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">section0181_w1 : /Volumes/data/plastic_imgproc/n2_04d/w1/tif/section0181_w1.tif</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">section0181_w1 : /Volumes/data/plastic_imgproc/n2_04d/w1/bw_align/section0181to0180_w1_bspline.xfm</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Number of transforms = 3</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline transform parameters:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">[0.00301806, -0.00652163, -0.144203, 0.0245637, 0.00424984, 0, -0.00674302, 0.435562, -0.00178908, 0.420808, -0.021262, 0, -0.0294096, -0.355242, -0.005834, -0.0189256, -0.160569, 0, 0.0709158, 0.736917, -0.210242, -0.212069, -0.0294319, 0, 0.00253275, 0.0315866, -0.071481, -0.0291887, 4.053e-05, 0, 0, 0, 0, 0, 0, 0, 0.00207632, -0.0583709, 0.109967, 0.12651, -0.00259079, 0, 0.0616846, 0.0246376, 0.113406, 0.439344, -0.066714, 0, 0.032752, 0.475236, -0.645249, 0.255606, -0.0351145, 0, -0.0414853, -0.154973, 0.331845, 0.634161, 0.0229426, 0, -0.00318072, -0.070252, -0.195498, -0.0416054, 0.000584519, 0, 0, 0, 0, 0, 0, 0]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline transform fixed parameters:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">[6, 6, -5.88766, -6.46814, 5.86002, 6.4405, 1, 0, 0, 1]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline bulk transform name:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">IdentityTransform</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline bulk transform parameters:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">[-2.00001]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">bspline bulk transform fixed parameters:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">[-59.7214]</span><br style="font-family: courier new,monospace;">
</font><br><br>This is a short report for a series of images from number 178--181 (the image files are named &quot;section%04d_w1.tif&quot;).  The idea is to now concatenate all the bspline transforms so that image 181 is transformed all the way to 178, via 180 and 179.  Is the way to do that something like this:<br>
<br><br> <span style="font-family: courier new,monospace;">// no bulk transform for </span><span style="font-family: courier new,monospace;">bsplineTransform179to178</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">bsplineTransform180to179.SetBulkTransform( 
bsplineTransform179to178 );</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">
bsplineTransform181to180.SetBulkTransform(
bsplineTransform180to179 );</span><br style="font-family: courier new,monospace;">
<br><br>Will that effectively concatenate the entire series of transforms to get image 180 all the way into the space of image 178?<br><br>TIA,<br>Darren<br><br><br><br><br><br><br><br><div class="gmail_quote">On Thu, Oct 15, 2009 at 8:47 PM, Richard Beare <span dir="ltr">&lt;<a href="mailto:richard.beare@gmail.com">richard.beare@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">I think that most of the transform types have a Compose method so you<br>
can compute the transform between your first slice and any other.<br>
<div><div></div><div class="h5"><br>
On Fri, Oct 16, 2009 at 2:30 PM, Xiaofeng Z &lt;<a href="mailto:xf10036@hotmail.com">xf10036@hotmail.com</a>&gt; wrote:<br>
&gt; There must be a way to combine the transformations together before applying<br>
&gt; the combined transformation to the image.  Otherwise, after hundreds of<br>
&gt; interpolation, imageN will probably not have much information left.<br>
&gt; From: Darren Weber<br>
&gt; Sent: Thursday, October 15, 2009 5:20 PM<br>
&gt; To: ITK Users<br>
&gt; Subject: [Insight-users] Constructing 3D stack from 2D image series<br>
&gt; (withregistration)<br>
&gt;<br>
&gt; We have a series of several thousand 2D microscope images:<br>
&gt;<br>
&gt; img0001 ... imgN<br>
&gt;<br>
&gt; A simple ITK program uses itkImageSeriesReader to stack the sequential<br>
&gt; images into a 3D volume for output to a .vtk file.  Without any<br>
&gt; coregistration of the image series, the result is a mess (as expected).<br>
&gt;<br>
&gt; Another ITK program runs registration algorithm(s) on consecutive pairs of<br>
&gt; images in the 2D image series (each pair of images is registered<br>
&gt; independently of any other images in the series).  It outputs a transform<br>
&gt; file for each image registration, using file names something like:<br>
&gt;<br>
&gt; img0002to0001.xfm<br>
&gt; img0003to0002.xfm<br>
&gt; etc.<br>
&gt;<br>
&gt; What is an efficient way to combine and apply these transforms using an ITK<br>
&gt; pipeline to &#39;concatenate&#39; the image series into a 3D stack?<br>
&gt;<br>
&gt; My conception of how this might work, in outline, is:<br>
&gt;<br>
&gt; a)  begin with img0001<br>
&gt; apply transform: none<br>
&gt;<br>
&gt; b) add img0002 to the stack<br>
&gt; apply transform: img0002to0001.xfm<br>
&gt;<br>
&gt; c) add img0003 to the stack<br>
&gt; apply transform: img0002to0001.xfm<br>
&gt; apply transform: img0003to0002.xfm<br>
&gt; (How to concatenate transforms without resampling image data?)<br>
&gt;<br>
&gt; d) add img0004 to the stack<br>
&gt; apply transform: img0002to0001.xfm<br>
&gt; apply transform: img0003to0002.xfm<br>
&gt; apply transform: img0004to0003.xfm<br>
&gt; (How to concatenate transforms without resampling image data?)<br>
&gt;<br>
&gt; etc.<br>
&gt;<br>
&gt;<br>
&gt; In this conception of the problem, the pair-wise registration transforms are<br>
&gt; &#39;concatenated&#39; to propagate the registration through the entire series.<br>
&gt; What is the most efficient way to do that in ITK?<br>
&gt;<br>
&gt; Is it possible (or reasonable) to associate a transform object (or file)<br>
&gt; with each &#39;element&#39; of an itkImageSeriesReader?  If not, is there another<br>
&gt; convention for creating an ITK filter pipeline or registration pipeline?<br>
&gt;<br>
&gt; TIA and take care,<br>
&gt; Darren<br>
&gt;<br>
&gt; ________________________________<br>
&gt;<br>
&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; 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>
&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; 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>
</div></div></blockquote></div><br>