<?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>frankevers.nl</title>
	<atom:link href="http://www.frankevers.nl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.frankevers.nl</link>
	<description>sharing computer sciencey experimentations</description>
	<lastBuildDate>Wed, 04 Apr 2012 10:19:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Pose estimation in the Restaurant of the Future</title>
		<link>http://www.frankevers.nl/2012/03/pose-estimation-in-the-restaurant-of-the-future/</link>
		<comments>http://www.frankevers.nl/2012/03/pose-estimation-in-the-restaurant-of-the-future/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 17:54:28 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[computer vision]]></category>
		<category><![CDATA[game & media]]></category>

		<guid isPermaLink="false">http://www.frankevers.nl/?p=109</guid>
		<description><![CDATA[My master thesis project is finished! The thesis has been written and I present here the abstract and some of the results. Abstract This thesis presents the research that has been done on a framework for people tracking in 3D, which is under the supervision of Nico van der Aa and Robby T. Tan. We developed this framework as ]]></description>
			<content:encoded><![CDATA[<p><strong>My master thesis project is finished! The thesis has been written and </strong><strong>I present here the abstract and some of the results.<br />
</strong></p>
<h2>Abstract</h2>
<p>This thesis presents the research that has been done on a framework for people tracking in 3D, which is under the supervision of <a href="http://www.cs.uu.nl/staff/nico.html">Nico van der Aa</a> and <a href="http://www.staff.science.uu.nl/~tan00109/">Robby T. Tan</a>. We developed this framework as a potential product for Noldus IT to evaluate human behaviour in the Restaurant of the Future. We focus on three different aspects in the framework: steering pan-tilt-zoom cameras, calibrating these cameras and detecting people and estimating their body poses.</p>
<p>We evaluated the functionality of pan-tilt-zoom cameras to see whether they can be used to their full potential in a tracking framework. We concluded that the image quality, even when panning or tilting at a speed which captures walking people, is sufficient for pose estimation. A major disadvantage of the PTZ camera is that its accuracy is not high enough for it to be used in our framework. The camera can be in a different position and produce different images even though it has been sent to the same pan-tilt-zoom state.</p>
<p>We researched the calibration of static cameras using Zhang&#8217;s method [1] and concluded that the convergence of internal parameters is questionable. After that, we looked at auto-calibration techniques such as [2, 3, 4, 5], to keep the cameras calibrated throughout their on-line pan, tilt and zoom movements. We did not find an auto calibration method immediately suitable for our framework but we did find interesting approaches that could potentially fulfill this task. In order for this to work we would have to create a 3D model of the scene beforehand.</p>
<p>In order to estimate the poses of the people in the scene, we made use of the Pictorial Structures framework presented in [6]. We evaluated the accuracy of the method on different datasets and identified its strengths and weaknesses. We showed that the amount of correctly estimated bodyparts on different datasets is around 55\%. Though, the method is too slow to be used in our real-time framework as it takes around 90 minutes on an average PC for a pose estimation on the images produced by our PTZ cameras. We showed that the method could be sped up around 60 times using a faster detection algorithm, at the cost of around 18\% accuracy. Still, the pose estimation will take more than a minute thus other speed ups will have to be found to be able to use it in our framework.</p>
<h2></h2>
<h2>System Pipeline</h2>
<p><a href="http://www.frankevers.nl/wp-content/uploads/2012/03/pipeline.png"><img class="aligncenter size-full wp-image-125" title="pipeline" src="http://www.frankevers.nl/wp-content/uploads/2012/03/pipeline.png" alt="" width="400" height="479" /></a></p>
<h2></h2>
<h2>Steering</h2>
<p>This video demonstrates automatic pan-tilt-zoom steering over an IP network based on tracking results.<br />
<iframe src='http://player.vimeo.com/video/25667397?title=1&amp;byline=1&amp;portrait=1' width='550' height='309' frameborder='0'></iframe></p>
<p>&nbsp;</p>
<h2>Calibration</h2>
<p>Keeping cameras calibrated throughout an online panning, tilting and zooming stage, in order to track people and keep them in the view, requires more accurate steering than is possible with state-of-the-art PTZ cameras. A difference as small as between these images:</p>
<p><a href="http://www.frankevers.nl/wp-content/uploads/2012/03/good.jpg"><img class="aligncenter size-full wp-image-124" title="good" src="http://www.frankevers.nl/wp-content/uploads/2012/03/good.jpg" alt="" width="251" height="251" /><img class="aligncenter size-full wp-image-123" title="bad" src="http://www.frankevers.nl/wp-content/uploads/2012/03/bad.jpg" alt="" width="251" height="251" /></a></p>
<p>results in a 3D reconstruction as far off as seen here:<br />
<iframe src='http://player.vimeo.com/video/38026909?title=1&amp;byline=1&amp;portrait=1' width='550' height='309' frameborder='0'></iframe></p>
<p>&nbsp;</p>
<h2>Pose Estimation</h2>
<p>Using a Windows version of the available code from [2], we obtained the following results:</p>
<p><a href="http://www.frankevers.nl/wp-content/uploads/2012/03/pose5.png"><img class="aligncenter size-full wp-image-129" title="pose5" src="http://www.frankevers.nl/wp-content/uploads/2012/03/pose5.png" alt="" width="170" height="201" /></a><a href="http://www.frankevers.nl/wp-content/uploads/2012/03/pose4.png"><img class="aligncenter size-full wp-image-128" title="pose4" src="http://www.frankevers.nl/wp-content/uploads/2012/03/pose4.png" alt="" width="170" height="281" /></a><a href="http://www.frankevers.nl/wp-content/uploads/2012/03/pose2.png"><img class="aligncenter size-full wp-image-127" title="pose2" src="http://www.frankevers.nl/wp-content/uploads/2012/03/pose2.png" alt="" width="219" height="212" /></a><a href="http://www.frankevers.nl/wp-content/uploads/2012/03/pose1.png"><img class="aligncenter size-full wp-image-126" title="pose1" src="http://www.frankevers.nl/wp-content/uploads/2012/03/pose1.png" alt="" width="141" height="281" /></a></p>
<h2>References</h2>
<p>[1] Z. Zhang. &#8211; A Flexible new technique for camera calibration. IEEE PAMI, 22:1330-1334, 1998.<br />
[2] B. Micusik and T. Pajdla. &#8211; Simultaneous surveillance camera calibration and foot-head homology estimation from human detections. CVPR, 2010.<br />
[3] A. Sinha and M. Pollefeys. &#8211; Pan-tilt-zoom camera calibration and high-resolution mosaic generation. Computer Vision and Image Understanding, 103:170-183, 2006.<br />
[4] S. Sinha, M. Pollefeys, and L. McMillan. &#8211; Camera network calibration from dynamic silhouettes. CVPR, 2004.<br />
[5] L. Wang, S. You, and U. Neumann. &#8211; PTZ camera calibration for augmented virtual environments. In IEEE International Conference on Multimedia and Expo, 2009<br />
[6] M. Andriluka, S. Roth, and B. Schiele. &#8211; Pictorial structures revisited: People detection and articulated pose estimation. CVPR, 2009</p>
<p><a title="Official master thesis project page" href="http://www.staff.science.uu.nl/~tan00109/student/2012_m_frank/" target="_blank">Official master thesis project page</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frankevers.nl/2012/03/pose-estimation-in-the-restaurant-of-the-future/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Tracking and PTZ Steering</title>
		<link>http://www.frankevers.nl/2012/01/simple-tracking-and-ptz-steering/</link>
		<comments>http://www.frankevers.nl/2012/01/simple-tracking-and-ptz-steering/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 14:13:57 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[no category]]></category>

		<guid isPermaLink="false">http://www.frankevers.nl/?p=101</guid>
		<description><![CDATA[&#160; As a small part of my graduation I worked with PTZ cameras. To demonstrate steering over HTTP/IP using the Axis VAPIX API I have created a small application that can track an orange object (a Wuppie) and steers the camera accordingly. &#160; The whole video can be seen here:  http://vimeo.com/25667397. It might be interesting ]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>As a small part of my graduation I worked with PTZ cameras. To demonstrate steering over HTTP/IP using the Axis VAPIX API I have created a small application that can track an orange object (a Wuppie) and steers the camera accordingly.</p>
<div id="attachment_102" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.frankevers.nl/wp-content/uploads/2012/01/image0160.jpg"><img class="size-medium wp-image-102" title="SteeringDemo frame" src="http://www.frankevers.nl/wp-content/uploads/2012/01/image0160-300x245.jpg" alt="PTZ Camera is tracking" width="300" height="245" /></a><p class="wp-caption-text">PTZ Camera is tracking orange object</p></div>
<p>&nbsp;</p>
<p>The whole video can be seen here:  <a title="Tracking and PTZ steering Axis IP camera" href="http://vimeo.com/25667397">http://vimeo.com/25667397</a>. It might be interesting for anyone trying to steer PTZ cameras through c++ code. This one works on Microsoft Windows using COM-interfaces provided by <a title="Axis" href="http://www.axis.com/">Axis</a>. It uses <a title="CURL" href="http://curl.haxx.se/">CURL </a>to send commands over HTTP and <a title="OpenCV" href="http://opencv.willowgarage.com/wiki/">OpenCV </a>to visualize.</p>
<p><a title="Source code is available here" href="http://www.frankevers.nl/files/trackingDemo.zip">Source code is available here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.frankevers.nl/2012/01/simple-tracking-and-ptz-steering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pictorial Structures by M. Andriluka</title>
		<link>http://www.frankevers.nl/2011/09/pictorial-structures-by-m-andriluka/</link>
		<comments>http://www.frankevers.nl/2011/09/pictorial-structures-by-m-andriluka/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 09:30:20 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[no category]]></category>

		<guid isPermaLink="false">http://www.frankevers.nl/?p=81</guid>
		<description><![CDATA[At the moment I am working with a program created by Mykhaylo Andriluka that is able to detect people in images in order to estimate their poses using a method called Pictorial Structures. The program is downloadable from his website but is not easy to compile and run. Here is what I did in order to get ]]></description>
			<content:encoded><![CDATA[<p>At the moment I am working with a program created by <a title="Mykhaylo Andriluka (Post-Doc)" href="http://www.d2.mpi-inf.mpg.de/People/andriluka" target="_blank">Mykhaylo Andriluka</a> that is able to detect people in images in order to estimate their poses using a method called Pictorial Structures. The program is downloadable from his website but is not easy to compile and run. Here is what I did in order to get it to work so that it might help someone else too.</p>
<h2>How to compile the program</h2>
<p>At first, download the code and experiments from <a href="http://www.d2.mpi-inf.mpg.de/node/381">http://www.d2.mpi-inf.mpg.de/node/381</a>. I am currently running Microsoft Windows, so I created a Mint Linux virtual machine using Oracle VM VirtualBox. A fresh install is always good to see what dependencies are needed. Following the README.txt accompanying the code I first installed QT, Boost, Matlab and Google Protocol Buffers. The PNG libraries, libboost-program-options-dev and libstdc++5 were also needed but not stated in the README.</p>
<pre>sudo apt-get install libqt4-dev
sudo apt-get install libpng++-dev
sudo apt-get install libboost-program-options-dev
sudo apt-get install libstdc++5
sudo apt-get install libstdc++5-dev</pre>
<p>Matlab version is 7 R14. Google Protocol Buffers version 2.3.0.</p>
<p>Following the README I continued to create symlinks to the library and include directories like this:</p>
<pre>  ln -s /home/frank/andriluka/matlab/extern/include/ include_mat
  ln -s /home/frank/andriluka/matlab/bin/glnx86/ lib_mat
  ln -s /usr/local/include/google/protobuf/ include_pb
  ln -s /usr/local/lib/ lib_pb</pre>
<p>The installed directory for the application is /home/frank/andriluka/partapp-r2 and these commands were run from there. Next step is to go into the src/libs and src/apps dir and run qmake; make. This was not working right away as there were some problems with the code. This is what I ran into and how I solved it:</p>
<pre>Problem I:
../libKMA2/gauss_iir/../ImageContent/imageContent.h:25:17: fatal error: png.h:
No such file or directory

Solution:
sudo apt-get install libpng++-dev

Problem II:
../libAdaBoost/AdaBoost.h:128:20: error: ‘uint’ was not declared in this scope

Solution:
#include &lt;sys/types.h&gt;
In Adaboost.h:22 

Problem III:
../libMatlabIO/matlab_cell_io.hpp:65:17: error: ‘mwIndex’ was not declared in this scope
matlab_io.hpp:87:5: error: ‘mwSize’ was not declared in this scope

Solution (hack?):
In matlab file matrix.h
#define mwSize int
#define mwIndex int

Problem IV:
../libAnnotation/annorect.h: In member function ‘int AnnoRect::w() const’:
../libAnnotation/annorect.h:72:38: error: ‘abs’ was not declared in this scope

Solution:
In annorect.h:
#include &lt;stdlib.h&gt;

Problem V:
ImageContent/ImageContent.cpp:383:21: error: ‘atoi’ was not declared in this scope

Solution:
In imageContent.h:
#include &lt;stdlib.h&gt;

Problem VI:
kmaimagecontent.h:74:52: error: ‘strcpy’ was not declared in this scope

Solution:
kmaimagecontenmat.h
#include &lt;string.h&gt;

Probleem VII:
annotation.cpp:251:69: error: ‘stable_sort’ was not declared in this scope

Solution:
#include &lt;algorithm&gt;
In annotation.h 

Probleem VIII:
xmlhelpers.cpp:48:33: error: ‘atoi’ was not declared in this scope

Solution:
xmlhelpers.h:
#include &lt;string.h&gt;

Problem IX:
/usr/bin/ld: cannot find -lboost_program_options

Solution:
; sudo apt-get install libboost-program-options-dev

Problem X:
../../../lib/Release/libPartDetect.so: undefined reference to `mxCreateCellArray'
../../../lib/Release/libPartDetect.so: undefined reference to `mxIsCell'
../../../lib/Release/libMatlabIO.so: undefined reference to `mxCreateNumericArray@v7.0'
../../../lib/Release/libMatlabIO.so: undefined reference to `mxIsSingle@v7.0'
../../../lib/Release/libPartDetect.so: undefined reference to `mxGetCell'
../../../lib/Release/libMatlabIO.so: undefined reference to `matPutVariable@v7.0'
../../../lib/Release/libMatlabIO.so: undefined reference to `mxGetPr@v7.0'
../../../lib/Release/libPartDetect.so: undefined reference to `matPutVariable'
../../../lib/Release/libMatlabIO.so: undefined reference to `mxDestroyArray@v7.0'
../../../lib/Release/libMatlabIO.so: undefined reference to `matClose@v7.0'
../../../lib/Release/libMatlabIO.so: undefined reference to `matOpen@v7.0'
../../../lib/Release/libMatlabIO.so: undefined reference to `mxGetDimensions@v7.0'
../../../lib/Release/libMatlabIO.so: undefined reference to `matGetNextVariable@v7.0'
../../../lib/Release/libPartDetect.so: undefined reference to `mxSetCell'
../../../lib/Release/libMatlabIO.so: undefined reference to `mxGetNumberOfDimensions@v7.0'
../../../lib/Release/libPartDetect.so: undefined reference to `mxCreateNumericArray'
../../../lib/Release/libPartDetect.so: undefined reference to `mxCalcSingleSubscript'
together with this:
/usr/bin/ld: warning: libmx.so, needed by ../../../lib/Release/libMatlabIO.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libmat.so, needed by ../../../lib/Release/libMatlabIO.so, not found (try using -rpath or -rpath-link)

Solution:
I think the linker has a problem because these things are not in the library path. When I add include dir to it
; LD_LIBRARY_PATH=/home/frank/andriluca/matlab/extern/include it gives same errors
When I add matlab lib dir, as I think it should be since this dir has got the libmat.so in it, I get:
export LD_LIBRARY_PATH=/home/frank/andriluca/matlab/bin/glnx86/
/usr/bin/ld: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory

So this is a new problem. I get this when I run any program too, gvim gives same error... This path must be wrong. Nope, I think it's a libstdc++ version
dependency problem. libmat and libmx from the matlab are depending on libstdc++.so.5 and I think I'm using 6.

New plan:
; sudo apt-get install libstdc++5
; export LD_LIBRARY_PATH=/home/frank/andriluca/matlab/bin/glnx86/
It seems to compile with warning about 5/6 version problem now.

Problem XI:
Now a system wide problem is this:
/home/frank/andriluca/matlab/bin/glnx86/libz.so.1: no version information
available (required by /usr/lib/libbfd-2.21.0-system.20110327.so)
So I think that the libs in the matlab thing are interfering with my system now. 

Solution:
I will remove LD_LIBRARY_PATH for now again and only add it when compiling this program</pre>
<p>The program is now working. Go into the code_test directory to test (following the README):</p>
<pre>Test the compiled code
- Issue the following commands in the code_test subdictory:
   ../run_partapp.sh --expopt ./expopt/exp_code_test.txt --part_detect --find_obj
   ../run_partapp.sh --expopt ./expopt/exp_code_test.txt --eval_segments
   This will estimate part positions on several example images and visualize the results.
   Compare the images in the ./log_dir/exp_code_test/part_marginals/seg_eval_images with the images in ./images_result</pre>
<p>After comparing the images it seems they are very similar meaning the code works!</p>
<h2>How to run the program on your own data</h2>
<p>I am not sure how to do this yet. The commandline interface is not very user friendly. It is said that the command</p>
<pre>   ../run_partapp.sh --expopt ./expopt/exp_code_test.txt --part_detect --find_obj</pre>
<p>should be run in the code_test directory in order to create results in te directory log_dir. Though, the data that is in log_dir is being used by the application. Let&#8217;s start from the beginning:</p>
<pre>; ../run_partapp.sh
argc: 2
argv[0]: ../bin/Release/partapp
reading command line parameters
command line options::
  --help                 help message
  --expopt arg           experiment parameters
  --train_class          train part detector
  --train_bootstrap      train part detector, adding hard negative samples
  --pidx arg             0-based index of the part
  --bootstrap_prep       create bootstrapping dataset (crops of objects with
                         some background)
  --bootstrap_detect     run previously trained classifer on bootstrapping
                         images
  --bootstrap_showrects  show top negatives on bootstrapping images
  --first arg            index of first image
  --numimgs arg          number of images to process
  --part_detect          run part detector on the test set
  --find_obj             find_obj
  --pc_learn             estimate prior on part configurations with maximum
                         likelihood
  --save_res             save object recognition results in al/idl formats
  --eval_segments        evaluate part localization according to Ferrari's
                         criteria
  --distribute           split processing into multiple chunks, keep track of
                         the chunks which must be processed
  --ncpu arg             number of chunks
  --batch_num arg        current chunk
  --vis_parts            visualize ground-truth part positions</pre>
<p>From here, let&#8217;s start to try and run the part detection trainer on a set of images. The images we will be training on are the training images for the Ramanan people set, they are stored in the folder ramanan_people_train_h200. I expect to start the program to train it&#8217;s appearance model on these 200 images.</p>
<pre>/home/frank/andriluka/partapp-r2/code_test2
; ../run_partapp.sh --train_class
'expopt' parameter missing</pre>
<p>Let&#8217;s see what is needed in this experiment options file. When looking at the other expopt files in partapp-experiments-r2/expopt , these are the options that I found:</p>
<pre><strong>; cat abcparams4_trainall_rounds500_shape5_sparse_jb_radius24.txt</strong>
boosting_rounds: 500
desc_size: 24
desc_step: 12
window_desc_step_ratio: 1

num_train_pos: 212
num_train_jitter: 1138
num_train_neg: 1000
num_train_bootstrap: 350

feature_type: "SHAPEv5"

<strong>; cat exp_buffy_hog_detections.txt</strong>
train_dataset: "./ramanan_train_upperbody_h180.al"
validation_dataset: "./ramanan_train_upperbody_h180.al"
test_dataset: "./buffy_hog_detections.al"

part_conf: "./part_conf6_buffy_root1.txt"
abc_param: "./abcparams4_trainall_rounds500_shape5_sparse_jb_radius24.txt"
log_dir: "./log_dir"

min_object_scale: 1.0
max_object_scale: 1.0
num_scale_steps: 1

min_part_rotation: -180
max_part_rotation: 180
num_rotation_steps: 24

flip_orientation: false

scorehist_nbins: 200
scorehist_def_pw: 10
scorehist_def_ph: 10

object_height_width_ratio: 1.2

compute_part_marginals: true
num_pose_samples: 0
strip_border_detections: 0.3</pre>
<p>&nbsp;</p>
<p>I am now trying to use the first file to see if that is the data that is needed for training. Well&#8230;. no:</p>
<pre>libprotobuf ERROR google/protobuf/text_format.cc:169] Error parsing text-format 
ExpParam: 1:16: Message type "ExpParam" has no field named "boosting_rounds".</pre>
<p>So let&#8217;s try the other file? This is not the right approach&#8230; Let&#8217;s look in the code and use expopt/exp_code_test.txt as configuration file. Oh man I would kill for a better README..</p>
<p>&lt;post not complete yet&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frankevers.nl/2011/09/pictorial-structures-by-m-andriluka/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Sparse 3D Reconstruction From Video</title>
		<link>http://www.frankevers.nl/2011/04/sparse-3d-reconstruction-from-video/</link>
		<comments>http://www.frankevers.nl/2011/04/sparse-3d-reconstruction-from-video/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 21:29:25 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[computer vision]]></category>

		<guid isPermaLink="false">http://www.frankevers.nl/?p=53</guid>
		<description><![CDATA[I have been working on a project at the university involving the reconstruction of the world as seen in a video. The goal was to see if I could implement a Structure from Motion approach and test it on a few challenging videos to see whether it works and if I had any good ideas ]]></description>
			<content:encoded><![CDATA[<p>I have been working on a project at the university involving the reconstruction of the world as seen in a video. The goal was to see if I could implement a Structure from Motion approach and test it on a few challenging videos to see whether it works and if I had any good ideas on how to improve it. The outcome was this <a title="Report On Sparse Reconstruction From Video" href="http://www.frankevers.nl/files/frank-evers-sparse-3d-reconstruction-from-video.pdf">Report On Sparse Reconstruction From Video</a>. The overall implementation succeeded, but there is still work to be done in improving the evaluation of the results and making the approach generally &#8216;better&#8217;.</p>
<p>&nbsp;</p>
<p><em><strong>Abstract: </strong>The goal of this experimentation is to do a sparse 3D reconstruction from videos without any prior knowledge on the camera calibration. Because of the large (and increasing) availability of online videos on websites such as  <a title="youtube" href="http://youtube.com">youtube</a>, it is interesting again to look at 3D reconstruction from video.The problem of estimating <a title="Structure from Motion" href="http://en.wikipedia.org/wiki/Structure_from_motion">Structure from Motion</a> (as this is called) has already been researched extensively in the past and but remains interesting to improve because of the large amount of data publicly available. With the use of this large set of online videos we would be able to automatically create 3D reconstructions of scenery all around the world. When combining this with meta-data such as title, description and GPS-coordinates, these reconstructions could be linked to actual places in the world, thus allowing for a searchable 3D earth.</em></p>
<p>To show off the most fancy results achieved with my little piece of software, here we go</p>
<div id="attachment_54" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.frankevers.nl/wp-content/uploads/2011/04/frontpage-fancyimage2.png"><img class="size-medium wp-image-54 " title="Reconstruction of the road scene" src="http://www.frankevers.nl/wp-content/uploads/2011/04/frontpage-fancyimage2-300x233.png" alt="Reconstruction of the road scene" width="300" height="233" /></a><p class="wp-caption-text">Reconstruction of the road scene</p></div>
<p>This image is a snapshot taken from the application that has done the 3D reconstruction on a scene that was originally used to demonstrate the <a title="ACTS" href="http://www.zjucvg.net/acts/acts.html">ACTS (Automatic Camera Tracking System</a>) sofware, which was mainly created by ﻿﻿<a title="Guofeng Zhang" href="http://www.cad.zju.edu.cn/home/gfzhang/">Guofeng Zhang</a>. Here is an image of the first frame of this video.</p>
<div id="attachment_55" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.frankevers.nl/wp-content/uploads/2011/04/Normal.wmv_1.png"><img class="size-medium wp-image-55" title="First frame of the video" src="http://www.frankevers.nl/wp-content/uploads/2011/04/Normal.wmv_1-300x168.png" alt="First frame of the video" width="300" height="168" /></a><p class="wp-caption-text">First frame of the video</p></div>
<p>Some of the technology and terminology used in this project (to give an idea) are: <em>Structure from Motion (SfM), Single- and Multiview Geometry, Epipolar Geometry, Triangulation, Homography, Fundamental Matrix, SIFT Feature Detection, Sparse Bundle Adjustment (SBA), Plane Fitting using RANSAC (Random Sampling)</em></p>
<p>If you are interested (for educational purposes) in the software implementation, feel free to send me a message.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frankevers.nl/2011/04/sparse-3d-reconstruction-from-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interactive b-spline drawing</title>
		<link>http://www.frankevers.nl/2011/03/interactive-b-spline-drawing/</link>
		<comments>http://www.frankevers.nl/2011/03/interactive-b-spline-drawing/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 12:31:25 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[game & media]]></category>

		<guid isPermaLink="false">http://www.frankevers.nl/?p=41</guid>
		<description><![CDATA[Made this little application (c++) that can draw cubic/quadratic uniform/non-uniform b-splines based on clicking and dragging of points. This is one of these concepts I never really got into, since it was not really necessary, but now it&#8217;s getting clear! Now, on to the non-uniform rational b-splines&#8230; hurray! a textballoon! If you want to see how ]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Made this little application (c++) that can draw cubic/quadratic uniform/non-uniform b-splines based on clicking and dragging of points. This is one of these concepts I never really got into, since it was not really necessary, but now it&#8217;s getting clear! Now, on to the non-uniform rational b-splines&#8230; hurray!</p>
<div class="mceTemp mceIEcenter" style="text-align: left;">
<dl id="attachment_43" class="wp-caption aligncenter" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://www.frankevers.nl/wp-content/uploads/2011/03/spline2.png"><img class="size-medium wp-image-43" title="b-spline 2" src="http://www.frankevers.nl/wp-content/uploads/2011/03/spline2-300x232.png" alt="b-spline 2" width="300" height="232" /></a></dt>
<dd class="wp-caption-dd">a textballoon!</dd>
</dl>
</div>
<p style="text-align: left;">If you want to see how this was done, check the <a title="bspline-drawing.zip" href="http://www.frankevers.nl/files/bspline-drawing.zip">bspline-drawing.zip</a> here (don&#8217;t expect programming beauty).</p>
<p style="text-align: left;">Some good reading on this can be found here in <a href="http://www.tsplines.com/resources/class_notes/Bezier_curves.pdf">Thomas Sederbergs&#8217; notes</a> and a good applet with demonstration here <a href="http://www.ibiblio.org/e-notes/Splines/Bezier.htm">http://www.ibiblio.org/e-notes/Splines/Bezier.htm</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frankevers.nl/2011/03/interactive-b-spline-drawing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Image Composition</title>
		<link>http://www.frankevers.nl/2010/12/image-composition/</link>
		<comments>http://www.frankevers.nl/2010/12/image-composition/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 21:17:11 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[computer vision]]></category>

		<guid isPermaLink="false">http://www.frankevers.nl/?p=15</guid>
		<description><![CDATA[Today I came across a small application which I made during my computer vision course﻿. It can place and stretch (or rectify) a selected area (a convex quadrilateral) from one image into an area in the other image.  The most important concept that is used is the Homography Matrix. This is a matrix representing the projective ]]></description>
			<content:encoded><![CDATA[<p>Today I came across a small application which I made during my <a href="http://people.cs.uu.nl/robby/teaching/computer_vision.html">computer vision course﻿</a>. It can place and stretch (or <em>rectify)</em> a selected area (a convex quadrilateral) from one image into an area in the other image.  The most important concept that is used is the <em>Homography Matrix</em>. This is a matrix representing the projective transformation from one image into the other and can be found by OpenCV&#8217;s function <a href="http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html#findhomography">cvFindHomography()</a>. I believe given a set of point correspondences, a homography can be found using either a SVD approach or a RANSAC approach. The OpenCV documentation is not clear about this and just uses &#8220;<em>a regular method using all the points&#8221;,</em> for now that&#8217;s fine by me :)</p>
<p>So, onto the images!</p>
<div id="attachment_17" class="wp-caption aligncenter" style="width: 261px"><a href="http://www.frankevers.nl/wp-content/uploads/2010/12/compositor_from.png"><img class="size-medium wp-image-17" title="Compositor source image" src="http://www.frankevers.nl/wp-content/uploads/2010/12/compositor_from-251x300.png" alt="A lovely cat isn't it?" width="251" height="300" /></a><p class="wp-caption-text">Compositor source image (photo by GrandiJoos)</p></div>
<div id="attachment_18" class="wp-caption aligncenter" style="width: 300px"><a href="http://www.frankevers.nl/wp-content/uploads/2010/12/compositor_into.png"><img class="size-medium wp-image-18 " title="Compositor destination image" src="http://www.frankevers.nl/wp-content/uploads/2010/12/compositor_into-290x300.png" alt="The computer screen" width="290" height="300" /></a><p class="wp-caption-text">Compositor destination image</p></div>
<div id="attachment_19" class="wp-caption aligncenter" style="width: 300px"><a href="http://www.frankevers.nl/wp-content/uploads/2010/12/compositor_done.png"><img class="size-medium wp-image-19" title="Composited image" src="http://www.frankevers.nl/wp-content/uploads/2010/12/compositor_done-290x300.png" alt="Cat in screen?" width="290" height="300" /></a><p class="wp-caption-text">Composited image</p></div>
<p>It can be seen that the input image got stretched a lot on the bottom part. There is a preciseness parameter for which 1/preciseness determines how many times the output width (height) can be larger then the input width (height). Check out the source code for details on this. Also, try adding your own images!</p>
<p>Download the <a href="http://www.frankevers.nl/files/compositor_app.zip">source code</a> here, it has been tested on Linux only.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frankevers.nl/2010/12/image-composition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

