<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Sparse Field Active Contours</title>
	<atom:link href="http://www.shawnlankton.com/2009/04/sfm-and-active-contours/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.shawnlankton.com/2009/04/sfm-and-active-contours/</link>
	<description>life, business, consulting, and computer vision</description>
	<lastBuildDate>Tue, 07 Feb 2012 12:43:37 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Anu</title>
		<link>http://www.shawnlankton.com/2009/04/sfm-and-active-contours/comment-page-2/#comment-2015</link>
		<dc:creator>Anu</dc:creator>
		<pubDate>Thu, 02 Feb 2012 03:56:07 +0000</pubDate>
		<guid isPermaLink="false">http://www.shawnlankton.com/?p=390#comment-2015</guid>
		<description>Hai,

Ur code is really helpful. May I know how the 3D SFM works?</description>
		<content:encoded><![CDATA[<p>Hai,</p>
<p>Ur code is really helpful. May I know how the 3D SFM works?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Reda</title>
		<link>http://www.shawnlankton.com/2009/04/sfm-and-active-contours/comment-page-2/#comment-1987</link>
		<dc:creator>Reda</dc:creator>
		<pubDate>Tue, 06 Dec 2011 15:27:08 +0000</pubDate>
		<guid isPermaLink="false">http://www.shawnlankton.com/?p=390#comment-1987</guid>
		<description>Shawn Lankton 

Hi, thank you for sharing this code, it&#039;s works for what I want to do. but it hard for me to understand all of the mathematical equations on your paper &quot;Localized Region Based Active Contours&quot;(code:Chan&amp;Vese code); I wondering if you have any link where can I find the explication or more details?. if you have something, this is my @mail: kasmireda@gmail.com.

thanks and regards   
Reda</description>
		<content:encoded><![CDATA[<p>Shawn Lankton </p>
<p>Hi, thank you for sharing this code, it&#8217;s works for what I want to do. but it hard for me to understand all of the mathematical equations on your paper &#8220;Localized Region Based Active Contours&#8221;(code:Chan&amp;Vese code); I wondering if you have any link where can I find the explication or more details?. if you have something, this is my @mail: <a href="mailto:kasmireda@gmail.com">kasmireda@gmail.com</a>.</p>
<p>thanks and regards<br />
Reda</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Zohar</title>
		<link>http://www.shawnlankton.com/2009/04/sfm-and-active-contours/comment-page-2/#comment-1927</link>
		<dc:creator>Zohar</dc:creator>
		<pubDate>Wed, 28 Sep 2011 21:53:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.shawnlankton.com/?p=390#comment-1927</guid>
		<description>I urge you to please consider my point again. I think that my method is faster: In your method you go over all the items in all the lists, update the values (we update the same way with floating point accuracy), and then move the necessary elements to Sx lists, including new discovered cells. Then you go over the Sx lists, and move the items to their corresponding Lx. I also iterate the *same* amount of items in the lists, when I rediscover them from scratch, and instead of the Sx lists, I deleted the items beforehand. You can argue that allocating new cells for the list would take time, but you can hold an unoccupied cell pointer list, and just move pointers from list to list without any allocation. Again the time you spend to update an element according to its neighbors, would be the same amount of time I spend to rediscover the item from scratch.

Let&#039;s check my claim on an extreme case, where your method should have a better advantage over mine. The new F would be zero for all Lz. I would iterate once over Ln and Lx clearing all cells value. Then I would iterate Lz again, and rediscover all the neighbors. It would mean that if we have N cells in the the active, I would have 2N accesses. You on the hand would have only N access.
Considering the other extreme case that the whole Lz moved, you would need to relocate all your items through Sx. So you&#039;ll spend 3N, while I still spend 2N. Then we should consider the amortized average case, although if you normalize the force as you do, the level set should change quite often.
Well, I admit my examples were a bit sketchy, but I hope that you get the idea, that we access the memory, and move the list points quite in the same amount, and I don&#039;t think it would matter much in terms of performance.

Why my solution is cleaner: The code is shorter and simpler, and it&#039;s really easy to track the changes, and prove that the distance invariant is kept (cell in level i has it value in the allowed distance range), as opposed to the one example I gave you that your invariant can fail (I noticed it also in my experiments).</description>
		<content:encoded><![CDATA[<p>I urge you to please consider my point again. I think that my method is faster: In your method you go over all the items in all the lists, update the values (we update the same way with floating point accuracy), and then move the necessary elements to Sx lists, including new discovered cells. Then you go over the Sx lists, and move the items to their corresponding Lx. I also iterate the *same* amount of items in the lists, when I rediscover them from scratch, and instead of the Sx lists, I deleted the items beforehand. You can argue that allocating new cells for the list would take time, but you can hold an unoccupied cell pointer list, and just move pointers from list to list without any allocation. Again the time you spend to update an element according to its neighbors, would be the same amount of time I spend to rediscover the item from scratch.</p>
<p>Let&#8217;s check my claim on an extreme case, where your method should have a better advantage over mine. The new F would be zero for all Lz. I would iterate once over Ln and Lx clearing all cells value. Then I would iterate Lz again, and rediscover all the neighbors. It would mean that if we have N cells in the the active, I would have 2N accesses. You on the hand would have only N access.<br />
Considering the other extreme case that the whole Lz moved, you would need to relocate all your items through Sx. So you&#8217;ll spend 3N, while I still spend 2N. Then we should consider the amortized average case, although if you normalize the force as you do, the level set should change quite often.<br />
Well, I admit my examples were a bit sketchy, but I hope that you get the idea, that we access the memory, and move the list points quite in the same amount, and I don&#8217;t think it would matter much in terms of performance.</p>
<p>Why my solution is cleaner: The code is shorter and simpler, and it&#8217;s really easy to track the changes, and prove that the distance invariant is kept (cell in level i has it value in the allowed distance range), as opposed to the one example I gave you that your invariant can fail (I noticed it also in my experiments).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shawn Lankton</title>
		<link>http://www.shawnlankton.com/2009/04/sfm-and-active-contours/comment-page-2/#comment-1926</link>
		<dc:creator>Shawn Lankton</dc:creator>
		<pubDate>Wed, 28 Sep 2011 16:45:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.shawnlankton.com/?p=390#comment-1926</guid>
		<description>&lt;a href=&quot;#comment-1925&quot; rel=&quot;nofollow&quot;&gt;@Zohar &lt;/a&gt; 
Thanks for the comments!

The approach you lay out may be faster in some situations (e.g., where there are few voxels in Lz).  In the case where the number of voxels gets large (and only a sub-set of those voxels cross the zero-level-set on each iteration) the method presented here will be MUCH faster.  

In terms of invariant distances, it&#039;s important to ensure floating-point accuracy on the phi function to ensure sub-voxel accuracy of the surface.</description>
		<content:encoded><![CDATA[<p><a href="#comment-1925" rel="nofollow">@Zohar </a><br />
Thanks for the comments!</p>
<p>The approach you lay out may be faster in some situations (e.g., where there are few voxels in Lz).  In the case where the number of voxels gets large (and only a sub-set of those voxels cross the zero-level-set on each iteration) the method presented here will be MUCH faster.  </p>
<p>In terms of invariant distances, it&#8217;s important to ensure floating-point accuracy on the phi function to ensure sub-voxel accuracy of the surface.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Zohar</title>
		<link>http://www.shawnlankton.com/2009/04/sfm-and-active-contours/comment-page-2/#comment-1925</link>
		<dc:creator>Zohar</dc:creator>
		<pubDate>Wed, 28 Sep 2011 15:04:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.shawnlankton.com/?p=390#comment-1925</guid>
		<description>Concerning my remark from September 19th, 2011. There is a basic thing that I don&#039;t understand here, and I&#039;ll appreciate an explanation. 
Why don&#039;t we simply in each iteration calculate F for the zero level set, then reconstruct from scratch all other levels? More specifically:

1. Calculate F for Lz.
2. Go over all the other lists Ln[], Lp[], and delete them, while setting the cells they were pointing to to the highest label (+/-3 in your case).
3. Iterate Lz:
  3.1 Update the cell value according to F.
  3.2 If the value is still in Lz interval, add the neighbors with label &gt; 0 to Lp1 with a value of the Lz cell + 1, and neighbors with label  i
to Lp(i+1). Update the value of all neighbors with label i+1 to Lpi&#039;s value + 1.

It would replace your 2,3 procedures, won&#039;t need the intermediate Sx lists, would be faster, and it would be cleaner, in the sense that it would keep the distance invariant.</description>
		<content:encoded><![CDATA[<p>Concerning my remark from September 19th, 2011. There is a basic thing that I don&#8217;t understand here, and I&#8217;ll appreciate an explanation.<br />
Why don&#8217;t we simply in each iteration calculate F for the zero level set, then reconstruct from scratch all other levels? More specifically:</p>
<p>1. Calculate F for Lz.<br />
2. Go over all the other lists Ln[], Lp[], and delete them, while setting the cells they were pointing to to the highest label (+/-3 in your case).<br />
3. Iterate Lz:<br />
  3.1 Update the cell value according to F.<br />
  3.2 If the value is still in Lz interval, add the neighbors with label &gt; 0 to Lp1 with a value of the Lz cell + 1, and neighbors with label  i<br />
to Lp(i+1). Update the value of all neighbors with label i+1 to Lpi&#8217;s value + 1.</p>
<p>It would replace your 2,3 procedures, won&#8217;t need the intermediate Sx lists, would be faster, and it would be cleaner, in the sense that it would keep the distance invariant.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Zohar</title>
		<link>http://www.shawnlankton.com/2009/04/sfm-and-active-contours/comment-page-2/#comment-1922</link>
		<dc:creator>Zohar</dc:creator>
		<pubDate>Mon, 26 Sep 2011 20:58:07 +0000</pubDate>
		<guid isPermaLink="false">http://www.shawnlankton.com/?p=390#comment-1922</guid>
		<description>Also I was wondering if you noticed any precision degradation due to reinitialization of the level set in each iteration. To quote [Sethian99] &#039;Motion by Intrinsic Laplacian of Curvature&#039;: &quot;The use of reinitialization provides the extra stability required to complete the numerical method, however it comes at a  price. Reinitialization can also be seen as a form of artificial diffusion. The  amount of artificial diffusion added to the problem and the amount of the error introduced in slight movement of the interface varies between reinitialization methods. In any case we use reinitialization as little as possible without compromising the stability of the method&quot;.

Which means according to Sethian that your method should be very stable (you also preserve the CFL condition by normalizing the force, and limiting it to 0.5), but at a price of precision.

Did you try a fourth order flow such as the Laplacian curvature of Willmore flows?</description>
		<content:encoded><![CDATA[<p>Also I was wondering if you noticed any precision degradation due to reinitialization of the level set in each iteration. To quote [Sethian99] &#8216;Motion by Intrinsic Laplacian of Curvature&#8217;: &#8220;The use of reinitialization provides the extra stability required to complete the numerical method, however it comes at a  price. Reinitialization can also be seen as a form of artificial diffusion. The  amount of artificial diffusion added to the problem and the amount of the error introduced in slight movement of the interface varies between reinitialization methods. In any case we use reinitialization as little as possible without compromising the stability of the method&#8221;.</p>
<p>Which means according to Sethian that your method should be very stable (you also preserve the CFL condition by normalizing the force, and limiting it to 0.5), but at a price of precision.</p>
<p>Did you try a fourth order flow such as the Laplacian curvature of Willmore flows?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Zohar</title>
		<link>http://www.shawnlankton.com/2009/04/sfm-and-active-contours/comment-page-2/#comment-1918</link>
		<dc:creator>Zohar</dc:creator>
		<pubDate>Mon, 19 Sep 2011 13:11:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.shawnlankton.com/?p=390#comment-1918</guid>
		<description>Thanks for replying.

So it probably my mistake, since I&#039;m not sure what is the invariant the algorithm keeps in each level. For example I assumed the algorithm tries to preserve for each level its data range. For example Lp2 should always have values between (1.5,2.5]. But according to line 7 at procedure 2, p would still have a Lp1 value and it would be transferred to Lp2. I find it hard to follow all the cases, and see if this is crucial or not, but currently I admit that the algorithm behaves well, and my previous impression was due to a bug in my implementation. Maybe the worst that could happen are orphan cells (as implied by [Whitaker98], or wrong approximation of the distance function at higher levels. I would appreciate your opinion on the matter.

Thanks,
Zohar</description>
		<content:encoded><![CDATA[<p>Thanks for replying.</p>
<p>So it probably my mistake, since I&#8217;m not sure what is the invariant the algorithm keeps in each level. For example I assumed the algorithm tries to preserve for each level its data range. For example Lp2 should always have values between (1.5,2.5]. But according to line 7 at procedure 2, p would still have a Lp1 value and it would be transferred to Lp2. I find it hard to follow all the cases, and see if this is crucial or not, but currently I admit that the algorithm behaves well, and my previous impression was due to a bug in my implementation. Maybe the worst that could happen are orphan cells (as implied by [Whitaker98], or wrong approximation of the distance function at higher levels. I would appreciate your opinion on the matter.</p>
<p>Thanks,<br />
Zohar</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shawn Lankton</title>
		<link>http://www.shawnlankton.com/2009/04/sfm-and-active-contours/comment-page-2/#comment-1916</link>
		<dc:creator>Shawn Lankton</dc:creator>
		<pubDate>Fri, 16 Sep 2011 23:34:22 +0000</pubDate>
		<guid isPermaLink="false">http://www.shawnlankton.com/?p=390#comment-1916</guid>
		<description>&lt;a href=&quot;#comment-1914&quot; rel=&quot;nofollow&quot;&gt;@Zohar &lt;/a&gt; The algorithm is up-to-date as far as I know... Not sure what you observed, but I had good results.  When using non-uniform pixel spacing, you need to pass those as arguments to the functions.</description>
		<content:encoded><![CDATA[<p><a href="#comment-1914" rel="nofollow">@Zohar </a> The algorithm is up-to-date as far as I know&#8230; Not sure what you observed, but I had good results.  When using non-uniform pixel spacing, you need to pass those as arguments to the functions.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Zohar</title>
		<link>http://www.shawnlankton.com/2009/04/sfm-and-active-contours/comment-page-2/#comment-1914</link>
		<dc:creator>Zohar</dc:creator>
		<pubDate>Fri, 16 Sep 2011 01:57:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.shawnlankton.com/?p=390#comment-1914</guid>
		<description>Is the algorithm in your technical report up to date?
Since I don&#039;t think that it preserves the distance invariant, which leads to inconsistencies in the distance function, duplicates in the lists, and ends in a mess.</description>
		<content:encoded><![CDATA[<p>Is the algorithm in your technical report up to date?<br />
Since I don&#8217;t think that it preserves the distance invariant, which leads to inconsistencies in the distance function, duplicates in the lists, and ends in a mess.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: amit</title>
		<link>http://www.shawnlankton.com/2009/04/sfm-and-active-contours/comment-page-2/#comment-1834</link>
		<dc:creator>amit</dc:creator>
		<pubDate>Tue, 21 Jun 2011 10:02:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.shawnlankton.com/?p=390#comment-1834</guid>
		<description>i have error in sfm_local_chanvese_mex.cpp file.
Error is as follow:
error C2660: &#039;en_chanvese_compute&#039; : function does not take 6 arguments 
Please suggest solution.</description>
		<content:encoded><![CDATA[<p>i have error in sfm_local_chanvese_mex.cpp file.<br />
Error is as follow:<br />
error C2660: &#8216;en_chanvese_compute&#8217; : function does not take 6 arguments<br />
Please suggest solution.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

