<?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: Classification of operations</title>
	<atom:link href="http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/</link>
	<description>Steve Eddins manages the Image &#38; Geospatial development team at The MathWorks and coauthored Digital Image Processing Using MATLAB. He writes here about image processing concepts, algorithm implementations, and MATLAB.</description>
	<lastBuildDate>Wed, 01 Feb 2012 13:58:45 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Steve</title>
		<link>http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-16170</link>
		<dc:creator>Steve</dc:creator>
		<pubDate>Fri, 07 Dec 2007 13:19:38 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-16170</guid>
		<description>Chris&#8212;Makes sense to me.  Thanks for your comment.</description>
		<content:encoded><![CDATA[<p>Chris&mdash;Makes sense to me.  Thanks for your comment.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Cris Luengo</title>
		<link>http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-16149</link>
		<dc:creator>Cris Luengo</dc:creator>
		<pubDate>Fri, 07 Dec 2007 02:12:30 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-16149</guid>
		<description>Steve, Tim, I do think &#039;recursive&#039; is the right name for this type of algorithm. You apply an operation to one pixel, then in turn to each of its neighbors, then to their neighbors, etc. Classic recursion. &quot;Search&quot; is not a good term because you&#039;re not necessarily searching for anything. &quot;Traversal&quot; is not a good term either, because you can only build the tree as you are applying the operations to the nodes. You don&#039;t always know a priori the order in which you will process the pixels. And sometimes you can visit nodes more than once. For example, when computing a geodesic distance you&#039;d use a recursive algorithm (implemented with a queue, of course!) that will probably visit some pixels a few times, updating the distance.

Urs, I don&#039;t really understand your suggestion for &#039;batch processing&#039;. I associate that term with applying the same operation to each item in a set, without the neighborhood relationship and ordering implied by the recursive operations.

That said, Steve&#039;s &#039;queue processes&#039; must be a subdivision of &#039;neighborhood processes&#039;. So now we have:
&lt;ul&gt;
&lt;li&gt;transforms&lt;/li&gt;
&lt;li&gt;point operations&lt;/li&gt;
&lt;li&gt;neighborhood operations&lt;br /&gt;
&#160;&#160;&#160; - recursive operations&lt;br /&gt;
&#160;&#160;&#160; - spatial filters&lt;/li&gt;
&lt;/ul&gt;

Am I missing something?</description>
		<content:encoded><![CDATA[<p>Steve, Tim, I do think &#8216;recursive&#8217; is the right name for this type of algorithm. You apply an operation to one pixel, then in turn to each of its neighbors, then to their neighbors, etc. Classic recursion. &#8220;Search&#8221; is not a good term because you&#8217;re not necessarily searching for anything. &#8220;Traversal&#8221; is not a good term either, because you can only build the tree as you are applying the operations to the nodes. You don&#8217;t always know a priori the order in which you will process the pixels. And sometimes you can visit nodes more than once. For example, when computing a geodesic distance you&#8217;d use a recursive algorithm (implemented with a queue, of course!) that will probably visit some pixels a few times, updating the distance.</p>
<p>Urs, I don&#8217;t really understand your suggestion for &#8216;batch processing&#8217;. I associate that term with applying the same operation to each item in a set, without the neighborhood relationship and ordering implied by the recursive operations.</p>
<p>That said, Steve&#8217;s &#8216;queue processes&#8217; must be a subdivision of &#8216;neighborhood processes&#8217;. So now we have:</p>
<ul>
<li>transforms</li>
<li>point operations</li>
<li>neighborhood operations<br />
&nbsp;&nbsp;&nbsp; &#8211; recursive operations<br />
&nbsp;&nbsp;&nbsp; &#8211; spatial filters</li>
</ul>
<p>Am I missing something?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve</title>
		<link>http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15652</link>
		<dc:creator>Steve</dc:creator>
		<pubDate>Tue, 27 Nov 2007 21:19:02 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15652</guid>
		<description>Tim&#8212;I think static pixel relationships is the more typical case.</description>
		<content:encoded><![CDATA[<p>Tim&mdash;I think static pixel relationships is the more typical case.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tim Davis</title>
		<link>http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15542</link>
		<dc:creator>Tim Davis</dc:creator>
		<pubDate>Mon, 26 Nov 2007 03:25:46 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15542</guid>
		<description>Thanks, Steve ... as always you&#039;re a great source for Helpful Updates to MATLAB Operational User Resources (read that one as an acronym) ... :-)

On a more serious note ... if the pixel relationship is static (well-defined when the &quot;search&quot; or &quot;traversal&quot; starts), then &quot;traversal&quot; of the image/graph is a good term.

If the pixel relationship changes &quot;with time&quot; or &quot;during the traversal&quot;, then &quot;traversal&quot; doesn&#039;t really fit (nor does &quot;search&quot;), since &quot;breadth-first traversal&quot; doesn&#039;t envisage the graph changing as you look at it.  Neither does &quot;connected components&quot; since things are changing and thus the components are not &quot;fixed&quot;.

Which one is more typical?</description>
		<content:encoded><![CDATA[<p>Thanks, Steve &#8230; as always you&#8217;re a great source for Helpful Updates to MATLAB Operational User Resources (read that one as an acronym) &#8230; :-)</p>
<p>On a more serious note &#8230; if the pixel relationship is static (well-defined when the &#8220;search&#8221; or &#8220;traversal&#8221; starts), then &#8220;traversal&#8221; of the image/graph is a good term.</p>
<p>If the pixel relationship changes &#8220;with time&#8221; or &#8220;during the traversal&#8221;, then &#8220;traversal&#8221; doesn&#8217;t really fit (nor does &#8220;search&#8221;), since &#8220;breadth-first traversal&#8221; doesn&#8217;t envisage the graph changing as you look at it.  Neither does &#8220;connected components&#8221; since things are changing and thus the components are not &#8220;fixed&#8221;.</p>
<p>Which one is more typical?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve</title>
		<link>http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15502</link>
		<dc:creator>Steve</dc:creator>
		<pubDate>Sun, 25 Nov 2007 03:18:20 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15502</guid>
		<description>Urs&#8212;I did not reply to you because I thought your thoughtful remarks stood just fine on their own and did not need a reply.  I had nothing to add to them, and you did not ask a question that seemed to require a response.</description>
		<content:encoded><![CDATA[<p>Urs&mdash;I did not reply to you because I thought your thoughtful remarks stood just fine on their own and did not need a reply.  I had nothing to add to them, and you did not ask a question that seemed to require a response.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Urs (us) Schwarz</title>
		<link>http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15499</link>
		<dc:creator>Urs (us) Schwarz</dc:creator>
		<pubDate>Sun, 25 Nov 2007 00:26:31 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15499</guid>
		<description>it seems quite obvious now that my remarks were never worth a reply... i&#039;m sorry for having bothered you all</description>
		<content:encoded><![CDATA[<p>it seems quite obvious now that my remarks were never worth a reply&#8230; i&#8217;m sorry for having bothered you all</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve</title>
		<link>http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15467</link>
		<dc:creator>Steve</dc:creator>
		<pubDate>Sat, 24 Nov 2007 14:37:50 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15467</guid>
		<description>Tim&#8212;I agree and disagree.  :-)  I didn&#039;t really like &quot;queue-based&quot; either.  That&#039;s why I posed the question.  Neither &quot;queue&quot; nor &quot;bread-first search&quot; adequately captures the common implementation patterns I have seen.  Connected components is both too general and not applicable (in some cases).  I&#039;m not trying to make up new terms; I&#039;m just looking for one that applies well.  I do like &quot;traversal.&quot;  It works better than &quot;search.&quot;</description>
		<content:encoded><![CDATA[<p>Tim&mdash;I agree and disagree.  :-)  I didn&#8217;t really like &#8220;queue-based&#8221; either.  That&#8217;s why I posed the question.  Neither &#8220;queue&#8221; nor &#8220;bread-first search&#8221; adequately captures the common implementation patterns I have seen.  Connected components is both too general and not applicable (in some cases).  I&#8217;m not trying to make up new terms; I&#8217;m just looking for one that applies well.  I do like &#8220;traversal.&#8221;  It works better than &#8220;search.&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tim Davis</title>
		<link>http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15416</link>
		<dc:creator>Tim Davis</dc:creator>
		<pubDate>Fri, 23 Nov 2007 13:21:45 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15416</guid>
		<description>There is alternative term.  The breadth/depth first traversal/search terms (all 4 of them) are refering to how to traverse the nodes of the graph (or pixels of your image, where each pixel is a node and there is an edge between two pixels i and j if they satisfy some condition).

What you are really talking about are methods that operate on connected components of a graph (or image).  The term &quot;connected components&quot; is a structural term, not refering to exactly how you find them, what you do with them and so on.  So it&#039;s not tied to a particular algorithm, but instead to what you want to do with your image (or graph).

Both kinds (and others...) of traversals/searches can be used to find connected components.  They just differ in the order that they explore the nodes (pixels) of the graph (image).

So you could refer to algorithms, methods, transforms, or whatever that operate on the connected components of an image (or graph) as a &quot;connected component method&quot;.

That term is also a helpful reminder that if you can precompute the graph the expresses the relationship between pixels (rather than constructing it on the fly when looking at 2 pixels), then you can just use dmperm.

So you could call this a &quot;dmperm-based method&quot; or more generically a &quot;connected component method&quot;.

&quot;connected components&quot; is also a well-established term.  It&#039;s much better to use a well-established term (if it applies) than invent a new one.</description>
		<content:encoded><![CDATA[<p>There is alternative term.  The breadth/depth first traversal/search terms (all 4 of them) are refering to how to traverse the nodes of the graph (or pixels of your image, where each pixel is a node and there is an edge between two pixels i and j if they satisfy some condition).</p>
<p>What you are really talking about are methods that operate on connected components of a graph (or image).  The term &#8220;connected components&#8221; is a structural term, not refering to exactly how you find them, what you do with them and so on.  So it&#8217;s not tied to a particular algorithm, but instead to what you want to do with your image (or graph).</p>
<p>Both kinds (and others&#8230;) of traversals/searches can be used to find connected components.  They just differ in the order that they explore the nodes (pixels) of the graph (image).</p>
<p>So you could refer to algorithms, methods, transforms, or whatever that operate on the connected components of an image (or graph) as a &#8220;connected component method&#8221;.</p>
<p>That term is also a helpful reminder that if you can precompute the graph the expresses the relationship between pixels (rather than constructing it on the fly when looking at 2 pixels), then you can just use dmperm.</p>
<p>So you could call this a &#8220;dmperm-based method&#8221; or more generically a &#8220;connected component method&#8221;.</p>
<p>&#8220;connected components&#8221; is also a well-established term.  It&#8217;s much better to use a well-established term (if it applies) than invent a new one.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tim Davis</title>
		<link>http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15415</link>
		<dc:creator>Tim Davis</dc:creator>
		<pubDate>Fri, 23 Nov 2007 13:07:34 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15415</guid>
		<description>The best term is  &quot;breadth-first traversal&quot; or &quot;breadth-first search&quot;.  The terms are basically equivalent as far as fundamental algorithms are concerned, but the latter is more specific to a &quot;search&quot;.  The former is more generic, and applies to this problem.

See http://en.wikipedia.org/wiki/Breadth-first_search

See also: Tarjan, R. E. &quot;Depth-First Search and Linear Graph Algorithms.&quot; SIAM J. Comput. 1, 146-160, 1972.

You could also say &quot;depth-first traversal&quot; (or &quot;depth-first search&quot;) if you just replace the word &quot;queue&quot; with &quot;stack&quot;, and the word &quot;get&quot; with &quot;pop&quot; in your algorithm.

I would stick with an established term like these four (breadth/depth-first traversal/search).  They&#039;ve been in use a long time (early 70&#039;s at least).  No need to make up a new term; it would just confuse people.

&quot;Queue process&quot; doesn&#039;t extend to the depth-first traversal.  It&#039;s a little too generic of a term, as well, since queues can be used for all sorts of things, not just breadth-first traversals.

The term &quot;iterative process&quot; is either far too generic (is it any algorithm with a for loop?) or too specific (is it conjugate gradients for solving Ax=b?).

&quot;recursive process&quot; is also problematic; this is not a recursive algorithm (although it can be written as such).

I prefer &quot;traversal&quot; instead of &quot;search&quot; but the latter is more commonly used.  And I see from Steve&#039;s comments #13 and  #15 that he&#039;d probably prefer &quot;traversal&quot; to &quot;search&quot; too.</description>
		<content:encoded><![CDATA[<p>The best term is  &#8220;breadth-first traversal&#8221; or &#8220;breadth-first search&#8221;.  The terms are basically equivalent as far as fundamental algorithms are concerned, but the latter is more specific to a &#8220;search&#8221;.  The former is more generic, and applies to this problem.</p>
<p>See <a href="http://en.wikipedia.org/wiki/Breadth-first_search" rel="nofollow">http://en.wikipedia.org/wiki/Breadth-first_search</a></p>
<p>See also: Tarjan, R. E. &#8220;Depth-First Search and Linear Graph Algorithms.&#8221; SIAM J. Comput. 1, 146-160, 1972.</p>
<p>You could also say &#8220;depth-first traversal&#8221; (or &#8220;depth-first search&#8221;) if you just replace the word &#8220;queue&#8221; with &#8220;stack&#8221;, and the word &#8220;get&#8221; with &#8220;pop&#8221; in your algorithm.</p>
<p>I would stick with an established term like these four (breadth/depth-first traversal/search).  They&#8217;ve been in use a long time (early 70&#8242;s at least).  No need to make up a new term; it would just confuse people.</p>
<p>&#8220;Queue process&#8221; doesn&#8217;t extend to the depth-first traversal.  It&#8217;s a little too generic of a term, as well, since queues can be used for all sorts of things, not just breadth-first traversals.</p>
<p>The term &#8220;iterative process&#8221; is either far too generic (is it any algorithm with a for loop?) or too specific (is it conjugate gradients for solving Ax=b?).</p>
<p>&#8220;recursive process&#8221; is also problematic; this is not a recursive algorithm (although it can be written as such).</p>
<p>I prefer &#8220;traversal&#8221; instead of &#8220;search&#8221; but the latter is more commonly used.  And I see from Steve&#8217;s comments #13 and  #15 that he&#8217;d probably prefer &#8220;traversal&#8221; to &#8220;search&#8221; too.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve</title>
		<link>http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15317</link>
		<dc:creator>Steve</dc:creator>
		<pubDate>Wed, 21 Nov 2007 17:35:40 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/steve/2007/11/19/classification-of-operations/#comment-15317</guid>
		<description>Dan&#8212;I believe I understand your point.  But some algorithms, including flood-filling, can be performed using either a depth-first or a breadth-first process.</description>
		<content:encoded><![CDATA[<p>Dan&mdash;I believe I understand your point.  But some algorithms, including flood-filling, can be performed using either a depth-first or a breadth-first process.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

