<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>Visual-Experiments.com &#187; augmented reality</title>
	<atom:link href="http://www.visual-experiments.com/category/augmented-reality/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.visual-experiments.com</link>
	<description>ASTRE Henri experiments with Ogre3D and web stuff</description>
	<lastBuildDate>Mon, 16 Jan 2017 18:59:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>News about OpenSynther</title>
		<link>http://www.visual-experiments.com/2011/05/09/news-about-opensynther/</link>
		<comments>http://www.visual-experiments.com/2011/05/09/news-about-opensynther/#comments</comments>
		<pubDate>Mon, 09 May 2011 08:24:30 +0000</pubDate>
		<dc:creator>Henri</dc:creator>
				<category><![CDATA[augmented reality]]></category>
		<category><![CDATA[photogrammetry]]></category>
		<category><![CDATA[opensynther]]></category>
		<category><![CDATA[photosynth]]></category>
		<category><![CDATA[photosynthtoolkit]]></category>
		<category><![CDATA[sfmtoolkit]]></category>
		<guid isPermaLink="false">http://www.visual-experiments.com/?p=1649</guid>
		<description><![CDATA[I&#8217;ve worked a lot on OpenSynther lately: OpenSynther is the name of my structure-from-motion solution. This new version is a major rewrite of the previous version which was using Surf with both GPU and multi-core CPU matching. The new version is using SiftGPU and Flann to achieve linear matching complexity of unstructured input as described [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve worked a lot on <a href="http://www.visual-experiments.com/demos/opensynther/">OpenSynther</a> lately: OpenSynther is the name of my structure-from-motion solution. This new version is a major rewrite of the <a href="http://www.visual-experiments.com/2010/09/08/introducing-opensynther/">previous version</a> which was using Surf with both GPU and multi-core CPU matching. The new version is using <a href="http://www.cs.unc.edu/~ccwu/siftgpu/">SiftGPU</a> and <a href="http://www.cs.ubc.ca/~mariusm/index.php/FLANN/FLANN">Flann</a> to achieve linear matching complexity of unstructured input as described in <a href="http://profs.sci.univr.it/~fusiello/demo/samantha/">Samantha paper</a>. You can find more information about OpenSynther features on it <a style="font-size: 20px;" href="http://www.visual-experiments.com/demos/opensynther/">dedicated page</a> (including source code).</p>
<p>OpenSynther has been designed as a library (<strong>OpenSyntherLib</strong>) which has already proven to be useful for several programs written by myself:</p>
<ul style="margin-left: 20px;">
<li><strong>OpenSynther</strong>: work in progress&#8230; used by my augmented reality demo</li>
<li><strong>PhotoSynth2CMVS</strong>: this allow to use <a href="http://grail.cs.washington.edu/software/cmvs/">CMVS</a> with <a href="http://www.visual-experiments.com/demos/photosynthtoolkit/">PhotoSynthToolkit</a></li>
<li><strong>BundlerMatcher</strong>: this is the matching solution used by <a href="http://www.visual-experiments.com/demos/sfmtoolkit/">SFMToolkit</a></li>
</ul>
<h3>Outdoor augmented reality demo using OpenSynther</h3>
<p>I&#8217;ve improved my <a href="http://www.visual-experiments.com/2010/12/13/augmented-reality-outdoor-tracking-becoming-reality/">first attempt of outdoor augmented reality</a>: I&#8217;m now relying on PhotoSynth capability of creating a point cloud of the scene instead of <a href="http://phototour.cs.washington.edu/bundler/">Bundler</a>. Then I&#8217;m doing some processing with OpenSynther and here is what what you get:</p>
<p><iframe width="560" height="349" src="http://www.youtube.com/embed/JOoQTs5k258" frameborder="0" allowfullscreen></iframe><br />
<br />
You can also take a look at the <strong style="font-size: 20px;">3 others youtube videos showing this tracking in action</strong> around this church: <a href="http://youtu.be/5kSdy6DOIdI">MVI_6380.avi</a>, <a href="http://youtu.be/N-3xmmqLuD8">MVI_6381.avi</a>, <a href="http://youtu.be/8XiqGpQ9QuQ">MVI_6382.avi</a>.</p>
<h3>PhotoSynth2CMVS</h3>
<p>This is not ready yet, I still have some stuff to fix before releasing it. But I&#8217;m already producing a valid &#8220;bundle.out&#8221; file compatible with CMVS processing from PhotoSynth. I&#8217;ve processed the <a href="http://photosynth.net/view.aspx?cid=2776dec7-918d-4c64-8ded-342b74421c1a">V3D dataset</a> with <strong>PhotoSynth2CMVS</strong> and sent the bundle.out file to <a href="http://www.olihar.com/">Olafur Haraldsson</a> who has managed to create the corresponding 36 million vertices point cloud using <a href="http://grail.cs.washington.edu/software/cmvs/">CMVS</a> and <a href="http://grail.cs.washington.edu/software/pmvs/">PMVS2</a>:<br />
<iframe src="http://player.vimeo.com/video/21889929?title=0&amp;byline=0&amp;portrait=0" width="520" height="293" frameborder="0"></iframe><br />
The <a href="http://photosynth.net/view.aspx?cid=2776dec7-918d-4c64-8ded-342b74421c1a">V3D dataset</a> was created by <a href="http://www.inf.ethz.ch/personal/chzach/">Christopher Zach</a>.</p>
<h3>BundlerMatcher</h3>
<p>The new unstructured linear matching is really fast as you can see on the above chart compared to PhotoSynth. <strong>But the quality of the generated point cloud is not as good as PhotoSynth</strong>.<br />
<br />
<img src="http://www.visual-experiments.com/blog/wp-content/uploads/2011/03/photosynth_matching.png" alt="" title="photosynth_matching" width="492" height="289" class="aligncenter size-full wp-image-1496" /><br />
<br />
<img src="http://www.visual-experiments.com/blog/wp-content/uploads/2011/03/opensynther_matching1.png" alt="" title="opensynther_matching" width="492" height="289" class="aligncenter size-full wp-image-1498" /><br />
This benchmark was computed on a Core i7 with an Nvidia 470 GTX. I&#8217;ve also compared the quality of the matching methods implemented in <a href="http://www.visual-experiments.com/demos/opensynther/">OpenSynther</a> (linear VS quadratic). I&#8217;ve used Bundler as a comparator with a dataset of 245 pictures:</p>
<style type="text/css">
table.benchmarks, table.benchmarks td, table.benchmarks tr {
color: black;
border: 1px solid black;
background-color: white;
text-align: left;
margin: auto;
width: 70%;
}
table.benchmarks td {
padding: 2px;
}
</style>
<table style="margin-bottom: 15px;" class="benchmarks">
<tbody>
<tr>
<td></td>
<td>Linear</td>
<td>Quadratic</td>
</tr>
<tr>
<td>Nb pictures registered</td>
<td>193</td>
<td>243</td>
</tr>
<tr>
<td>Time spent to register 193 pictures</td>
<td>33min</td>
<td>1h43min</td>
</tr>
</tbody>
</table>
<p>On the one hand, both <strong>the matching and the bundle adjustment are faster with linear matching</strong> but on the other hand, having only 193 out of 245 pictures registered is not acceptable. I have some idea on how to improve the linear matching pictures registering ratio but this is not implemented yet (this is why PhotoSynth2CMVS is not released for now).</p>
<h3>Future</h3>
<p>I&#8217;ve been playing with <a href="http://cvlab.epfl.ch/research/detect/ldahash/">LDAHash</a> last week and I&#8217;d like to support this in OpenSynther to improve matching speed and accuracy. It would also help to reduce the memory used by OpenSynther (by a factor 16: 128 floats -> 256bits per feature). I&#8217;m also wondering if the <a href="http://www.cs.unc.edu/~jmf/Software.html">Cuda knn</a> implementation could speed-up the matching (if applicable)? I &#8216;d also like to restore the previous Surf version of OpenSynther which was really fun to implement. Adding a sequential bundle adjustment (as in bundler) would be really interesting too&#8230;</p>
<h3>Off-topic</h3>
<p>I&#8217;ve made some modifications to my blog: switched to WordPress 3.x, activated page caching, added social sharing buttons and added my <a href="http://www.linkedin.com/in/henriastre/en">LinkedIn account</a> next to the donate button&#8230;</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.visual-experiments.com%2F2011%2F05%2F09%2Fnews-about-opensynther%2F&amp;title=News%20about%20OpenSynther"><img src="http://www.visual-experiments.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.visual-experiments.com/2011/05/09/news-about-opensynther/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>2010 visual experiments</title>
		<link>http://www.visual-experiments.com/2011/01/07/2010-visual-experiments/</link>
		<comments>http://www.visual-experiments.com/2011/01/07/2010-visual-experiments/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 16:01:17 +0000</pubDate>
		<dc:creator>Henri</dc:creator>
				<category><![CDATA[augmented reality]]></category>
		<category><![CDATA[ogre3d]]></category>
		<category><![CDATA[photogrammetry]]></category>
		<category><![CDATA[photosynth]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[artoolkit]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[cuda]]></category>
		<category><![CDATA[gpusurf]]></category>
		<category><![CDATA[opencl]]></category>
		<category><![CDATA[visual experiments]]></category>
		<guid isPermaLink="false">http://www.visual-experiments.com/?p=1254</guid>
		<description><![CDATA[Happy new year everyone! 2010 was a year full of visual experiments for me, I hope that you like what you see on this blog. In this post I&#8217;m making a little overview of all visual experiments created by me during this year. This is an opportunity to catch-up something you&#8217;ve missed! I&#8217;d like also [...]]]></description>
			<content:encoded><![CDATA[<h3>Happy new year everyone!</h3>
<p>2010 was a year full of <a href="http://www.visual-experiments.com/">visual experiments</a> for <a href="http://www.visual-experiments.com/about/resume-english/">me</a>, I hope that you like what you see on this blog. In this post I&#8217;m making a little overview of all visual experiments created by me during this year. This is an opportunity to catch-up something you&#8217;ve missed! I&#8217;d like also to thanks some person that have been helping me too: </p>
<ul style="margin-left: 20px;">
<li><strong>Olafur Haraldsson:</strong> for creating <a href="http://www.pgrammetry.com/">the photogrammetry forum</a></li>
<li><strong>Josh Harle:</strong> for his videos tutorials and <a href="http://blog.neonascent.net/">his nice blog</a></li>
<li><strong>You:</strong> for reading this <img src='http://www.visual-experiments.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
</ul>
<h3>Visual experiments created in 2010:</h3>
<p>During this year I have added some features to <strong>Ogre3D</strong>: </p>
<ul style="margin-left: 20px;">
<li><a href="http://www.visual-experiments.com/demos/artoolkitplus-for-ogre3d/">ArToolKitPlus</a>: augmented reality marker-based system</li>
<li><a href="http://www.visual-experiments.com/demos/ogrecuda/">Cuda</a>: for beginner only (at least advanced user could grab some useful code)</li>
<li><a href="http://www.visual-experiments.com/demos/ogreopencl/">OpenCL</a>: for beginner only (at least advanced user could grab some useful code)</li>
<li><a href="http://www.visual-experiments.com/demos/ogrecanvas/">Html5 Canvas</a>: implementation based on <a href="http://code.google.com/p/skia/">skia</a> for graphics and <a href="http://code.google.com/p/v8/">V8</a> for javascript scripting</li>
<li><a href="http://www.visual-experiments.com/2010/11/20/kinect-experiment-with-ogre3d/">Kinect</a>: this is a very hacky solution, I&#8217;ll improve it later</li>
</ul>
<p>I also have learned <strong>GPGPU programming</strong> by myself while coding a partial <a href="http://www.visual-experiments.com/demos/gpusurf/">GPUSurf</a> implementation based on Nico Cornelis paper. But this implementation is not complete and I&#8217;m willing to rewrite it with a GPGPU framework based on OpenGL and CG only (not Ogre3D). With such a framework writing Sift/Surf detector should be easier and more efficient.</p>
<p>I have created some visual experiments related to <strong>Augmented Reality</strong>:</p>
<ul style="margin-left: 20px;">
<li><a href="http://www.visual-experiments.com/2010/07/11/remote-augmented-reality-prototype/">Remote AR prototype</a></li>
<li><a href="http://www.visual-experiments.com/2010/12/13/augmented-reality-outdoor-tracking-becoming-reality/">Outdoor 3D tracking using point cloud generated by structure from motion software</a></li>
<li><a href="http://www.visual-experiments.com/2010/12/22/outdoor-tracking-using-panoramic-image/">Outdoor 2D tracking using panorama image</a></li>
</ul>
<p>My outdoor 3D tracking algorithm for augmented reality needs an accurate point cloud: this is why I&#8217;m interested in <strong>structure from motion</strong> and I&#8217;ve created two SfM toolkit:</p>
<ul style="margin-left: 20px;">
<li><a href="http://www.visual-experiments.com/sfmtoolkit/">SFMToolkit</a> (SiftGPU -> Bundler -> CMVS -> PMVS2)</li>
<li><a href="http://www.visual-experiments.com/photosynthtoolkit/">PhotoSynthToolkit</a> (PhotoSynth -> PMVS2)</li>
</ul>
<h3>Posts published in 2010:</h3>
<ul style="margin-left: 20px;">
<li>2010/12/22: <a href="http://www.visual-experiments.com/2010/12/22/outdoor-tracking-using-panoramic-image/">Outdoor tracking using panoramic image</a></li>
<li>2010/12/20: <a href="http://www.visual-experiments.com/2010/12/20/structure-from-motion-projects/">Structure from motion projects</a></li>
<li>2010/12/13: <a href="http://www.visual-experiments.com/2010/12/13/augmented-reality-outdoor-tracking-becoming-reality/">Augmented Reality outdoor tracking becoming reality</a></li>
<li>2010/11/20: <a href="http://www.visual-experiments.com/2010/11/20/kinect-experiment-with-ogre3d/">Kinect experiment with Ogre3D</a></li>
<li>2010/11/19: <a href="http://www.visual-experiments.com/2010/11/19/photosynthtoolkit-results/">PhotoSynthToolkit results</a></li>
<li>2010/11/09: <a href="http://www.visual-experiments.com/2010/11/09/photosynth-toolkit-updated/">PhotoSynth Toolkit updated</a></li>
<li>2010/11/05: <a href="http://www.visual-experiments.com/2010/11/05/structure-from-motion-toolkit-released/">Structure From Motion Toolkit released</a></li>
<li>2010/09/27: <a href="http://www.visual-experiments.com/2010/09/27/my-5-years-old-quiksee-competitor/">My 5 years old Quiksee competitor</a></li>
<li>2010/09/23: <a href="http://www.visual-experiments.com/2010/09/23/pmvs2-x64-and-videos-tutorials/">PMVS2 x64 and videos tutorials</a></li>
<li>2010/09/08: <a href="http://www.visual-experiments.com/2010/09/08/introducing-opensynther/">Introducing OpenSynther</a></li>
<li>2010/08/22: <a href="http://www.visual-experiments.com/2010/08/22/dense-point-cloud-created-with-photosyth-and-pmvs2/">Dense point cloud created with PhotoSynth and PMVS2</a></li>
<li>2010/08/19: <a href="http://www.visual-experiments.com/2010/08/19/my-photosynth-toolkit/">My PhotoSynth ToolKit</a></li>
<li>2010/07/12: <a href="http://www.visual-experiments.com/2010/07/12/pose-estimation-using-sfm-point-cloud/">Pose Estimation using SfM point cloud</a></li>
<li>2010/07/11: <a href="http://www.visual-experiments.com/2010/07/11/remote-augmented-reality-prototype/">Remote Augmented Reality Prototype</a></li>
<li>2010/07/08: <a href="http://www.visual-experiments.com/2010/07/08/structure-from-motion-experiment/">Structure From Motion Experiment</a></li>
<li>2010/06/25: <a href="http://www.visual-experiments.com/2010/06/25/gpu-surf-video-demo/">GPU-Surf video demo</a></li>
<li>2010/06/23: <a href="http://www.visual-experiments.com/2010/06/23/gpusurf-and-ogregpgpu/">GPUSurf and Ogre::GPGPU</a></li>
<li>2010/06/20: <a href="http://www.visual-experiments.com/2010/06/20/ogrecanvas-a-2d-api-for-ogre3d/">Ogre::Canvas, a 2D API for Ogre3D</a></li>
<li>2010/05/09: <a href="http://www.visual-experiments.com/2010/05/09/ogreopencl-and-ogrecanvas/">Ogre::OpenCL and Ogre::Canvas</a></li>
<li>2010/04/26: <a href="http://www.visual-experiments.com/2010/04/26/cuda-integration-with-ogre3d/">Cuda integration with Ogre3D</a></li>
<li>2010/04/09: <a href="http://www.visual-experiments.com/2010/04/09/multitouch-prototype-done-using-awesomium-and-ogre3d/">Multitouch prototype done using Awesomium and Ogre3D</a></li>
<li>2010/03/05: <a href="http://www.visual-experiments.com/2010/03/05/artoolkitplus-integration-with-ogre3d/">ArToolKitPlus integration with Ogre3D</a></li>
<li>2010/02/20: <a href="http://www.visual-experiments.com/2010/02/20/hello-world/">Hello World !</a></li>
</ul>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.visual-experiments.com%2F2011%2F01%2F07%2F2010-visual-experiments%2F&amp;title=2010%20visual%20experiments"><img src="http://www.visual-experiments.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.visual-experiments.com/2011/01/07/2010-visual-experiments/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Outdoor tracking using panoramic image</title>
		<link>http://www.visual-experiments.com/2010/12/22/outdoor-tracking-using-panoramic-image/</link>
		<comments>http://www.visual-experiments.com/2010/12/22/outdoor-tracking-using-panoramic-image/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 13:10:29 +0000</pubDate>
		<dc:creator>Henri</dc:creator>
				<category><![CDATA[augmented reality]]></category>
		<category><![CDATA[ogre3d]]></category>
		<category><![CDATA[opencv]]></category>
		<category><![CDATA[sift]]></category>
		<guid isPermaLink="false">http://www.visual-experiments.com/?p=1167</guid>
		<description><![CDATA[I have made this experiment in 2 days: First of all, I must admit that this is more a &#8220;proof-of-concept&#8221; rather than a prototype&#8230; But the goal was to illustrate a concept needed for my job. I love this kind of challenge! Building something like this in 2 days was only possible thanks to great [...]]]></description>
			<content:encoded><![CDATA[<p>I have made this experiment in 2 days:</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/ZmbP022QXpk?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ZmbP022QXpk?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p>First of all, I must admit that this is more a &#8220;proof-of-concept&#8221; rather than a prototype&#8230; But the goal was to illustrate a concept needed for my job. I love this kind of challenge! Building something like this in 2 days was only possible thanks to great open-source library:</p>
<ul style="margin-left: 20px;">
<li><a href="http://www.ogre3d.org/">Ogre3D</a> (MIT)</li>
<li><a href="http://opencv.willowgarage.com/wiki/">OpenCV</a> (BSD)</li>
<li><a href="http://www.cs.unc.edu/~ccwu/siftgpu/">SiftGPU</a> (non-profit license)</li>
</ul>
<h3>Analysis</h3>
<p>I&#8217;m using a panoramic image as reference. For each frame of the video I&#8217;m extracting Sift feature using SiftGPU and matching them with those of the reference image. Then I&#8217;m computing the homography between the 2 images using Ransac homography estimator (OpenCV cvFindHomography).</p>
<h3>Performance</h3>
<p>The performance are low due to complexity of the Sift detection and matching and that I&#8217;m applying the homography using cvWarpPerspective.</p>
<style type="text/css">
table.result {
color: black;
border: 1px solid black;
}
table.result td {
text-align: left;
padding: 1px;
}
</style>
<table class="result">
<tr>
<td>Sift extraction:</td>
<td>28ms</td>
<td>1228 features</td>
</tr>
<tr>
<td>Sift matching:</td>
<td>17ms</td>
<td>using SiftGPU</td>
</tr>
<tr>
<td>Ransac Homography estimation:</td>
<td>2ms</td>
<td>89 inliers of 208 matches</td>
</tr>
<tr>
<td>Homography application:</td>
<td>36ms</td>
<td>done on the CPU with OpenCV</td>
</tr>
<tr>
<td colspan="3">Global: 12fps</td>
</tr>
</table>
<div style="height: 20px;">&nbsp;</div>
<p>I&#8217;m working on another version using <a href="http://svr-www.eng.cam.ac.uk/~er258/work/fast.html">Fast</a> (or <a href="http://www6.in.tum.de/Main/ResearchAgast">Agast</a>) as feature detector and <a href="http://cvlab.epfl.ch/software/brief/index.php">Brief</a> as descriptor. This should lead to a significant speed-up and may eventually run on a mobile&#8230; Using the GPU vertex and pixel shader instead of the CPU to apply the homography should also gives a nice speed-up.</p>
<p>I&#8217;m also aware that it is not correct to apply an homography on a cylindric panoramic image (especially if you don&#8217;t undistort the input video frame too <img src='http://www.visual-experiments.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.visual-experiments.com%2F2010%2F12%2F22%2Foutdoor-tracking-using-panoramic-image%2F&amp;title=Outdoor%20tracking%20using%20panoramic%20image"><img src="http://www.visual-experiments.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.visual-experiments.com/2010/12/22/outdoor-tracking-using-panoramic-image/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Pose Estimation using SfM point cloud</title>
		<link>http://www.visual-experiments.com/2010/07/12/pose-estimation-using-sfm-point-cloud/</link>
		<comments>http://www.visual-experiments.com/2010/07/12/pose-estimation-using-sfm-point-cloud/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 08:42:14 +0000</pubDate>
		<dc:creator>Henri</dc:creator>
				<category><![CDATA[augmented reality]]></category>
		<category><![CDATA[ogre3d]]></category>
		<category><![CDATA[bundler]]></category>
		<category><![CDATA[gpusurf]]></category>
		<category><![CDATA[pose estimation]]></category>
		<category><![CDATA[sift]]></category>
		<category><![CDATA[structure from motion]]></category>
		<guid isPermaLink="false">http://www.visual-experiments.com/?p=600</guid>
		<description><![CDATA[The idea of this pose estimator is based on PTAM (Parallel Tracking and Mapping). PTAM is capable of tracking in an unknown environment thanks to the mapping done in parallel. But in fact if you want to augment reality, it&#8217;s generally because you already know what you are looking at. So, being able to have [...]]]></description>
			<content:encoded><![CDATA[<p>The idea of this pose estimator is based on <a href="http://www.robots.ox.ac.uk/~gk/PTAM/">PTAM</a> <em>(Parallel Tracking and Mapping)</em>. PTAM is capable of tracking in an unknown environment thanks to the mapping done in parallel. But in fact if you want to augment reality, it&#8217;s generally because you already know what you are looking at. So, being able to have a tracking working in an unknown environment is not always needed. My idea was simple: <strong>instead of doing a mapping in parallel, why not using SFM in a pre-processing step ?</strong></p>
<table>
<tbody style="background-color: white">
<tr>
<td colspan="2"><img src="http://www.visual-experiments.com/blog/wp-content/uploads/2010/07/sfm.pose_.estimation.png" alt="" title="sfm.pose.estimation" width="571" height="258" class="alignnone size-full wp-image-621" /></td>
</tr>
<tr>
<td>input: point cloud + camera shot</td>
<td>output: position and orientation of the camera</td>
</tr>
</tbody>
</table>
<div style="height: 10px"></div>
<p>So my outdoor tracking algorithm will eventually work like this:</p>
<ul style="margin-left: 20px">
<li>pre-processing step
<ul style="margin-left: 20px">
<li>generate a point cloud of the outdoor scene you want to track using Bundler</li>
<li>create a binary file with a descriptor <em>(Sift/Surf)</em> per vertex of the point cloud</li>
</ul>
</li>
<li>in real-time, for each frame N:
<ul style="margin-left: 20px">
<li>extract feature using <a href="http://mi.eng.cam.ac.uk/~er258/work/fast.html">FAST</a></li>
<li>match feature from frame N-1 using 2D patch</li>
<li>compute <strong>&#8220;relative pose&#8221;</strong> between frame N and N-1</li>
</ul>
</li>
<li>in almost real-time, for each &#8220;key frame&#8221;:
<ul style="margin-left: 20px">
<li>extract feature and descriptor</li>
<li>match descriptor with those of the point cloud</li>
<li>generate 2D/3D correspondence from matches</li>
<li>compute <strong>&#8220;absolute pose&#8221;</strong> using PnP solver <em>(<a href="http://cvlab.epfl.ch/software/EPnP/">EPnP</a>)</em></li>
</ul>
</li>
</ul>
<p>The tricky part is that absolute pose computation could last several &#8220;relative pose&#8221; estimation. So once you&#8217;ve got the absolute pose you&#8217;ll have to compensate the delay by cumulating the previous relative pose&#8230;</p>
<p>This is what I&#8217;ve got so far:</p>
<ul style="margin-left: 20px">
<li><strong>pre-processing step:</strong> binary file generated using SiftGPU (planning to move on my GPUSurf implementation) and Bundler (planning to move on <a href="http://insight3d.sourceforge.net/">Insight3D</a> or implement it myself using <a href="http://www.ics.forth.gr/~lourakis/sba/index.html">sba</a>)</li>
<li><strong>relative pose:</strong> I don&#8217;t have an implementation of the relative pose estimator</li>
<li><strong>absolute pose:</strong> it&#8217;s basically working but needs some improvements:
<ul style="margin-left: 20px">
<li>switch feature extraction/matching from Sift to Surf</li>
<li>remove unused descriptors to speed-up maching step (by scoring descriptors used as inlier with training data)</li>
<li>use another PnP solver (or add ransac to support outliers and have more accurate results)</li>
</ul>
</li>
</ul>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.visual-experiments.com%2F2010%2F07%2F12%2Fpose-estimation-using-sfm-point-cloud%2F&amp;title=Pose%20Estimation%20using%20SfM%20point%20cloud"><img src="http://www.visual-experiments.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.visual-experiments.com/2010/07/12/pose-estimation-using-sfm-point-cloud/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
