<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
&nbsp;<BR>
I want the distance to the boundary.&nbsp; The points are located on the boundary&nbsp;and dense enough. I mean that when I connect those points with simple splines it will return well defined closed contour. <BR>&nbsp;<BR>I got those data from dcm files, the hospital physicians manually put those point to outline some organs, such as prostate. I want to build an implicit shape model. So the first problem is to convert these point based shape or "explicit" into a signed distance function or "implicit"<BR>&nbsp;<BR>What about the second question I have there about smart pointer.<BR>Is it OK to return a smart pointer from a function?<BR>E.g. I have this code:<BR>//////////////////////////////////////////////////////////////////////<BR>&nbsp;main.cpp<BR>typedef itk::Image&lt; unsigned char, 2 &gt; BinaryImageType;<BR>typedef itk::Image&lt; float , 2&gt; LSVImageType;<BR>LSVImageFilter::Pointer LSVImage = SDF(contour) // where the contour is binary image&nbsp;<BR><BR>SDF.cpp<BR>LSVImageType::Pointer SDF(BinaryImageType::Pointer contour)<BR>{<BR>typedef itk::SignedDanielssonDistanceMapImageFilter &lt;&nbsp; BinaryImageFilter, LSVImageFilter &gt; FilterType;<BR>FilterType::Pointer filter = FilterType::New(); <BR>filter -&gt;SetInput ( contour ); // contour is the binary image <BR>return filter-&gt;GetOutput();<BR>} <BR>////////////////////////////////////////////////////////////////////<BR>&nbsp;<BR>Thanks<BR>Siqi<BR><BR>&gt; Date: Wed, 10 Dec 2008 15:49:39 -0500<BR>&gt; From: luis.ibanez@kitware.com<BR>&gt; To: pidanchen@hotmail.com<BR>&gt; CC: insight-users@itk.org<BR>&gt; Subject: Re: [Insight-users] SignedDanielssonDistanceMapImageFilter<BR>&gt; <BR>&gt; <BR>&gt; Hi chensiqi<BR>&gt; <BR>&gt; <BR>&gt; Here is the philosophical question that you must<BR>&gt; answer before your proceed further.<BR>&gt; <BR>&gt; <BR>&gt; You want to get the distance to "what" ?<BR>&gt; <BR>&gt; <BR>&gt; Do you want the distance to the points ?<BR>&gt; Do you want the distance to the boundary ?<BR>&gt; <BR>&gt; <BR>&gt; From a set of points located in a boundary is<BR>&gt; *very difficult* to find the inside of an object.<BR>&gt; <BR>&gt; Do you have a topology connecting these points ?<BR>&gt; e.g. a triangulated surface ?<BR>&gt; <BR>&gt; How did you get these points ?<BR>&gt; It may be easier to work with the data preceeding<BR>&gt; your point extraction.<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; Regards,<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; Luis<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; ==================<BR>&gt; chensiqi wrote:<BR>&gt; &gt; <BR>&gt; &gt; Hi, Luis.<BR>&gt; &gt; <BR>&gt; &gt; Thanks for the clarification.<BR>&gt; &gt; My purpose is to build a signed distance function given a point clouds <BR>&gt; &gt; of a shape boundary. I know there are several options to do this. If the <BR>&gt; &gt; only input are those points, which is the best, fast and easiest way to <BR>&gt; &gt; do this? I know there are several options in ITK.<BR>&gt; &gt; 1. FastMarching. <BR>&gt; &gt; 2. Reinitiaze<BR>&gt; &gt; 3. DistanceMap (Danielsson).<BR>&gt; &gt; <BR>&gt; &gt; Another question would be regarding smart pointer and raw pointer. Is <BR>&gt; &gt; it OK to return a smart pointer from a function?<BR>&gt; &gt; E.g. I have this code:<BR>&gt; &gt; //////////////////////////////////////////////////////////////////////<BR>&gt; &gt; main.cpp<BR>&gt; &gt; typedef itk::Image&lt; unsigned char, 2 &gt; BinaryImageType;<BR>&gt; &gt; typedef itk::Image&lt; float , 2&gt; LSVImageType;<BR>&gt; &gt; LSVImageFilter::Pointer LSVImage = SDF(contour) // where the contour is <BR>&gt; &gt; binary image <BR>&gt; &gt; SDF.cpp<BR>&gt; &gt; LSVImageType::Pointer SDF(BinaryImageType::Pointer contour)<BR>&gt; &gt; {<BR>&gt; &gt; typedef itk::SignedDanielssonDistanceMapImageFilter &lt; <BR>&gt; &gt; BinaryImageFilter, LSVImageFilter &gt; FilterType;<BR>&gt; &gt; FilterType::Pointer filter = FilterType::New(); <BR>&gt; &gt; filter -&gt;SetInput ( contour ); // contour is the binary image <BR>&gt; &gt; return filter-&gt;GetOutput();<BR>&gt; &gt; } <BR>&gt; &gt; <BR>&gt; &gt; <BR>&gt; &gt; //////////////////////////////////////////////////////////////////////<BR>&gt; &gt; <BR>&gt; &gt; <BR>&gt; &gt; Thanks for any input<BR>&gt; &gt; Siqi<BR>&gt; &gt; <BR>&gt; &gt; <BR>&gt; &gt; &gt; Date: Wed, 10 Dec 2008 15:16:08 -0500<BR>&gt; &gt; &gt; From: luis.ibanez@kitware.com<BR>&gt; &gt; &gt; To: pidanchen@hotmail.com<BR>&gt; &gt; &gt; CC: insight-users@itk.org<BR>&gt; &gt; &gt; Subject: Re: [Insight-users] SignedDanielssonDistanceMapImageFilter<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; Hi Chensiqi,<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; You are misinterpreting the behavior of this filter.<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; If you have a binary image, where<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; * The foreground object is set to 1 and<BR>&gt; &gt; &gt; * The background object is set to 0<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; Then the SignedDanielssonDistanceMapImageFilter will compute<BR>&gt; &gt; &gt; the distances to the *transition* region between the 0s and<BR>&gt; &gt; &gt; the 1s.<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; All pixesl in the 0s region will have positive distances to<BR>&gt; &gt; &gt; that boundary, while all pixels in the 1s region will have<BR>&gt; &gt; &gt; negative distances to that boundary.<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; In your case you are feeding an input image where the *boundary*<BR>&gt; &gt; &gt; points are set to 1. Therefore, there is no "inside" to the<BR>&gt; &gt; &gt; object.<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; E.g. if you are feeding into this distance filter an image with<BR>&gt; &gt; &gt; a thin ring, you are not going to find the "inside" of the ring.<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; You should feed this filter with an image containing a filled<BR>&gt; &gt; &gt; circle of radius R. Where all the points at locations r &lt; R will<BR>&gt; &gt; &gt; be set to 1s. Only in that case will the distance map be able to<BR>&gt; &gt; &gt; find the "inside" of the object.<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; Regards,<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; Luis<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; ---------------<BR>&gt; &gt; &gt; chensiqi wrote:<BR>&gt; &gt; &gt; &gt; Hi, Ghassan<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; Thanks for the advice. I flip the input.<BR>&gt; &gt; &gt; &gt; The result now is both inside and outside are positive :(<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; I use float type as the filteroutput instead of "unsigned short" in <BR>&gt; &gt; the<BR>&gt; &gt; &gt; &gt; example. I also tried unsigned short, the result is the same.<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; Here is part of my code.<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; ////////////////////////////////////////////////////////////////////////////////////////////////////<BR>&gt; &gt; &gt; &gt; typedef itk::Image&lt; unsigned char, 2 &gt; BinaryImageType;<BR>&gt; &gt; &gt; &gt; typedef itk::Image&lt; float , 2&gt; LSVImageType;<BR>&gt; &gt; &gt; &gt; typedef itk::SignedDanielssonDistanceMapImageFilter &lt; <BR>&gt; &gt; BinaryImageFilter,<BR>&gt; &gt; &gt; &gt; LSVImageFilter &gt; FilterType;<BR>&gt; &gt; &gt; &gt; FilterType::Pointer filter = FilterType::New();<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; filter -&gt;SetInput ( contour ); // contour is the binary image with<BR>&gt; &gt; &gt; &gt; BinaryImageType, 1 at boundary points, and 0 elsewhere.<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; LSVImageFilter::Pointer LSVImage = filter-&gt;GetDistanceMap();<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; Display (LSVImage) // this is a function that displays the image.<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; //////////////////////////////////////////////////////////////////////////////////////////////////////<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; I notice when I cout&lt;&lt;LSV_image-&gt;GetBufferedRegion().GetSize() , the<BR>&gt; &gt; &gt; &gt; output is [0,0]. I guess there is something wrong in my code that<BR>&gt; &gt; &gt; &gt; causes this weird output size. I can display LSVImage, although both<BR>&gt; &gt; &gt; &gt; inside and outside region are postive.<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; Thanks for any input<BR>&gt; &gt; &gt; &gt; Siqi<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt; CC: insight-users@itk.org<BR>&gt; &gt; &gt; &gt; &gt; From: hamarneh@gmail.com<BR>&gt; &gt; &gt; &gt; &gt; To: pidanchen@hotmail.com<BR>&gt; &gt; &gt; &gt; &gt; Subject: Re: [Insight-users] SignedDanielssonDistanceMapImageFilter<BR>&gt; &gt; &gt; &gt; &gt; Date: Tue, 9 Dec 2008 20:45:19 -0800<BR>&gt; &gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt; Hello Siqi,<BR>&gt; &gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt; You write: "The input is only a binary image with boundary points at<BR>&gt; &gt; &gt; &gt; &gt; 0, and all other points at 1."<BR>&gt; &gt; &gt; &gt; &gt; However, according to he documentation: "As a convention, the <BR>&gt; &gt; distance<BR>&gt; &gt; &gt; &gt; &gt; is evaluated from the boundary of the ON pixels."<BR>&gt; &gt; &gt; &gt; &gt; (from<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; http://www.itk.org/Doxygen/html/classitk_1_1SignedDanielssonDistanceMapImageFilter.html <BR>&gt; &gt; <BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt; )<BR>&gt; &gt; &gt; &gt; &gt; So, your input image should have boundary pixels set to 1 and all<BR>&gt; &gt; &gt; &gt; &gt; other points to 0 (and not the other way around).<BR>&gt; &gt; &gt; &gt; &gt; HTH,<BR>&gt; &gt; &gt; &gt; &gt; /Ghassan<BR>&gt; &gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt; On 9-Dec-08, at 7:24 PM, chensiqi wrote:<BR>&gt; &gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt; &gt; Hi, ITKers<BR>&gt; &gt; &gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt; &gt; I got two ques tions regarding <BR>&gt; &gt; SignedDanielssonDistanceMapImageFilter.<BR>&gt; &gt; &gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt; &gt; 1. The result I have is not "signed", both the inside and outside<BR>&gt; &gt; &gt; &gt; &gt; &gt; distance values are negative. The input is only a binary image with<BR>&gt; &gt; &gt; &gt; &gt; &gt; boundary points at 0, and all other points at 1. I was wondering<BR>&gt; &gt; &gt; &gt; &gt; &gt; how I was wondering how SignedDanielssonDistanceMapImageFilter<BR>&gt; &gt; &gt; &gt; &gt; &gt; determine the region of inside and outside.<BR>&gt; &gt; &gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt; &gt; 2. In Examples of SignedDanielssonDistanceMapImageFilter. cxx, I<BR>&gt; &gt; &gt; &gt; &gt; &gt; notice that the OutputImageType of filter is unsigned short, <BR>&gt; &gt; which I<BR>&gt; &gt; &gt; &gt; &gt; &gt; don't quite understand. The output should contains both negative<BR>&gt; &gt; &gt; &gt; &gt; &gt; and positive distance, why use "unsigned" here?<BR>&gt; &gt; &gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt; &gt; Thanks<BR>&gt; &gt; &gt; &gt; &gt; &gt; Siqi<BR>&gt; &gt; &gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; &gt; &gt; MSN保护盾,十八般武艺保障MSN安全! 现<BR>&gt; &gt; &gt; &gt; &gt; &gt; 在就下载! _______________________________________________<BR>&gt; &gt; &gt; &gt; &gt; &gt; Insight-users mailing list<BR>&gt; &gt; &gt; &gt; &gt; &gt; Insight-users@itk.org<BR>&gt; &gt; &gt; &gt; &gt; &gt; http://www.itk.org/mailman/listinfo/insight-users<BR>&gt; &gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; ------------------------------------------------------------------------<BR>&gt; &gt; &gt; &gt; MSN热搜榜全新升级,更多排行榜等着你! 立即查看! &lt; <BR>&gt; &gt; http://top.msn.com.cn&gt;<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; ------------------------------------------------------------------------<BR>&gt; &gt; &gt; &gt;<BR>&gt; &gt; &gt; &gt; _______________________________________________<BR>&gt; &gt; &gt; &gt; Insight-users mailing list<BR>&gt; &gt; &gt; &gt; Insight-users@itk.org<BR>&gt; &gt; &gt; &gt; http://www.itk.org/mailman/listinfo/insight-users<BR>&gt; &gt; <BR>&gt; &gt; <BR>&gt; &gt; ------------------------------------------------------------------------<BR>&gt; &gt; 使用新一代 Windows Live Messenger 轻松交流和共享! 立刻下载! <BR>&gt; &gt; &lt;http://im.live.cn/&gt;<BR><BR><br /><hr />使用新一代 Windows Live Messenger 轻松交流和共享! <a href='http://im.live.cn/' target='_new'>立刻下载!</a></body>
</html>