<?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: Webcam image compositor, creating PNG48&#8242;s</title>
	<atom:link href="http://www.zeropointnine.com/blog/webcam-image-compositor-creating-png48s/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zeropointnine.com/blog/webcam-image-compositor-creating-png48s/</link>
	<description>lee felarca - personal work and findings</description>
	<lastBuildDate>Wed, 01 Feb 2012 05:54:23 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Mitchell</title>
		<link>http://www.zeropointnine.com/blog/webcam-image-compositor-creating-png48s/comment-page-1/#comment-3753</link>
		<dc:creator>Mitchell</dc:creator>
		<pubDate>Thu, 27 Jan 2011 19:55:11 +0000</pubDate>
		<guid isPermaLink="false">http://www.zeropointnine.com/blog/?p=130#comment-3753</guid>
		<description>&gt;&gt; Also, are you describing a routine that works on a
&gt;&gt; single frame? I wonder if that same concept 
&gt;&gt; could be useful over two or more frames…

Although the algorithm I described uses only two frames (current actual camera pixels &amp; the displayed pixels) it implicitly represents data from multiple frames over time.  It is sort of like recursively defined values in mathematical proofs.  

Each new pixel is the weighted average of that same pixel from all preceding frames.

(1/2)P0+ (1/4)P1 + (1/8)P2 + (1/16)P3 + ...

i.e. based on this mathematical series:

1/2 + 1/4 + 1/8 + 1/16 + 1/32 + ... = 1

&gt;&gt; bilinear filtering or for GPU anti-aliasing?

Those are essentially nearest neighbor pixel averages.  They operate in one frame to smooth the image but they are not based on temporal data (at least as far as I know).

I have however experimented with the combination of my temporal smoothing with various 3x3 pixel transformations for contrast enhancement or smoothing of the current frame (and also for edge enhancement and emboss effects and so forth; btw - I&#039;m sure you&#039;d really enjoy experimenting with these algorithms!).  The temporal filtering provides a less noisy image to start with, so the results with other effects are improved.  

I was particularly fascinated with the notion that I could create green-screen effects by identifying clusters of pixels that had negligible changes, and then compositing in real time with these as transparency.  It worked very nicely to some extent but, if the subject was relatively still I&#039;d have this disembodied hand or face floating around.</description>
		<content:encoded><![CDATA[<p>&gt;&gt; Also, are you describing a routine that works on a<br />
&gt;&gt; single frame? I wonder if that same concept<br />
&gt;&gt; could be useful over two or more frames…</p>
<p>Although the algorithm I described uses only two frames (current actual camera pixels &amp; the displayed pixels) it implicitly represents data from multiple frames over time.  It is sort of like recursively defined values in mathematical proofs.  </p>
<p>Each new pixel is the weighted average of that same pixel from all preceding frames.</p>
<p>(1/2)P0+ (1/4)P1 + (1/8)P2 + (1/16)P3 + &#8230;</p>
<p>i.e. based on this mathematical series:</p>
<p>1/2 + 1/4 + 1/8 + 1/16 + 1/32 + &#8230; = 1</p>
<p>&gt;&gt; bilinear filtering or for GPU anti-aliasing?</p>
<p>Those are essentially nearest neighbor pixel averages.  They operate in one frame to smooth the image but they are not based on temporal data (at least as far as I know).</p>
<p>I have however experimented with the combination of my temporal smoothing with various 3&#215;3 pixel transformations for contrast enhancement or smoothing of the current frame (and also for edge enhancement and emboss effects and so forth; btw &#8211; I&#8217;m sure you&#8217;d really enjoy experimenting with these algorithms!).  The temporal filtering provides a less noisy image to start with, so the results with other effects are improved.  </p>
<p>I was particularly fascinated with the notion that I could create green-screen effects by identifying clusters of pixels that had negligible changes, and then compositing in real time with these as transparency.  It worked very nicely to some extent but, if the subject was relatively still I&#8217;d have this disembodied hand or face floating around.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: admin</title>
		<link>http://www.zeropointnine.com/blog/webcam-image-compositor-creating-png48s/comment-page-1/#comment-3752</link>
		<dc:creator>admin</dc:creator>
		<pubDate>Thu, 27 Jan 2011 16:36:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.zeropointnine.com/blog/?p=130#comment-3752</guid>
		<description>Mitchell, I&#039;d really like to play with that idea, thanks for sharing that.

Two questions - 

Does what you describe share something in common with the process used for bilinear filtering or for GPU anti-aliasing?

Also, are you describing a routine that works on a single frame? I wonder if that same concept could be useful over two or more frames...</description>
		<content:encoded><![CDATA[<p>Mitchell, I&#8217;d really like to play with that idea, thanks for sharing that.</p>
<p>Two questions &#8211; </p>
<p>Does what you describe share something in common with the process used for bilinear filtering or for GPU anti-aliasing?</p>
<p>Also, are you describing a routine that works on a single frame? I wonder if that same concept could be useful over two or more frames&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mitchell</title>
		<link>http://www.zeropointnine.com/blog/webcam-image-compositor-creating-png48s/comment-page-1/#comment-3751</link>
		<dc:creator>Mitchell</dc:creator>
		<pubDate>Thu, 27 Jan 2011 07:28:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.zeropointnine.com/blog/?p=130#comment-3751</guid>
		<description>Pixel values could also be added together in a larger integer buffer, and then shifted right.  It is probably slightly more accurate that way, but a tiny bit slower.</description>
		<content:encoded><![CDATA[<p>Pixel values could also be added together in a larger integer buffer, and then shifted right.  It is probably slightly more accurate that way, but a tiny bit slower.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mitchell</title>
		<link>http://www.zeropointnine.com/blog/webcam-image-compositor-creating-png48s/comment-page-1/#comment-3750</link>
		<dc:creator>Mitchell</dc:creator>
		<pubDate>Thu, 27 Jan 2011 07:24:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.zeropointnine.com/blog/?p=130#comment-3750</guid>
		<description>Lee, you have a wonderful site.  I greatly enjoy your articles.

Just thought I&#039;d comment on this one.

Several years ago I implemented a similar image stream effect for a dazzling improvement in webcam clarity, but with a slight algorithmic difference from your approach.  You might find it interesting for future experimentation.  Instead of a mean I used a sort of binary logarithmic convolution. 

The algorithm is very simple, works in integers, and doesn&#039;t have the roundoff issue that you had been concerned about.

for each pixel, r,g,b:
shift current camera pixel right by 1 bit (i.e. divide by two) 
shift previous displayed frame pixel value right by 1 bit (again a divide by two)
add these two values together to yield a new display frame pixel value

This approach is basically a weighted average of the preceding values where each frame is twice as important the closer it is to the present frame.

The effect is similarly crisp, much faster to compute, and the artifacts from motion disappear very rapidly.</description>
		<content:encoded><![CDATA[<p>Lee, you have a wonderful site.  I greatly enjoy your articles.</p>
<p>Just thought I&#8217;d comment on this one.</p>
<p>Several years ago I implemented a similar image stream effect for a dazzling improvement in webcam clarity, but with a slight algorithmic difference from your approach.  You might find it interesting for future experimentation.  Instead of a mean I used a sort of binary logarithmic convolution. </p>
<p>The algorithm is very simple, works in integers, and doesn&#8217;t have the roundoff issue that you had been concerned about.</p>
<p>for each pixel, r,g,b:<br />
shift current camera pixel right by 1 bit (i.e. divide by two)<br />
shift previous displayed frame pixel value right by 1 bit (again a divide by two)<br />
add these two values together to yield a new display frame pixel value</p>
<p>This approach is basically a weighted average of the preceding values where each frame is twice as important the closer it is to the present frame.</p>
<p>The effect is similarly crisp, much faster to compute, and the artifacts from motion disappear very rapidly.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: makc</title>
		<link>http://www.zeropointnine.com/blog/webcam-image-compositor-creating-png48s/comment-page-1/#comment-775</link>
		<dc:creator>makc</dc:creator>
		<pubDate>Fri, 17 Jul 2009 18:24:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.zeropointnine.com/blog/?p=130#comment-775</guid>
		<description>I had a fight with google to dig this out today, and I&#039;ve lost it. I could only find this at flashbookmarks.com, do something about google indexing please.</description>
		<content:encoded><![CDATA[<p>I had a fight with google to dig this out today, and I&#8217;ve lost it. I could only find this at flashbookmarks.com, do something about google indexing please.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: restoration</title>
		<link>http://www.zeropointnine.com/blog/webcam-image-compositor-creating-png48s/comment-page-1/#comment-606</link>
		<dc:creator>restoration</dc:creator>
		<pubDate>Mon, 15 Jun 2009 08:37:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.zeropointnine.com/blog/?p=130#comment-606</guid>
		<description>Great article.  Thanks for sharing this informative article.</description>
		<content:encoded><![CDATA[<p>Great article.  Thanks for sharing this informative article.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

