<html>
<body>
<font size=3>Hi, <br><br>
Related to this subject I have two questions:<br><br>
- ImageSpatialObject.txx line 177: why is the index computed by a cast,
and not using a 'round'? the ITK software guide says the value of the
closest pixels is returned, so nearestneighbour interpolation. A round
operation sounds then more logical to me. The same applies to line 62 of
ImageMaskSpatialObject by the way.<br><br>
- ImageSpatialObject.txx line 219: why is &quot;size[i]&quot; used and
not &quot;size[i] - 1&quot; ? Isn't this the underlying cause of the
troubles Christoph has? Alternatively,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pointLow[i] = -0.5 +
epsilon;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pointHigh[i] = size[i] - 0.5 -
epsilon;<br>
may make more sense, if you consider Figure 4.1 in the software guide.
But this is only allowed if you use a round operation in line
177.<br><br>
Best regards,<br>
Stefan.<br><br>
<br>
At 11:53 21/08/06, Luis Ibanez wrote:<br><br>
<blockquote type=cite class=cite cite>Hi Christoph,<br><br>
Thanks for posting all the details of the traceback.<br><br>
This illustrates that there is a bug in the
ImageMaskSpatialObject.<br><br>
The class is using the index without first verifying if it is 
inside<br>
the BufferedRegion or not.<br><br>
This issue has been entered as bug #3645 in the phpBugTracker<br>
<a href="http://public.kitware.com/Bug/bug.php?op=show&amp;bugid=3645&amp;pos=0" eudora="autourl">http://public.kitware.com/Bug/bug.php?op=show&amp;bugid=3645&amp;pos=0</a><br><br>
A fix has been committed to CVS<br>
<a href="http://www.itk.org/cgi-bin/viewcvs.cgi/Code/SpatialObject/itkImageMaskSpatialObject.txx?root=Insight&amp;sortby=date&amp;r2=1.10&amp;r1=1.9" eudora="autourl">http://www.itk.org/cgi-bin/viewcvs.cgi/Code/SpatialObject/itkImageMaskSpatialObject.txx?root=Insight&amp;sortby=date&amp;r2=1.10&amp;r1=1.9</a><br><br>
Please update your CVS checkout of ITK and let us know if you<br>
continue experiencing any problems.<br><br>
<br>
&nbsp;&nbsp;&nbsp; Thanks<br><br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Luis<br><br>
<br><br>
------------------------------<br>
Christoph Niedermayr wrote:<br>
<blockquote type=cite class=cite cite>Am Donnerstag, den 17.08.2006,
15:13 +0200 schrieb Christoph Niedermayr:<br><br>
<blockquote type=cite class=cite cite>Am Donnerstag, den 17.08.2006,
08:39 -0400 schrieb Luis Ibanez:</blockquote><br>
<blockquote type=cite class=cite cite><blockquote type=cite class=cite cite>What
version of ITK are you using ?</blockquote><br>
2.6<br><br>
<br>
<blockquote type=cite class=cite cite>There are no calls to GetPixel()
inside the file<br>
&nbsp;&nbsp; Insight/Code/Algorithms/<br>
&nbsp;&nbsp;&nbsp;&nbsp;
itkMattesMutualInformationImageToImageMetric.txx<br>
What the metric calls is the method &quot;IsInside&quot; in lines<br>
457 and 526.</blockquote><br>
you're right, i got that confused. But &quot;IsInside&quot; then calls
&quot;GetPixel&quot;,<br>
if the sample is considered inside the SpacialObject, in my case with
an<br>
invald index.</blockquote><br>
Hi Luis!<br>
here's whats happening exactly, values are taken from gdb:<br>
the image i use as mask has the following properties:<br>
origin = [-150, -113, -231]<br>
index&nbsp; = [0, 0, 0]<br>
size&nbsp;&nbsp; = [60, 42, 60]<br>
spacing= [5, 5, 5]<br>
the point that is given to &quot;IsInside&quot; has the coordinates<br>
[30, -88, 69]<br>
and is considered inside (because the upper z bound of the
spacialobject<br>
is 69, and only values exceeding the bound are considered outside)<br>
z-distance between origin and the point is 300.<br>
z-index is then calculated as 60 (invalid), causing SIGSEV when
calling<br>
&quot;GetPixel&quot;<br>
below you find a code sample which causes this error. of course,
SIGSEV<br>
only occurs if the accessed memory location is indeed off limits to
the<br>
program. eg. using a 2D image of size 10x10 queries the image buffer
at<br>
110, but did not cause SIGSEV..<br>
best regards,<br>
chris<br>
_____<br>
#include &quot;itkImage.h&quot;<br>
#include &quot;itkImageMaskSpatialObject.h&quot;<br>
&nbsp; // create 123x123x123 image<br>
&nbsp; typedef itk::Image&lt;unsigned char,3&gt; ImageType;<br>
&nbsp; ImageType::Pointer img = ImageType::New();<br>
&nbsp; ImageType::RegionType region;<br>
&nbsp; ImageType::SizeType size;<br>
&nbsp; ImageType::IndexType index;<br>
&nbsp; ImageType::PointType origin;<br>
&nbsp; ImageType::SpacingType spacing;<br>
&nbsp; size.Fill(123);<br>
&nbsp; index.Fill(0);<br>
&nbsp; origin.Fill(0);<br>
&nbsp; spacing.Fill(1);<br>
&nbsp; region.SetSize(size);<br>
&nbsp; region.SetIndex(index);<br>
&nbsp; img-&gt;SetRegions(region);<br>
&nbsp; img-&gt;SetOrigin(origin);<br>
&nbsp; img-&gt;SetSpacing(spacing);<br>
&nbsp; img-&gt;Allocate();<br>
&nbsp; // create mask from image<br>
&nbsp; itk::ImageMaskSpatialObject&lt;3&gt;::Pointer mask =<br>
itk::ImageMaskSpatialObject&lt;3&gt;::New();<br>
&nbsp; mask-&gt;SetImage(img);<br>
&nbsp; // check if borderpoint is inside<br>
&nbsp; ImageType::PointType testPoint;<br>
&nbsp; testPoint.Fill(123);<br>
&nbsp; mask-&gt;IsInside(testPoint);<br>
_______________________________________________<br>
Insight-users mailing list<br>
Insight-users@itk.org<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" eudora="autourl">http://www.itk.org/mailman/listinfo/insight-users</a><br>
</blockquote><br><br>
_______________________________________________<br>
Insight-users mailing list<br>
Insight-users@itk.org<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" eudora="autourl">http://www.itk.org/mailman/listinfo/insight-users</a></font></blockquote></body>
<br>
</html>