<?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; pose estimation</title>
	<atom:link href="http://www.visual-experiments.com/tag/pose-estimation/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>PhotoSynth viewer with pose estimator WebService</title>
		<link>http://www.visual-experiments.com/2011/08/08/photosynth-viewer-with-pose-estimator-webservice/</link>
		<comments>http://www.visual-experiments.com/2011/08/08/photosynth-viewer-with-pose-estimator-webservice/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 13:02:10 +0000</pubDate>
		<dc:creator>Henri</dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[photogrammetry]]></category>
		<category><![CDATA[photosynth]]></category>
		<category><![CDATA[pose estimation]]></category>
		<category><![CDATA[Read/Write World]]></category>
		<category><![CDATA[three.js]]></category>
		<category><![CDATA[webgl]]></category>
		<guid isPermaLink="false">http://www.visual-experiments.com/?p=1887</guid>
		<description><![CDATA[I&#8217;ve spent 2 days implementing a WebService in C++. I&#8217;ve lost 1 day trying to use WebSocket (this wasn&#8217;t a good idea as Firefox and Google Chrome were not implementing the same version). I&#8217;ve also lost a lot of time with the beautiful drag and drop API&#8230; who is responsible for this mess? Anyway I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve spent 2 days implementing a WebService in C++. I&#8217;ve lost 1 day trying to use WebSocket (this wasn&#8217;t a good idea as Firefox and Google Chrome were not implementing the same version). I&#8217;ve also lost a lot of time with the beautiful drag and drop API&#8230; who is responsible for <a href="http://www.quirksmode.org/blog/archives/2009/09/the_html5_drag.html">this mess</a>? Anyway I&#8217;ve managed to create this cool demo:</p>
<p><iframe width="560" height="349" src="http://www.youtube.com/embed/vFVwmLucyb4" frameborder="0" allowfullscreen></iframe></p>
<p>The principle is very simple: the user drag and drop an unknown picture on the webpage. The picture is resized on the client side using canvas and then sent to the webservice using a classic POST Ajax call with the picture sent in jpeg base64. Then the pose estimator web service try to compute the pose and send an xml response. Then the pose is applied to the <a href="https://github.com/mrdoob/three.js/">Three.js</a> camera used in my <a href="http://www.visual-experiments.com/2011/07/21/google-chrome-photosynth-viewer-using-three-js/">PhotoSynth viewer</a>.</p>
<p>I have cheated a little as I&#8217;ve used shots of a video with known intrinsic parameters. But I&#8217;ve two options to handle really unknown pictures:</p>
<ul style="margin-left: 20px;">
<li>If the jpeg as Exif I can use it to find the focal (using a CCD database and a <a href="http://blog.nihilogic.dk/2008/05/reading-exif-data-with-javascript.html">JS Exif parser</a>)</li>
<li>Otherwise I am planning to implement <a href="http://cmp.felk.cvut.cz/minimal/p4pfr.php">this</a> in C++</li>
</ul>
<p>I hope you enjoy this demo as much as I do and that Google and Microsoft are working in that direction too (especially Microsoft with <a href="http://readwriteworld.cloudapp.net/">Read/Write World</a>&#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%2F08%2F08%2Fphotosynth-viewer-with-pose-estimator-webservice%2F&amp;title=PhotoSynth%20viewer%20with%20pose%20estimator%20WebService"><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/08/08/photosynth-viewer-with-pose-estimator-webservice/feed/</wfw:commentRss>
		<slash:comments>4</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>
