Hi,<br>I&#39;d like to do something like a convolution, but not quite.<br>I can&#39;t explain it too well so here&#39;s a picture.<br><br>x.x.x.x<br>.......<br>x.x.x.x<br>.......<br>x.x.x.x<br><br>Here my input image is of dimension 5x7, and the &#39;x&#39; and &#39;.&#39; are voxels of the input image. (It is really N-dimensional).<br>
Then there&#39;s an image of dimension 3x4 (call it the x-image), where x-image(i,j) is the value of the (i,j)th &#39;x&#39; in the picture above.<br>The idea is I want to do a convolution, but only at the voxels marked &#39;x&#39;. <br>
I know MaskNeighborhoodOperatorImageFilter does this, however I would like the output image to be the same dimensions as the x-image - smaller than the input image. So output(i,j) contains the convolution at the (i,j)th &#39;x&#39;.<br>
I use this for something done in voxel space, so if the physical space/origin aren&#39;t right it doesn&#39;t matter.<br><br>The additional bits of information are that:<br>- I know exactly how to orient the &#39;x&#39; within the input image; they are on a regular grid starting at (0,0) of the input image, and then placed every h voxels (of the input image).<br>
- My kernel is separable ( however, can range from 3x3 to ~35x35. I anticipate the likely sizes will be 3x3 to ~20x20 )  (mine will be usu. 2- or 3-D)<br><br>If I use MaskNeighborhoodOperatorImageFilter, I&#39;d need to create a mask of the same size as the input image with 1 where the &#39;x&#39; are, run it, and then loop through the output image and copy the values (where the mask is 1) back to my x-image. <br>
I get the feeling that because my &#39;x&#39; are regularly spaced and my kernel is separable, I can modify this code to speed up the convolution greatly, but I&#39;m not sure how to do it. <br><br>The part that causes me the most difficulty is how to make my neighborhood iterator only walk the &#39;x&#39; of the input image. I could try a<br>
&#39;iterator += spacing&#39;, but I&#39;d need to work out when to skip h rows (eg row 1 of the picture above) and when to skip h voxels (eg in row 0 of the picture above).<br><br>Also, in this case, would it be faster to do one ND convolution or N lots of 1D convolutions? <br>
I think I have three options:<br>- do the convolution on the input image and at the end pick out the values that match the indices of the &#39;x&#39;s. Disadvantage being that I have to do the convolution at every voxel whereas I only want the answer every h voxels, so I waste some computation (?)<br>
- do N lots of 1D convolutions, but I think this is the same as the previous option because all the intermediate convolutions will need to be done on the input image (ie at every voxel). I don&#39;t save any time by skipping the non-&#39;x&#39; voxels.<br>
- do one ND convolution, but only at the indices marked &#39;x&#39;. I need some way of visiting just the &#39;x&#39; with my neighborhood iterator.<br><br>Does anyone have some advice regarding this? (apologies for the clumsy explanation)<br>
<br>thanks,<br>Amy<br>