<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.1" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: Seam Carving</title>
	<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/</link>
	<description>Strain your Brain</description>
	<pubDate>Sun, 23 Nov 2008 12:42:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.1</generator>

	<item>
		<title>By: Luca Mondini - &#187; Seam carving: ridimensionamento intelligente delle immagini</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-87</link>
		<author>Luca Mondini - &#187; Seam carving: ridimensionamento intelligente delle immagini</author>
		<pubDate>Tue, 28 Aug 2007 08:52:52 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-87</guid>
					<description>[...] post esplicativo [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] post esplicativo [&#8230;]</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Matan</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-88</link>
		<author>Matan</author>
		<pubDate>Wed, 29 Aug 2007 20:11:34 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-88</guid>
					<description>Ultra cool!</description>
		<content:encoded><![CDATA[<p>Ultra cool!</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Seam Carving e Gimp: questo matrimonio s&#8217;ha da fare! &#171; Daniele</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-89</link>
		<author>Seam Carving e Gimp: questo matrimonio s&#8217;ha da fare! &#171; Daniele</author>
		<pubDate>Thu, 30 Aug 2007 12:20:54 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-89</guid>
					<description>[...] leviathanonline [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] leviathanonline [&#8230;]</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Daniele</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-95</link>
		<author>Daniele</author>
		<pubDate>Thu, 30 Aug 2007 21:24:44 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-95</guid>
					<description>Your implementation could be usefull and well accepted by the Gimp project - www.gimp.org. Actually there is an active discussion on Developer mailing list.</description>
		<content:encoded><![CDATA[<p>Your implementation could be usefull and well accepted by the Gimp project - <a href="http://www.gimp.org." rel="nofollow">www.gimp.org.</a> Actually there is an active discussion on Developer mailing list.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Dan</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-98</link>
		<author>Dan</author>
		<pubDate>Fri, 31 Aug 2007 23:33:54 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-98</guid>
					<description>This technique really is very cool.

About scaling, you said that "The method does not take into account the contents of the image at all", which also appears to be the opinion of Avidan and Shamir. Now, I agree that scaling usually looks horrible when it's disproportionate, but I think that it takes the content into account quite well - better than seam carving, even; it simply is almost lossless. Shrinking the image by a coefficient of two, say, retains pretty much all content. I am not sure what the formulas for non-integer proportions are, but in my experience proportionate scaling usually results in pictures that look pretty much the same. The only real loss is the resolution of the details, but all of the features remain, whereas in seam carving there's no resolution loss, but some features (granted, the least significant ones) completely disappear. I think losing resolution is preferable in most cases.

For example, consider the resized image of the two pagodas. While the scaled image isn't good looking (as it is disproportionate), I don't find the seam-carved image quite satisfactory. One of the lost details is that the pagodas are not, in fact, that close to each other, and I think that results in quite different content in the carved image.

Now, say that you need to shrink a 600*400 picture into a 200*200 one. Simply scaling results in a terribly deformed picture. If you seam-carve, you carve away 400 vertical lines and 200 horizontal lines, which are two thirds of the width and one half of the height; that's probably a lot of lost content. Now, if you proportionally scale the image to 300*200 and then carve it down to 200*200 (or perhaps carve it down to 400*400 and then scale, the difference is probably not that great but the former might be faster), you only need to carve away a third of the vertical lines, which is quite an improvement.

I rather like this method of scale and carve. An important question would be when to stop scaling and start carving. Say that you have to resize the picture so that the new width is A*width and the new height is B*height. One of the options, used in the previous paragraph, is to scale it by the maximum of A and B, and then carve out what remains. This is perhaps an improvement to just carving, but it won't improve the situation in cases such as the two pagodas, where one dimension stays fixed. It could also be potentially self defeating in cases where you need to increase one dimension.

Another method would be to scale it by the minimum of A and B, and then carve-in the remainder. I like this version better, because carving in is detail-lossless. However, you do lose even more resolution, you end up with the least significant details extended, and adding seams is a harder technique which also doesn't always look well.

Finally, any other value between A and B can be used, and then you need to carve both in and out. My preferred value is the geometric mean of A and B; it seems the most natural choice to me... Although by two definition of optimization I used, the optimal choices were the maximum and the arithmetic mean - obviously, the definitions just weren't good enough (:. I don't think the maximum is optimal, but the arithmetic mean might be.

If you feel like implementing this, as it's probably not hard to add this to the existing seam-carving implementation, I'd really like to see how some of these values deal with the picture of the two pagodas. And sorry for the length of this thing, it's likely that this post could be improved with some heavy seam-carving.</description>
		<content:encoded><![CDATA[<p>This technique really is very cool.</p>
<p>About scaling, you said that &#8220;The method does not take into account the contents of the image at all&#8221;, which also appears to be the opinion of Avidan and Shamir. Now, I agree that scaling usually looks horrible when it&#8217;s disproportionate, but I think that it takes the content into account quite well - better than seam carving, even; it simply is almost lossless. Shrinking the image by a coefficient of two, say, retains pretty much all content. I am not sure what the formulas for non-integer proportions are, but in my experience proportionate scaling usually results in pictures that look pretty much the same. The only real loss is the resolution of the details, but all of the features remain, whereas in seam carving there&#8217;s no resolution loss, but some features (granted, the least significant ones) completely disappear. I think losing resolution is preferable in most cases.</p>
<p>For example, consider the resized image of the two pagodas. While the scaled image isn&#8217;t good looking (as it is disproportionate), I don&#8217;t find the seam-carved image quite satisfactory. One of the lost details is that the pagodas are not, in fact, that close to each other, and I think that results in quite different content in the carved image.</p>
<p>Now, say that you need to shrink a 600*400 picture into a 200*200 one. Simply scaling results in a terribly deformed picture. If you seam-carve, you carve away 400 vertical lines and 200 horizontal lines, which are two thirds of the width and one half of the height; that&#8217;s probably a lot of lost content. Now, if you proportionally scale the image to 300*200 and then carve it down to 200*200 (or perhaps carve it down to 400*400 and then scale, the difference is probably not that great but the former might be faster), you only need to carve away a third of the vertical lines, which is quite an improvement.</p>
<p>I rather like this method of scale and carve. An important question would be when to stop scaling and start carving. Say that you have to resize the picture so that the new width is A*width and the new height is B*height. One of the options, used in the previous paragraph, is to scale it by the maximum of A and B, and then carve out what remains. This is perhaps an improvement to just carving, but it won&#8217;t improve the situation in cases such as the two pagodas, where one dimension stays fixed. It could also be potentially self defeating in cases where you need to increase one dimension.</p>
<p>Another method would be to scale it by the minimum of A and B, and then carve-in the remainder. I like this version better, because carving in is detail-lossless. However, you do lose even more resolution, you end up with the least significant details extended, and adding seams is a harder technique which also doesn&#8217;t always look well.</p>
<p>Finally, any other value between A and B can be used, and then you need to carve both in and out. My preferred value is the geometric mean of A and B; it seems the most natural choice to me&#8230; Although by two definition of optimization I used, the optimal choices were the maximum and the arithmetic mean - obviously, the definitions just weren&#8217;t good enough (:. I don&#8217;t think the maximum is optimal, but the arithmetic mean might be.</p>
<p>If you feel like implementing this, as it&#8217;s probably not hard to add this to the existing seam-carving implementation, I&#8217;d really like to see how some of these values deal with the picture of the two pagodas. And sorry for the length of this thing, it&#8217;s likely that this post could be improved with some heavy seam-carving.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Ramin</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-99</link>
		<author>Ramin</author>
		<pubDate>Sat, 01 Sep 2007 01:31:07 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-99</guid>
					<description>Great description !

Maybe you want to take a look at http://www.thegedanken.com/retarget/ where you can download a prototype for Windows to play around a bit, still work to do ...

regards
   Ramin</description>
		<content:encoded><![CDATA[<p>Great description !</p>
<p>Maybe you want to take a look at <a href="http://www.thegedanken.com/retarget/" rel="nofollow">http://www.thegedanken.com/retarget/</a> where you can download a prototype for Windows to play around a bit, still work to do &#8230;</p>
<p>regards<br />
   Ramin</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: yaniv</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-100</link>
		<author>yaniv</author>
		<pubDate>Sat, 01 Sep 2007 10:38:24 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-100</guid>
					<description>Dan,

Of course scaling does take into account the contents of the image (different input images usually generate different output images :-) ). What I meant is percisely that "unimportant" parts of the image get to occupy as much space in the output image as the important parts.

Now, obviously all the forms of image shrinking loose information (there are num_colors^(original_width*original_height) input images and num_colors^(output_width*output_height) output images). So clearly, assuming the output size is small than the input size, several different input images get mapped to the same output image, thereby information is lost.

Choosing what information to loose is a more of a philosophical question than a mathematical one. In some contexts, realizing that the two pagodas are not very close to each other is important, in others realizing the exact proportions of the base of the pagoda to its height are more important.

I agree that scaling is less "lossy" in the sense that given a scaled down image and the original dimensions of it, the scaling process can be reversed quite efficiently (i.e. a source image very similar to the original input image can be found easily). Seam carving, on the other hand, is much harder to reverse.

I do think that seam carving is extremely useful not only as an image resizing mechanism, but as an image processing tool. A tool that removes the insignificant parts of the image retaining only its essential bits (e.g. instead of using it as a function from one image to another we can use it as a function from one image to a set of images containing the important parts, etc.).

Your idea of mixing scaling and carving sounds really good! It actually fits an other idea I had on improving image quality (but it is too long to describe in a comment...). A very interesting thing about seam carving is that by comparing the energy of the seam to remove vs. the total energy of the image we can get a very good idea of whether the seam is indeed irrelevant or whether we already reached a limit after which removing seams will delete important parts of the image.

I.e. if we detect that the next seam to remove has a lot of energy vs. the whole image, then we might want to stop carving and start scaling.

Implementing your ideas is a matter of minutes and I will sure do so (and let you know of the results ;-) ) after I get back to Israel!

PS - Tonight I am flying to Prague to present an algorithm I developed in a conference. Be back in 2 weeks, and I will tell you more about it then.</description>
		<content:encoded><![CDATA[<p>Dan,</p>
<p>Of course scaling does take into account the contents of the image (different input images usually generate different output images <img src='http://leviathanonline.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ). What I meant is percisely that &#8220;unimportant&#8221; parts of the image get to occupy as much space in the output image as the important parts.</p>
<p>Now, obviously all the forms of image shrinking loose information (there are num_colors^(original_width*original_height) input images and num_colors^(output_width*output_height) output images). So clearly, assuming the output size is small than the input size, several different input images get mapped to the same output image, thereby information is lost.</p>
<p>Choosing what information to loose is a more of a philosophical question than a mathematical one. In some contexts, realizing that the two pagodas are not very close to each other is important, in others realizing the exact proportions of the base of the pagoda to its height are more important.</p>
<p>I agree that scaling is less &#8220;lossy&#8221; in the sense that given a scaled down image and the original dimensions of it, the scaling process can be reversed quite efficiently (i.e. a source image very similar to the original input image can be found easily). Seam carving, on the other hand, is much harder to reverse.</p>
<p>I do think that seam carving is extremely useful not only as an image resizing mechanism, but as an image processing tool. A tool that removes the insignificant parts of the image retaining only its essential bits (e.g. instead of using it as a function from one image to another we can use it as a function from one image to a set of images containing the important parts, etc.).</p>
<p>Your idea of mixing scaling and carving sounds really good! It actually fits an other idea I had on improving image quality (but it is too long to describe in a comment&#8230;). A very interesting thing about seam carving is that by comparing the energy of the seam to remove vs. the total energy of the image we can get a very good idea of whether the seam is indeed irrelevant or whether we already reached a limit after which removing seams will delete important parts of the image.</p>
<p>I.e. if we detect that the next seam to remove has a lot of energy vs. the whole image, then we might want to stop carving and start scaling.</p>
<p>Implementing your ideas is a matter of minutes and I will sure do so (and let you know of the results <img src='http://leviathanonline.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ) after I get back to Israel!</p>
<p>PS - Tonight I am flying to Prague to present an algorithm I developed in a conference. Be back in 2 weeks, and I will tell you more about it then.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Dan</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-101</link>
		<author>Dan</author>
		<pubDate>Sat, 01 Sep 2007 23:44:23 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-101</guid>
					<description>Good luck, and have fun at Prague!</description>
		<content:encoded><![CDATA[<p>Good luck, and have fun at Prague!</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: PiFou</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-104</link>
		<author>PiFou</author>
		<pubDate>Tue, 04 Sep 2007 06:03:24 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-104</guid>
					<description>Hi,

I have made an open source java program of this algorithm. It can be found here : http://pierrefrancois.leon.free.fr/smart-resizing/.
(but with a little difference : i recalculate the energy function at each sean removal)</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>I have made an open source java program of this algorithm. It can be found here : <a href="http://pierrefrancois.leon.free.fr/smart-resizing/." rel="nofollow">http://pierrefrancois.leon.free.fr/smart-resizing/.</a><br />
(but with a little difference : i recalculate the energy function at each sean removal)</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: yaniv</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-107</link>
		<author>yaniv</author>
		<pubDate>Thu, 06 Sep 2007 08:54:37 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-107</guid>
					<description>Hi Pierre,

My implementation also recalculates the energy at each seam removal (I think the algorithm will perform much worse if this wasn't done). This can actually be done much more efficiently than recomputing the Gradient Magnitude of the entire image again (as most of it remains the same).

Another thing that can be done, which I haven't implemented yet, is instead of simply removing a seam, somehow averaging it with its surrounding seams. And of course there are all the suggestions of combining carving and scaling.

I will look your implementation when I'll get back from Prague (in about a week and a half).

Merci pour la remarque!</description>
		<content:encoded><![CDATA[<p>Hi Pierre,</p>
<p>My implementation also recalculates the energy at each seam removal (I think the algorithm will perform much worse if this wasn&#8217;t done). This can actually be done much more efficiently than recomputing the Gradient Magnitude of the entire image again (as most of it remains the same).</p>
<p>Another thing that can be done, which I haven&#8217;t implemented yet, is instead of simply removing a seam, somehow averaging it with its surrounding seams. And of course there are all the suggestions of combining carving and scaling.</p>
<p>I will look your implementation when I&#8217;ll get back from Prague (in about a week and a half).</p>
<p>Merci pour la remarque!</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: greger</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-111</link>
		<author>greger</author>
		<pubDate>Wed, 19 Sep 2007 05:06:36 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-111</guid>
					<description>Hi, 

I just got done making a version in C++, and tested it on a bunch of people on a beach. I was frustrated that the algorithm started removing seams containing people long before it had run out of empty beach. I realized that this was because the beach had many horizontal layers and therefore lots of energy i the y-direction. So I tried again removing vertical seams, but this time I used the magnitude of the x-component as energy function, which turned out great, removing all the background beach before attacking the foreground people. 

I haven't really tested if this holds for many other pictures, but it seems to me that giving more weight to the x-gradient when calculating vertical seams, and conversly, more weight to y-gradient when removing horizontal seams, could be a good strategy. Any views?</description>
		<content:encoded><![CDATA[<p>Hi, </p>
<p>I just got done making a version in C++, and tested it on a bunch of people on a beach. I was frustrated that the algorithm started removing seams containing people long before it had run out of empty beach. I realized that this was because the beach had many horizontal layers and therefore lots of energy i the y-direction. So I tried again removing vertical seams, but this time I used the magnitude of the x-component as energy function, which turned out great, removing all the background beach before attacking the foreground people. </p>
<p>I haven&#8217;t really tested if this holds for many other pictures, but it seems to me that giving more weight to the x-gradient when calculating vertical seams, and conversly, more weight to y-gradient when removing horizontal seams, could be a good strategy. Any views?</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Peter</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-112</link>
		<author>Peter</author>
		<pubDate>Wed, 19 Sep 2007 08:51:31 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-112</guid>
					<description>Hi, if anyone is interested, I, too, have implemented parts of the algorithm in C++. You can download the software from my site at http://www.peterw.000webhost.com/resizor/ . You can also do conventional scaling with it.

I, too, recalculate the energy map at each iteration (in fact I "heal" it since only two parallel seams in the energy map are affected by the removal, unless you approximate the derivative with a radius higher than 1, which does not seem to be necessary at all). The seam cost map, however, has to be entirely recomputed.</description>
		<content:encoded><![CDATA[<p>Hi, if anyone is interested, I, too, have implemented parts of the algorithm in C++. You can download the software from my site at <a href="http://www.peterw.000webhost.com/resizor/" rel="nofollow">http://www.peterw.000webhost.com/resizor/</a> . You can also do conventional scaling with it.</p>
<p>I, too, recalculate the energy map at each iteration (in fact I &#8220;heal&#8221; it since only two parallel seams in the energy map are affected by the removal, unless you approximate the derivative with a radius higher than 1, which does not seem to be necessary at all). The seam cost map, however, has to be entirely recomputed.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: yaniv</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-113</link>
		<author>yaniv</author>
		<pubDate>Wed, 19 Sep 2007 11:29:36 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-113</guid>
					<description>Greger,

Interesting idea. I will give it some thought and get back to you with my conclusions (although it will probably take me a couple of weeks as I am really busy now).

Peter,

You are absolutely right about "healing" the energy map instead of completely recalculating it, and I did the same in my code.
I actually also "heal" the seam cost map, instead of entirely recomputing it. What I did is to propagate the changes forward in only the affected pixels. Of course this affects more pixels than are contained in 2 vertical seams but it still only affects part of the seam cost map.</description>
		<content:encoded><![CDATA[<p>Greger,</p>
<p>Interesting idea. I will give it some thought and get back to you with my conclusions (although it will probably take me a couple of weeks as I am really busy now).</p>
<p>Peter,</p>
<p>You are absolutely right about &#8220;healing&#8221; the energy map instead of completely recalculating it, and I did the same in my code.<br />
I actually also &#8220;heal&#8221; the seam cost map, instead of entirely recomputing it. What I did is to propagate the changes forward in only the affected pixels. Of course this affects more pixels than are contained in 2 vertical seams but it still only affects part of the seam cost map.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Amnon</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-121</link>
		<author>Amnon</author>
		<pubDate>Sun, 23 Sep 2007 09:15:18 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-121</guid>
					<description>cool stuff.
How about explaining how to seamlessly stitch the two halves of the picture after carving out a column?</description>
		<content:encoded><![CDATA[<p>cool stuff.<br />
How about explaining how to seamlessly stitch the two halves of the picture after carving out a column?</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: cigarettes</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-149</link>
		<author>cigarettes</author>
		<pubDate>Sat, 29 Sep 2007 18:06:00 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-149</guid>
					<description>Very nice this blog =)</description>
		<content:encoded><![CDATA[<p>Very nice this blog =)</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: marlboro</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-159</link>
		<author>marlboro</author>
		<pubDate>Tue, 02 Oct 2007 11:39:23 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-159</guid>
					<description>Very nice this blog =)</description>
		<content:encoded><![CDATA[<p>Very nice this blog =)</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Wahoo</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-168</link>
		<author>Wahoo</author>
		<pubDate>Sun, 07 Oct 2007 05:52:48 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-168</guid>
					<description>Thank you for sharing!</description>
		<content:encoded><![CDATA[<p>Thank you for sharing!</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Peter</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-170</link>
		<author>Peter</author>
		<pubDate>Mon, 08 Oct 2007 11:15:27 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-170</guid>
					<description>@Amnon: You don't really have to stitch the two "halves" together. Since the algorithm always selects the seam with the lowest energy, the "difference" between each pixel and its neighbour is minimal and removing the pixel will generally not leave artifacts behind but rather "compress" the original area into the new one. 

Maybe this becomes clear if we think through an example: If you have an image of an evenly colored blue square, removing a seam or a column from that will not leave any marks since putting blue next to the same blue is seamless. 

Let's then repeat the experiment with an image of the same square, but filled with a linear horizontal gradient*, you will find that removing seams or columns will result in the gradient becoming "steeper". To understand what is happening, let's assume (without loss of generality) that we are removing columns rather than seams. The entire fill has the same energy at every point since the change Pfrom one column to the next is always the same since the gradient is linear. Now if you remove an arbitrary column, the gradient at the neighboring columns increases, since the step between them is now twice as large as before. That means that the seam carving algorithm is not going to select one of those neighboring columns in the next step, since there are plenty of other columns that still have a smaller energy. This means that in the end you have removed columns with an even spacing so that you end up with something that is similar to the result you would end up with had you used regular downsampling using a nearest neighbor algorithm.

* Please note that when I'm talking about a gradient here, I mean the thing you would draw with Photoshop's gradient tool (i.e. interpolated colors), not the mathemathical gradient. For the sake of simplicity, let's assume that no dithering was used to render it.

I hope that answers your qestion.
Peter</description>
		<content:encoded><![CDATA[<p>@Amnon: You don&#8217;t really have to stitch the two &#8220;halves&#8221; together. Since the algorithm always selects the seam with the lowest energy, the &#8220;difference&#8221; between each pixel and its neighbour is minimal and removing the pixel will generally not leave artifacts behind but rather &#8220;compress&#8221; the original area into the new one. </p>
<p>Maybe this becomes clear if we think through an example: If you have an image of an evenly colored blue square, removing a seam or a column from that will not leave any marks since putting blue next to the same blue is seamless. </p>
<p>Let&#8217;s then repeat the experiment with an image of the same square, but filled with a linear horizontal gradient*, you will find that removing seams or columns will result in the gradient becoming &#8220;steeper&#8221;. To understand what is happening, let&#8217;s assume (without loss of generality) that we are removing columns rather than seams. The entire fill has the same energy at every point since the change Pfrom one column to the next is always the same since the gradient is linear. Now if you remove an arbitrary column, the gradient at the neighboring columns increases, since the step between them is now twice as large as before. That means that the seam carving algorithm is not going to select one of those neighboring columns in the next step, since there are plenty of other columns that still have a smaller energy. This means that in the end you have removed columns with an even spacing so that you end up with something that is similar to the result you would end up with had you used regular downsampling using a nearest neighbor algorithm.</p>
<p>* Please note that when I&#8217;m talking about a gradient here, I mean the thing you would draw with Photoshop&#8217;s gradient tool (i.e. interpolated colors), not the mathemathical gradient. For the sake of simplicity, let&#8217;s assume that no dithering was used to render it.</p>
<p>I hope that answers your qestion.<br />
Peter</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: yaniv</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-171</link>
		<author>yaniv</author>
		<pubDate>Mon, 08 Oct 2007 13:36:56 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-171</guid>
					<description>Peter,

I disagree with your answer. Removing the seam with the lowest energy may induce artifacts to the image (the energy of the seam with the lowest energy may still be high!).

Consider the case of an extremely noisy image. Simply removing seams will generate a lot of artifacts and somehow averaging the removed seams back into the image might make the situation much better.

You may argue that the seam carving method is inadequate for extremely noisy images, but consider the case of the pagoda image above - the vertical seams do not have a lot of energy (as the blue sky takes up most of them) but each of them is forced to pass through the wall and the water at the bottom - areas of high energy. Averaging the removed seams may reduce the artifacts occuring at those locations.</description>
		<content:encoded><![CDATA[<p>Peter,</p>
<p>I disagree with your answer. Removing the seam with the lowest energy may induce artifacts to the image (the energy of the seam with the lowest energy may still be high!).</p>
<p>Consider the case of an extremely noisy image. Simply removing seams will generate a lot of artifacts and somehow averaging the removed seams back into the image might make the situation much better.</p>
<p>You may argue that the seam carving method is inadequate for extremely noisy images, but consider the case of the pagoda image above - the vertical seams do not have a lot of energy (as the blue sky takes up most of them) but each of them is forced to pass through the wall and the water at the bottom - areas of high energy. Averaging the removed seams may reduce the artifacts occuring at those locations.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Peter</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-172</link>
		<author>Peter</author>
		<pubDate>Mon, 08 Oct 2007 20:36:44 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-172</guid>
					<description>yaniv,

I completely agree with you. My understanding of Amnon's question was that he/she wanted to know how the algorithm proposed in the paper deals with the issue. My answer is that it doesn't deal with it at all (at least as far as I remember) because artifacts are often not very noticeable since most images have a lot of low energy regions, and I attempted to explain why the algorithm does not cause many strong artifacts in those regions. I should have made that clearer, and I should definitely not have used the term "generally". English is not my native language, so please bear with me. I am really sorry if my post was misleading and caused any misconceptions. Again, you are absolutely right.

Your suggestion to average the seams is a really good idea, although I would propose a weighted combination of the original values since they do not contribute equally to the resulting pixel. Say we are removing a vertical seam. If you have pixels ABC and you remove pixel B (which is on the seam) ending up with DE, my suggestion is that D = 2/3 * A + 1/3 * B; and E = 2/3 * C + 1/3 * B; You could think of it as splitting the removed pixel and assigning one half of it to each of the neighboring pixels. The results should be on par with conventional resampling in terms of quality, except for any rounding errors that might accumulate. The only problem is that it slows the algorithm down even more.</description>
		<content:encoded><![CDATA[<p>yaniv,</p>
<p>I completely agree with you. My understanding of Amnon&#8217;s question was that he/she wanted to know how the algorithm proposed in the paper deals with the issue. My answer is that it doesn&#8217;t deal with it at all (at least as far as I remember) because artifacts are often not very noticeable since most images have a lot of low energy regions, and I attempted to explain why the algorithm does not cause many strong artifacts in those regions. I should have made that clearer, and I should definitely not have used the term &#8220;generally&#8221;. English is not my native language, so please bear with me. I am really sorry if my post was misleading and caused any misconceptions. Again, you are absolutely right.</p>
<p>Your suggestion to average the seams is a really good idea, although I would propose a weighted combination of the original values since they do not contribute equally to the resulting pixel. Say we are removing a vertical seam. If you have pixels ABC and you remove pixel B (which is on the seam) ending up with DE, my suggestion is that D = 2/3 * A + 1/3 * B; and E = 2/3 * C + 1/3 * B; You could think of it as splitting the removed pixel and assigning one half of it to each of the neighboring pixels. The results should be on par with conventional resampling in terms of quality, except for any rounding errors that might accumulate. The only problem is that it slows the algorithm down even more.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Dan</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-173</link>
		<author>Dan</author>
		<pubDate>Mon, 08 Oct 2007 20:44:58 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-173</guid>
					<description>Reading the several last comments about averaging instead of removing, I have thought about a slightly different way to define seams, which might improve things a little. I will talk about vertical seams, for simplicity. Instead of considering pixels to be removed, consider the "spaces" between two horizontally adjacent pixels, or rather, simply that pair of pixels. Give each such pair an energy equal to the distance between the colours (the 3d distance, that is; or gradient or whatever energy function you're using). Then define the vertical seam similarly, but using pairs of pixels instead of pixels; what you get is a normal seam, but copied and pasted one pixel to the right. Define the energy of the seam as the sum of the energies of all pairs; then remove the seam by changing each pair into a single pixel, by averaging. 

I don't think this will be a great improvement, but maybe a small one. I think that in this way, the vertical gradient is less important, because colours are merged horizontally instead of simply removed. Still haven't seen the results of my other suggestions, though. No pressure. :)</description>
		<content:encoded><![CDATA[<p>Reading the several last comments about averaging instead of removing, I have thought about a slightly different way to define seams, which might improve things a little. I will talk about vertical seams, for simplicity. Instead of considering pixels to be removed, consider the &#8220;spaces&#8221; between two horizontally adjacent pixels, or rather, simply that pair of pixels. Give each such pair an energy equal to the distance between the colours (the 3d distance, that is; or gradient or whatever energy function you&#8217;re using). Then define the vertical seam similarly, but using pairs of pixels instead of pixels; what you get is a normal seam, but copied and pasted one pixel to the right. Define the energy of the seam as the sum of the energies of all pairs; then remove the seam by changing each pair into a single pixel, by averaging. </p>
<p>I don&#8217;t think this will be a great improvement, but maybe a small one. I think that in this way, the vertical gradient is less important, because colours are merged horizontally instead of simply removed. Still haven&#8217;t seen the results of my other suggestions, though. No pressure. <img src='http://leviathanonline.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Dan</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-174</link>
		<author>Dan</author>
		<pubDate>Mon, 08 Oct 2007 20:57:21 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-174</guid>
					<description>I had written my last reply before seeing Peter's; I think his idea of averaging is pretty neat too, and perhaps better balanced and creates less artifacts than mine. Hard to say. I do think that the simplicity of averaging only two pixels, as well as calculating energy based only on two pixels (instead of 3? 5? 9?), has something to it, though.</description>
		<content:encoded><![CDATA[<p>I had written my last reply before seeing Peter&#8217;s; I think his idea of averaging is pretty neat too, and perhaps better balanced and creates less artifacts than mine. Hard to say. I do think that the simplicity of averaging only two pixels, as well as calculating energy based only on two pixels (instead of 3? 5? 9?), has something to it, though.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Brain_ReCall</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-214</link>
		<author>Brain_ReCall</author>
		<pubDate>Tue, 16 Oct 2007 22:51:29 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-214</guid>
					<description>I too have been playing around with the algorithm and have been getting very good results. http://brain.recall.googlepages.com/cair
Written in C++ and multi-threaded, but currently lacking a GUI.

On your gradient technique: I have been studying this for awhile, and conversion to grayscale before edge detection is generally an acceptable technique. There really isn't much loss in the edge values, especially if you do a RGB-&#62;YUV conversion, such as seen here: http://en.wikipedia.org/wiki/YUV

There are techniques to increase performance. One way is to avoid recalculating the gradients after every seam removal. I have some examples of this on my website. You can average the edge value back into the edge image much like you do the image. This has its limits, which some of my examples demonstrate. 

Unfortunately, the energy map MUST be recalculated after each removal. Any single change in the energy map affects all values above it in a tree pattern. At most in most circumstances, only about 1/3-1/2 of the energy map will remain unchanged, but specializing the code to avoid those regions might make it unwieldy.

During removal, yes, I recommend averaging the removed pixel's values back into its neighbors. This limits some of the harsh edges that are likely to develop. However, it is important NOT to average the results back in when an area is marked for removal, as this will average the unwanted content back into the two edges of the area.

One thing that hasn't been discussed here yet is enlarging by seam insertion. The paper's method appears to be lacking, which I demonstrate on my website. The paper describes calculating all seams at once, then inserting next to each seam from least energy to most. Well, the problem is is that so many of the seams merge as they propagate up, producing horrible stretching. My test image that is 1024 pixels wide only had 4 distinct paths by the time they reach the top. The only solution that I have come up with (thanks to Ramin, who commented above), is to add artificial weight to both the least energy seam and the new inserted seam. Then, the least energy seam has to be recalculated. With the correct choosing the the artificial weight it can produce very good results.

Other options not mentioned to increase quality are the transport map and frequency domain removal. Both of these would DRASTICALLY increase calculation time. The transport map, described in the paper, needs to calculate both the horizontal and vertical seam removal at each step, then determine which one removed the least amount of energy, and then go with that decision. This is entirely possible to implement, just that it would disable most of the optimizations that we have already discovered. The other quality improvement is frequency domain removal. This is in no way fast, as the frequency domain brings in a whole bunch of fun stuff like imaginary numbers. I have done some frequency domain filtering before, but I am uncertain on how to approach removal (the paper mentions another paper which I have only briefly looked over).</description>
		<content:encoded><![CDATA[<p>I too have been playing around with the algorithm and have been getting very good results. <a href="http://brain.recall.googlepages.com/cair" rel="nofollow">http://brain.recall.googlepages.com/cair</a><br />
Written in C++ and multi-threaded, but currently lacking a GUI.</p>
<p>On your gradient technique: I have been studying this for awhile, and conversion to grayscale before edge detection is generally an acceptable technique. There really isn&#8217;t much loss in the edge values, especially if you do a RGB-&gt;YUV conversion, such as seen here: <a href="http://en.wikipedia.org/wiki/YUV" rel="nofollow">http://en.wikipedia.org/wiki/YUV</a></p>
<p>There are techniques to increase performance. One way is to avoid recalculating the gradients after every seam removal. I have some examples of this on my website. You can average the edge value back into the edge image much like you do the image. This has its limits, which some of my examples demonstrate. </p>
<p>Unfortunately, the energy map MUST be recalculated after each removal. Any single change in the energy map affects all values above it in a tree pattern. At most in most circumstances, only about 1/3-1/2 of the energy map will remain unchanged, but specializing the code to avoid those regions might make it unwieldy.</p>
<p>During removal, yes, I recommend averaging the removed pixel&#8217;s values back into its neighbors. This limits some of the harsh edges that are likely to develop. However, it is important NOT to average the results back in when an area is marked for removal, as this will average the unwanted content back into the two edges of the area.</p>
<p>One thing that hasn&#8217;t been discussed here yet is enlarging by seam insertion. The paper&#8217;s method appears to be lacking, which I demonstrate on my website. The paper describes calculating all seams at once, then inserting next to each seam from least energy to most. Well, the problem is is that so many of the seams merge as they propagate up, producing horrible stretching. My test image that is 1024 pixels wide only had 4 distinct paths by the time they reach the top. The only solution that I have come up with (thanks to Ramin, who commented above), is to add artificial weight to both the least energy seam and the new inserted seam. Then, the least energy seam has to be recalculated. With the correct choosing the the artificial weight it can produce very good results.</p>
<p>Other options not mentioned to increase quality are the transport map and frequency domain removal. Both of these would DRASTICALLY increase calculation time. The transport map, described in the paper, needs to calculate both the horizontal and vertical seam removal at each step, then determine which one removed the least amount of energy, and then go with that decision. This is entirely possible to implement, just that it would disable most of the optimizations that we have already discovered. The other quality improvement is frequency domain removal. This is in no way fast, as the frequency domain brings in a whole bunch of fun stuff like imaginary numbers. I have done some frequency domain filtering before, but I am uncertain on how to approach removal (the paper mentions another paper which I have only briefly looked over).</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: samo zain lyrics</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-365</link>
		<author>samo zain lyrics</author>
		<pubDate>Sat, 17 Nov 2007 18:35:24 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-365</guid>
					<description>&lt;strong&gt;samo zain lyrics&lt;/strong&gt;

Thanks for the nice read, keep up the interesting posts..</description>
		<content:encoded><![CDATA[<p><strong>samo zain lyrics</strong></p>
<p>Thanks for the nice read, keep up the interesting posts..</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Jaudat Mamoon</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-409</link>
		<author>Jaudat Mamoon</author>
		<pubDate>Sun, 25 Nov 2007 17:28:05 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-409</guid>
					<description>Hi, 
I am having a problem to understand the concept of forming a transport map for optimal seam order selection. can some one describe in simple words how one can achieve this optimal seam order selection for seam removal in both directions</description>
		<content:encoded><![CDATA[<p>Hi,<br />
I am having a problem to understand the concept of forming a transport map for optimal seam order selection. can some one describe in simple words how one can achieve this optimal seam order selection for seam removal in both directions</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Brain_ReCall</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-412</link>
		<author>Brain_ReCall</author>
		<pubDate>Mon, 26 Nov 2007 00:48:18 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-412</guid>
					<description>The transport map is intended for multi-directional seam removal (shrinking in both directions at once). The paper's transport map is rather complicated because it's used to store all seam removals for all possible resolutions. 


The simplest method to achieve the same results is this:
1. Calculate vertical least-energy seam as normal. The energy of the seam is the bottom value in the energy map, where you started the seam from.
2. Repeat step one except for the horizontal direction.
3. Remove the seam from step 1 and 2 that has the least energy.

Repeat these steps until one dimension of the image has reached its desired value. Then, you would have to perform the standard seam removal for the other dimension.</description>
		<content:encoded><![CDATA[<p>The transport map is intended for multi-directional seam removal (shrinking in both directions at once). The paper&#8217;s transport map is rather complicated because it&#8217;s used to store all seam removals for all possible resolutions. </p>
<p>The simplest method to achieve the same results is this:<br />
1. Calculate vertical least-energy seam as normal. The energy of the seam is the bottom value in the energy map, where you started the seam from.<br />
2. Repeat step one except for the horizontal direction.<br />
3. Remove the seam from step 1 and 2 that has the least energy.</p>
<p>Repeat these steps until one dimension of the image has reached its desired value. Then, you would have to perform the standard seam removal for the other dimension.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Ivan</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-435</link>
		<author>Ivan</author>
		<pubDate>Thu, 29 Nov 2007 09:24:13 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-435</guid>
					<description>Hi, my name is disman-kl, i like your site and i ll be back ;)</description>
		<content:encoded><![CDATA[<p>Hi, my name is disman-kl, i like your site and i ll be back <img src='http://leviathanonline.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Seam carving for content aware image resizing: MATLAB implementation &#124; DanLuong</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-513</link>
		<author>Seam carving for content aware image resizing: MATLAB implementation &#124; DanLuong</author>
		<pubDate>Wed, 12 Dec 2007 09:33:15 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-513</guid>
					<description>[...] http://yaniv.leviathanonline.com/blog/math/seam-carving/ [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] <a href="http://yaniv.leviathanonline.com/blog/math/seam-carving/" rel="nofollow">http://yaniv.leviathanonline.com/blog/math/seam-carving/</a> [&#8230;]</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Seam carving for content aware image resizing: MATLAB implementation &#38; tutorial &#124; danluong</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-746</link>
		<author>Seam carving for content aware image resizing: MATLAB implementation &#38; tutorial &#124; danluong</author>
		<pubDate>Fri, 21 Dec 2007 10:32:24 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-746</guid>
					<description>[...] http://yaniv.leviathanonline.com/blog/math/seam-carving/ [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] <a href="http://yaniv.leviathanonline.com/blog/math/seam-carving/" rel="nofollow">http://yaniv.leviathanonline.com/blog/math/seam-carving/</a> [&#8230;]</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Dan Luong</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-923</link>
		<author>Dan Luong</author>
		<pubDate>Mon, 24 Dec 2007 10:28:47 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-923</guid>
					<description>Thanks for the writeup, which was helpful when I implemented parts of the standard seam carving algorithm (with GUI) in MATLAB. You can download the software from my site at:

http://danluong.com/2007/12/21/seam-carving-matlab-implementation-tutorial/

There's a variety of functionality in it, and the documentation should be thorough enough for anyone trying to figure out how the algorithm works. I calculate a single gradient image, and recalculate the energymap on every seam removal, and also include seam insertion functionality.</description>
		<content:encoded><![CDATA[<p>Thanks for the writeup, which was helpful when I implemented parts of the standard seam carving algorithm (with GUI) in MATLAB. You can download the software from my site at:</p>
<p><a href="http://danluong.com/2007/12/21/seam-carving-matlab-implementation-tutorial/" rel="nofollow">http://danluong.com/2007/12/21/seam-carving-matlab-implementation-tutorial/</a></p>
<p>There&#8217;s a variety of functionality in it, and the documentation should be thorough enough for anyone trying to figure out how the algorithm works. I calculate a single gradient image, and recalculate the energymap on every seam removal, and also include seam insertion functionality.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: jamal alzeban</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-2707</link>
		<author>jamal alzeban</author>
		<pubDate>Wed, 23 Jan 2008 17:39:22 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-2707</guid>
					<description>guys, im implementing seam insertion or enlarging, what i need to know is the after i get k seams, do i insert like this:
insert 1st seam on original image and call new image im2
insert 2nd seam on im2 and call new image im3
insert 3rd seam on im2 and call new image im4
and so on 
or is there another way coz this way is cozing stretching.

by the way , does any body know how does GIMP software do seam insertion, coz they did a good job and i need the trick. thanks</description>
		<content:encoded><![CDATA[<p>guys, im implementing seam insertion or enlarging, what i need to know is the after i get k seams, do i insert like this:<br />
insert 1st seam on original image and call new image im2<br />
insert 2nd seam on im2 and call new image im3<br />
insert 3rd seam on im2 and call new image im4<br />
and so on<br />
or is there another way coz this way is cozing stretching.</p>
<p>by the way , does any body know how does GIMP software do seam insertion, coz they did a good job and i need the trick. thanks</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: ReShAdE</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-8357</link>
		<author>ReShAdE</author>
		<pubDate>Wed, 30 Apr 2008 11:44:23 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-8357</guid>
					<description>Hi, 
This resizing technique is pretty amazing, but I was looking for a free online tool to actually see it work, before trying to understand how it’s implemented. I wanted to see how it works on my very own pictures. I must confess that it took some time, but I finally found it .For those of you who are interested to see a high quality resizing  online tool you can check it out at reshade.com</description>
		<content:encoded><![CDATA[<p>Hi,<br />
This resizing technique is pretty amazing, but I was looking for a free online tool to actually see it work, before trying to understand how it’s implemented. I wanted to see how it works on my very own pictures. I must confess that it took some time, but I finally found it .For those of you who are interested to see a high quality resizing  online tool you can check it out at reshade.com</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Does &#8217;seam carving&#8217; generalize?</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-10401</link>
		<author>Does &#8217;seam carving&#8217; generalize?</author>
		<pubDate>Sat, 16 Aug 2008 02:54:17 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-10401</guid>
					<description>[...] found a seam carving implementation by Mike Swanson called Seamonster. This led me to a paper by seam carving&#8217;s creators, Dr. Shai Avidan and Dr. Ariel Shamir: Seam Carving [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] found a seam carving implementation by Mike Swanson called Seamonster. This led me to a paper by seam carving&#8217;s creators, Dr. Shai Avidan and Dr. Ariel Shamir: Seam Carving [&#8230;]</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Alex</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-11707</link>
		<author>Alex</author>
		<pubDate>Tue, 21 Oct 2008 16:17:06 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-11707</guid>
					<description>Thanks for this very interesting article.
When you describe the 8-connected path, shouldn't the third possible point be (x-1,y+1) instead of (x-1,y) ?
Thanks once again.
Alex.</description>
		<content:encoded><![CDATA[<p>Thanks for this very interesting article.<br />
When you describe the 8-connected path, shouldn&#8217;t the third possible point be (x-1,y+1) instead of (x-1,y) ?<br />
Thanks once again.<br />
Alex.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: yaniv</title>
		<link>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-11711</link>
		<author>yaniv</author>
		<pubDate>Tue, 21 Oct 2008 23:01:27 +0000</pubDate>
		<guid>http://yaniv.leviathanonline.com/blog/math/seam-carving/#comment-11711</guid>
					<description>Alex,

You are of course right - thanks for your correction!</description>
		<content:encoded><![CDATA[<p>Alex,</p>
<p>You are of course right - thanks for your correction!</p>
]]></content:encoded>
				</item>
</channel>
</rss>
