Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
~PhD Researcher - Vicomtech ~IK4 Research Alliance (2010-present)
<html> <a href=http://www.vicomtech.es target="_blank"><img src="./images/vicomtech.jpg"></a> </html>
~PhD Research Engineer - Grupo de Tratamiento de Imágenes (GTI) (2005-2010)
E.T.S.Ing. Telecomunicación (ETSIT)
Universidad Politécnica de Madrid (UPM)
<html> <a href=http://www.gti.ssr.upm.es target="_blank"><img src="./images/GTI.gif"></a> </html> <html> <a href=http://www.upm.es target="_blank"><img src="./images/upm.png"></a> </html>
[[Short Bio]] and [[Curriculum vitae (Long, Spanish)|http://www.gti.ssr.upm.es/~mnd/Marcos Nieto Doncel_CV.pdf]], [[Curriculum vitae (Short, English)|./Marcos Nieto Doncel_CV_Short_En.pdf]]
/***
|Name|BreadcrumbsPlugin|
|Author|Eric Shulman|
|Source|http://www.TiddlyTools.com/#BreadcrumbsPlugin|
|Documentation|http://www.TiddlyTools.com/#BreadcrumbsPluginInfo|
|Version|2.1.3|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|list/jump to tiddlers viewed during this session plus "back" button/macro|
This plugin provides a list of links to all tiddlers opened during the session, creating a "trail of breadcrumbs" from one tiddler to the next, allowing you to quickly navigate to any previously viewed tiddler, or select 'home' to reset the display to the initial set of tiddlers that were open at the start of the session (i.e., when the document was loaded into the browser).
!!!!!Documentation
<<<
see [[BreadcrumbsPluginInfo]]
<<<
!!!!!Configuration
<<<
<<option chkCreateDefaultBreadcrumbs>> automatically create breadcrumbs display (if needed)
<<option chkShowBreadcrumbs>> show/hide breadcrumbs display
<<option chkReorderBreadcrumbs>> re-order breadcrumbs when visiting a previously viewed tiddler
<<option chkBreadcrumbsHideHomeLink>> omit 'Home' link from breadcrumbs display
<<option chkBreadcrumbsSave>> prompt to save breadcrumbs when 'Home' link is pressed
<<option chkShowStartupBreadcrumbs>> show breadcrumbs for 'startup' tiddlers
<<option chkBreadcrumbsReverse>> show breadcrumbs in reverse order (most recent first)
<<option chkBreadcrumbsLimit>> limit breadcrumbs display to {{twochar{<<option txtBreadcrumbsLimit>>}}} items
<<option chkBreadcrumbsLimitOpenTiddlers>> limit open tiddlers to {{twochar{<<option txtBreadcrumbsLimitOpenTiddlers>>}}} items
<<<
!!!!!Revisions
<<<
2010.11.30 2.1.3 use story.getTiddler()
2009.10.19 2.1.2 code reduction
| Please see [[BreadcrumbsPluginInfo]] for previous revision details |
2006.02.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.BreadcrumbsPlugin= {major: 2, minor: 1, revision: 3, date: new Date(2010,11,30)};
var defaults={
chkShowBreadcrumbs: true,
chkReorderBreadcrumbs: true,
chkCreateDefaultBreadcrumbs: true,
chkShowStartupBreadcrumbs: false,
chkBreadcrumbsReverse: false,
chkBreadcrumbsLimit: false,
txtBreadcrumbsLimit: 5,
chkBreadcrumbsLimitOpenTiddlers:false,
txtBreadcrumbsLimitOpenTiddlers:3,
chkBreadcrumbsHideHomeLink: false,
chkBreadcrumbsSave: false,
txtBreadcrumbsHomeSeparator: ' ||| ',
txtBreadcrumbsCrumbSeparator: ' | '
};
for (var id in defaults) if (config.options[id]===undefined)
config.options[id]=defaults[id];
config.macros.breadcrumbs = {
crumbs: [], // the list of current breadcrumbs
askMsg: "Save current breadcrumbs before clearing?\n"
+"Press OK to save, or CANCEL to continue without saving.",
saveMsg: 'Enter the name of a tiddler in which to save the current breadcrumbs',
saveTitle: 'SavedBreadcrumbs',
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var area=createTiddlyElement(place,"span",null,"breadCrumbs",null);
area.setAttribute("homeSep",params[0]||config.options.txtBreadcrumbsHomeSeparator);
area.setAttribute("crumbSep",params[1]||config.options.txtBreadcrumbsCrumbSeparator);
this.render(area);
},
add: function (title) {
var thisCrumb = title;
var ind = this.crumbs.indexOf(thisCrumb);
if(ind === -1)
this.crumbs.push(thisCrumb);
else if (config.options.chkReorderBreadcrumbs)
this.crumbs.push(this.crumbs.splice(ind,1)[0]); // reorder crumbs
else
this.crumbs=this.crumbs.slice(0,ind+1); // trim crumbs
if (config.options.chkBreadcrumbsLimitOpenTiddlers)
this.limitOpenTiddlers();
this.refresh();
return false;
},
getAreas: function() {
var crumbAreas=[];
// find all DIVs with classname=="breadCrumbs"
var all=document.getElementsByTagName("*");
for (var i=0; i<all.length; i++)
try{ if (hasClass(all[i],"breadCrumbs")) crumbAreas.push(all[i]); } catch(e) {;}
// or, find single DIV w/fixed ID (backward compatibility)
var byID=document.getElementById("breadCrumbs")
if (byID && !hasClass(byID,"breadCrumbs")) crumbAreas.push(byID);
if (!crumbAreas.length && config.options.chkCreateDefaultBreadcrumbs) {
// no crumbs display... create one
var defaultArea = createTiddlyElement(null,"span",null,"breadCrumbs",null);
defaultArea.style.display= "none";
var targetArea= document.getElementById("tiddlerDisplay");
targetArea.parentNode.insertBefore(defaultArea,targetArea);
crumbAreas.push(defaultArea);
}
return crumbAreas;
},
refresh: function() {
var crumbAreas=this.getAreas();
for (var i=0; i<crumbAreas.length; i++) {
crumbAreas[i].style.display = config.options.chkShowBreadcrumbs?"block":"none";
removeChildren(crumbAreas[i]);
this.render(crumbAreas[i]);
}
},
render: function(here) {
var co=config.options; var out=""
if (!co.chkBreadcrumbsHideHomeLink) {
createTiddlyButton(here,"Home",null,this.home,"tiddlyLink tiddlyLinkExisting");
out+=here.getAttribute("homeSep")||config.options.txtBreadcrumbsHomeSeparator;
}
for (c=0; c<this.crumbs.length; c++) // remove non-existing tiddlers from crumbs
if (!store.tiddlerExists(this.crumbs[c]) && !store.isShadowTiddler(this.crumbs[c]))
this.crumbs.splice(c,1);
var count=this.crumbs.length;
if (co.chkBreadcrumbsLimit && co.txtBreadcrumbsLimit<count) count=co.txtBreadcrumbsLimit;
var list=[];
for (c=this.crumbs.length-count; c<this.crumbs.length; c++) list.push('[['+this.crumbs[c]+']]');
if (co.chkBreadcrumbsReverse) list.reverse();
out+=list.join(here.getAttribute("crumbSep")||config.options.txtBreadcrumbsCrumbSeparator);
wikify(out,here);
},
home: function() {
var cmb=config.macros.breadcrumbs;
if (config.options.chkBreadcrumbsSave && confirm(cmb.askMsg)) cmb.saveCrumbs();
story.closeAllTiddlers(); restart();
cmb.crumbs = []; var crumbAreas=cmb.getAreas();
for (var i=0; i<crumbAreas.length; i++) crumbAreas[i].style.display = "none";
return false;
},
saveCrumbs: function() {
var tid=prompt(this.saveMsg,this.saveTitle); if (!tid||!tid.length) return; // cancelled by user
var t=store.getTiddler(tid);
if(t && !confirm(config.messages.overwriteWarning.format([tid]))) return;
var who=config.options.txtUserName;
var when=new Date();
var text='[['+this.crumbs.join(']]\n[[')+']]';
var tags=t?t.tags:[]; tags.pushUnique('story');
var fields=t?t.fields:{};
store.saveTiddler(tid,tid,text,who,when,tags,fields);
story.displayTiddler(null,tid);
story.refreshTiddler(tid,null,true);
displayMessage(tid+' has been '+(t?'updated':'created'));
},
limitOpenTiddlers: function() {
var limit=config.options.txtBreadcrumbsLimitOpenTiddlers; if (limit<1) limit=1;
for (c=this.crumbs.length-1; c>=0; c--) {
var tid=this.crumbs[c];
var elem=story.getTiddler(tid);
if (elem) { // tiddler is displayed
if (limit <=0) { // display limit has been reached
if (elem.getAttribute("dirty")=="true") { // tiddler is being edited
var msg= "'"+tid+"' is currently being edited.\n\n"
+"Press OK to save and close this tiddler\n"
+"or press Cancel to leave it opened";
if (confirm(msg)) {
story.saveTiddler(tid);
story.closeTiddler(tid);
}
}
else story.closeTiddler(this.crumbs[c]);
}
limit--;
}
}
}
};
//}}}
// // PreviousTiddler ('back') command and macro
//{{{
config.commands.previousTiddler = {
text: 'back',
tooltip: 'view the previous tiddler',
handler: function(event,src,title) {
var here=story.findContainingTiddler(src); if (!here) return;
var crumbs=config.macros.breadcrumbs.crumbs;
if (crumbs.length<2) config.macros.breadcrumbs.home();
else story.displayTiddler(here,crumbs[crumbs.length-2]);
return false;
}
};
config.macros.previousTiddler= {
label: 'back',
prompt: 'view the previous tiddler',
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var label=params.shift(); if (!label) label=this.label;
var prompt=params.shift(); if (!prompt) prompt=this.prompt;
createTiddlyButton(place,label,prompt,function(ev){
return config.commands.previousTiddler.handler(ev,this)
});
}
}
//}}}
// // HIJACKS
//{{{
// update crumbs when a tiddler is displayed
if (Story.prototype.breadCrumbs_coreDisplayTiddler==undefined)
Story.prototype.breadCrumbs_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler) {
var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
this.breadCrumbs_coreDisplayTiddler.apply(this,arguments);
if (!startingUp || config.options.chkShowStartupBreadcrumbs)
config.macros.breadcrumbs.add(title);
}
// update crumbs when a tiddler is deleted
if (TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler==undefined)
TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler=TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler= function() {
this.breadCrumbs_coreRemoveTiddler.apply(this,arguments);
config.macros.breadcrumbs.refresh();
}
//}}}
Here you may find some C++ code samples that I would like to share. Click on each specific tiddler to download.
!![[Vanishing point detection]]
|[img[./images/vp/vpSmall.png][Vanishing point detection]]|Vanishing point detection for images, videos or live cameras. The method computes as many vanishing point as requested by the user (via argument). It uses MSAC (M-estimator ~SAmple and Consensus), and an angular metric between vanishing point and line segments.|
|~|''Author'': Marcos Nieto|
|~|''Language'': C++|
|~|''Platform'': Linux, Windows|
|~|''Dependencies'': [[OpenCV|http://opencv.willowgarage.com/wiki/]], [[lmfit|http://joachimwuttke.de/lmfit/index.html]]|
|~|''Last Release Date'': 2012/02|
|noBorder|k
!![[Line segment detection]]
|[img[./images/lswms/lswmsSmall.png][Line segment detection]]|Line segment detection for images, videos or live cameras. The method computes as many line segments as possible or as requested by the user (via argument). It uses a variant of the [[SSWMS]] method, which I call the LSWMS. It has been written in C++ and using ~OpenCV 2.X for a easier understanding for those interested in reading the code.|
|~|''Author'': Marcos Nieto|
|~|''Language'': C++|
|~|''Platform'': Linux, Windows|
|~|''Dependencies'': [[OpenCV|http://opencv.willowgarage.com/wiki/]]|
|~|''Last Release Date'': 2012/04|
|noBorder|k
Carlos Roberto del Blanco - [[personal website|http://www.gti.ssr.upm.es/~cda]]
Luis Unzueta - [[personal website|http://luis-unzueta.vndv.com/]]
Javier Barandiaran - [[Videoman website|http://sites.google.com/site/jbarandiaran/]]
Jon Arróspide - [[academic website|http://www.gti.ssr.upm.es/~jal]]
<html><TABLE border=0 bgcolor=#FFFFFF>
<TR> <TD bgcolor="#ffffff"><font color="#000000">Background</font></TD> </TR>
<TR> <TD bgcolor="#000000"><font color="#ffffff">Foreground</font> </TD> </TR>
<TR> <TD bgcolor="#999999"><font color="#000000">PrimaryPale</font> </TD> </TR>
<TR> <TD bgcolor="#505050"><font color="#000000">PrimaryLight</font> </TD> </TR>
<TR> <TD bgcolor="#2E2E2E"><font color="#ffffff">PrimaryMid</font> </TD> </TR>
<TR> <TD bgcolor="#000"><font color="#ffffff">PrimaryDark</font> </TD> </TR>
<TR> <TD bgcolor="#FFC982"><font color="#000000">SecondaryPale</font> </TD> </TR>
<TR> <TD bgcolor="#FAAC58"><font color="#000000">SecondaryLight</font> </TD> </TR>
<TR> <TD bgcolor="#DF7401"><font color="#000000">SecondaryMid</font> </TD> </TR>
<TR> <TD bgcolor="#000000"><font color="#ffffff">SecondaryDark</font> </TD> </TR>
<TR> <TD bgcolor="#FFC982"><font color="#000000">TertiaryPale</font> </TD> </TR>
<TR> <TD bgcolor="#FAAC58"><font color="#000000">TertiaryLight</font> </TD> </TR>
<TR> <TD bgcolor="#DF7401"><font color="#ffffff">TertiaryMid</font> </TD> </TR>
<TR> <TD bgcolor="#000"><font color="#ffffff">TertiaryDark</font> </TD> </TR>
</TABLE> </html>
Primary is for background-foreground and main appearance
Secondary is for text and for tags
Tertiary is for lines and the text of Tiddler options (view, edit, etc.)
Background: #ffffff
Foreground: #000000
PrimaryPale: #999999
PrimaryLight: #505050
PrimaryMid: #2E2E2E
PrimaryDark: #000
SecondaryPale: #FFC982
SecondaryLight: #FAAC58
SecondaryMid: #DF7401
SecondaryDark: #000000
TertiaryPale: #FFC982
TertiaryLight: #FAAC58
TertiaryMid: #DF7401
TertiaryDark: #000
// //''Name:'' EmailLink
// //''Version:'' <<getversion email>> (<<getversiondate email "DD MMM YYYY">>)
// //''Author:'' AlanHecht
// //''Type:'' [[Macro|Macros]]
// //''Description:'' email lets you list a "email" address without displaying it as readable text. This helps prevent your email address from being harvested by search engines and other web crawlers that read your page's contents. Using email, you type in the words "at" and "dot" instead of the punctuation symbols and add spaces inbetween words to disguise your address. However, email will display your email address in a web browser so that humans can read it. And email turns the address into a hyperlink that can be clicked to send you an instant email.
// //''Syntax:'' << {{{email yourname at yourdomain dot com "?optional parameters"}}} >>
// //Example 1: <<email sample at nowhere dot com>> (standard)
// //Example 2: <<email multiple dot sample at somewhere dot nowhere dot com>> (multiple dots)
// //Example 3: <<email sample at nowhere dot com "?subject=Submission&body=Type your message here.">> (with optional parameters)
// //''Directions:'' <<tiddler MacroDirections>>
// //''Notes:'' You can use the optional email parameters to stipulate a subject or message body for the message. Most (not all) email clients will use this information to construct the email message.
// //''Related Links:'' none
// //''Revision History:''
// // v0.1.0 (20 July 2005): initial release
// // v0.1.1 (22 July 2005): renamed the macro from "mailto" to "email" to further thwart email harvesters.
// // v0.1.2 (15 October 2005): added global replacement of "dots" thanks to a suggestion from Ralph Winter
// //''Code section:''
version.extensions.email = {major: 0, minor: 1, revision: 2, date: new Date("Oct 15, 2005")};
config.macros.email = {}
config.macros.email.handler = function(place,macroName,params)
{
var temp = params.join(" ");
data = temp.split("?");
var recipient = data[0];
recipient = recipient.replace(" at ","@").replace(" dot ",".","g");
recipient = recipient.replace(/\s/g,"");
var optional = data[1] ? "?" + data[1] : "";
var theLink = createExternalLink(place,"ma"+"il"+"to:"+recipient+optional);
theLink.appendChild(document.createTextNode(recipient))
}
During these years I've attended several conferences and events. In all of them I've been presenting the published works, in oral presentations and posters.
* ''ICIP 2006'' - IEEE International Conference on Image Processing, October 8-11, 2006, Atlanta, Georgia, USA.
* ''ACIVS 2007'' - Advanced Concepts for Intelligent Vision Systems, August 28-31, 2007, Delft, the Netherlands.
* ''IV 2007'' - IEEE Intelligent Vehicles Symposium, June 13-15, 2007, Istanbul, Turkey.
* ''IV 2008'' - IEEE Intelligent Vehicles Symposium, June 4-6, 2008, Einhoven, The Netherlands.
* ''CBMI 2008'' - ~Content-Based Multimedia Indexing, June 18-20, 2008, London, UK.
* ''ICIP 2008'' - IEEE International Conference on Image Processing, October 12-15, San Diego, California, USA.
* ''HOIP 2008'' - Hands on Image Processing, October 22-23, Zamudio, Spain.
* ''HOIP 2010'' - Hands on Image Processing, November 16-17, Zamudio, Spain.
Some oral presentations of my works (find the corresponding papers in [[Publications]]):
|<html> <a href=./orals/HOIP2008.pdf target="_blank"><img src="./orals/HOIP2008_thumb.gif"></a> </html>|<html> <a href=./orals/CBMI2008.pdf target="_blank"><img src="./orals/CBMI2008_thumb.gif"></a> </html>|<html> <a href=./orals/ACIVS2007.pdf target="_blank"><img src="./orals/ACIVS2007_thumb.gif"></a> </html>|<html> <a href=./orals/ICIP2006_1.pdf target="_blank"><img src="./orals/block.gif"></a> </html>|<html> <a href=./orals/ICIP2006_2.pdf target="_blank"><img src="./orals/block2.gif"></a> </html>|<html> <a href=./orals/ACIVS2005.pdf target="_blank"><img src="./orals/ACIVS2005_thumb.gif"></a> </html>|
|!HOIP 2008|!CBMI 2008|!ACIVS 2007|!ICIP 2006|!ICIP 2006|!ACIVS 2005|f
These are some of the posters I have used in the corresponding presentations
|<html> <a href=./posters/ICIP2009.pdf target="_blank"><img src="./posters/ICIP2009_thumb.gif"></a> </html>|<html> <a href=./posters/ICIP2008_MND.pdf target="_blank"><img src="./posters/ICIP2008_thumb.gif"></a> </html>|<html> <a href=./posters/ICIP2008_JAL.pdf target="_blank"><img src="./posters/ICIP2008_jal_thumb.gif"></a> </html>|<html> <a href=./posters/Motorshow2008.pdf target="_blank"><img src="./posters/Motorshow2008_thumb.gif"></a> </html>|<html> <a href=./posters/IV2008.pdf target="_blank"><img src="./posters/IV2008_thumb.gif"></a> </html>|<html> <a href=./posters/IV2007.pdf target="_blank"><img src="./posters/IV2007_thumb.gif"></a> </html>|<html> <a href=./posters/VLBV2005.pdf target="_blank"><img src="./posters/VLBV2005_thumb.gif"></a> </html>|
|!ICIP 2009|!ICIP 2008|!ICIP 2008|!Motorshow 2008|!IV 2008|!IV 2007|!VLBV 2005|f
In the [[GTI|http://www.gti.ssr.upm.es]] I have participated in different talks related to computer vision and specifically to my research work in the [[I-WAY project]] and also with respect to H.264/AVC video coding
* Vision-based ADAS - A talk about the advanced driver assistance system developed.
* Particle filters - A short tutorial on the basis of particle filters for computer vision tasks.
* H.264/AVC video coding - Introduction to advanced video coding standards
* VRML 3D road model - Including an [[interactive race game!|./orals/demo/mundo.wrl]] (Cortona required)
* DLT algorithm - A method for computing the camera projection matrix, P, from world correspondeces
|<html> <a href=./orals/2009_MNietoRMohedano_ParticleFilters_v1.0.pdf target="_blank"><img src="./orals/gaussian.gif"></a> </html>|<html> <a href=./orals/2008_MNieto_v0.1.pdf target="_blank"><img src="./orals/ipm.gif"></a> </html>|<html> <a href=./orals/AVC.pdf target="_blank"><img src="./orals/avc.gif"></a> </html>|<html> <a href=./orals/Graficos3D.pdf target="_blank"><img src="./orals/vrml.gif"></a> </html>|<html> <a href=./orals/DLT.pdf target="_blank"><img src="./orals/dlt.gif"></a> </html>|
|!Particle filters |!Road modeling|!H.264/AVC|!VRML|!DLT|f
Since 2009 the group has invited me to offer some talks related to road modeling and other topics in the subject "Tratamiento Digital de Imagenes" inside the grade program of the E.T.S. Ing. Telecomunicacion
|<html><a href=./orals/TDIM_MNieto_2009.pdf target="_blank"><img src="./orals/ipm.gif"></a> </html>|<html><a href=./orals/TDIM_MNieto_2010.pdf target="_blank"><img src="./orals/ipm.gif"></a> </html>|
|!TDIM 2009|!TDIM 2010|f
Object detection and tracking is one of the main research lines related to computer vision within the Grupo de Tratamiento de Im genes. Numerous works have been published in the field by the group in high impact international conferences and journals (see [[Publications|./http://www.gti.ssr.upm.es/es/publicaciones/internacionales.html]] section). Our last work addressing this topic, named ''~HOMOGRAPHY-BASED GROUND PLANE DETECTION USING A SINGLE ~ON-BOARD CAMERA'' has been sent to the IET Intelligent Transport Systems journal. The work is based on the previous detection of the ground plane through planar homography estimation between successive frames. The detection of the ground plane allows a further detection of the elements on the ground plane. The method has been applied to vehicle detection and tracking in traffic scenarios with a vehicle-mounted camera. Videos showing the results of the method for two example sequences are enclosed below:
Example 1
|<html><a href=./videos/Example11.rar target="_blank"><img src="./videos/Example11.jpg"></a> </html>|<html><a href=./videos/Example12.rar target="_blank"><img src="./videos/Example12.jpg"></a> </html>|
|!Video 1.1|!Video 1.2|f
Example 2
|<html><a href=./videos/Example21.rar target="_blank"><img src="./videos/Example21.jpg"></a> </html>|<html><a href=./videos/Example22.rar target="_blank"><img src="./videos/Example22.jpg"></a> </html>|<html><a href=./videos/Example23.rar target="_blank"><img src="./videos/Example23.jpg"></a> </html>|
|!Video 2.1|!Video 2.2|!Video2.3|f
Videos 1.1 and 2.1 show the ground plane detection results for the examples 1 and 2, respectively. The videos comprise the input sequence with a green mask over the detected ground plane at each instant. Videos 1.2 and 2.2 show the vehicle detection results for the same examples. Detection of vehicles is represented by bounding boxes surrounding the rear of the vehicles. The region of interest comprises the own and the two adjacent lanes and is longitudinally bounded by a red line, which indicates the region in which the resolution of the original image is sufficient to obtain reliable information. In addition, for the example 2 a video containing the ground-truth has been generated using a semi-automatic ground-truth generation tool. This video is available (video 2.3) for all the researchers that want to use it as a benchmark.
During my first years in the Universidad Politécnica de Madrid, I was working with H.264 encoders, aiming to increase the performance of the motion estimation stage by means of adding intelligent fast mode decision algorithms.
Here you are a selection of what I did:
* M. Nieto, L. Salgado, J. Cabrera, and N. Garcia, "//Fast Mode Decision on H.264/AVC Baseline Profile for real-time performance//," Journal of Real Time Image Processing, vol. 3, no. 1-2, pp. 61-75, Mar. 2008. (DOI 10.1007/s11554-007-0062-9) <html> <a href=http://www.springerlink.com/index/96hrpt2177333275.pdf target="_blank"><img src="./images/info.png"></a> </html>
* M. Nieto, L. Salgado, and J. Cabrera, "//Fast Mode Decision on H.264/AVC Main Profile Encoding Based on PSNR Predictions//," in IEEE Proc. Int. Conf. on Image Processing, pp. 49-52, 2006 <html><a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4106463" target="_blank"><img src="./images/info.png"></a><a href=./orals/ICIP06_2.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
* L. Salgado and M. Nieto, "//Sequence Independent Very Fast Mode Decision Algorithm on H.264/AVC Baseline Profile//," in IEEE Proc. Int. Conf. on Image Processing, pp. 41-44, 2006 <html><a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4106461" target="_blank"><img src="./images/info.png"></a><a href=./orals/ICIP06_1.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
* M. Nieto, L. Salgado, and J. Cabrera, "//Fast Mode Decision and Motion Estimation with Object Segmentation in H.264/AVC Encoding//," Int. Conf. on Advanced Concepts for Intelligent Vision Systems, ACIVS 2005, Lecture Notes in Computer Science, vol. 3708, pp. 571-578, 2005 <html><a href="http://www.springerlink.com/index/c9yclmdlx0kk81x7.pdf" target="_blank"><img src="./images/info.png"></a><a href=./orals/ACIVS2005.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
* M. Nieto, L. Salgado, and N. Garcia, "//Fast Mode Decision Based on Activity Segmentation in H.264/AVC Encoding//," Int. Workshop Visual Content Processing and Representation, VLBV 2005, Lecture Notes in Computer Science, vol. 3893, pp. 146-152, 2005 <html><a href="http://www.springerlink.com/index/d1526771873u4983.pdf" target="_blank"><img src="./images/info.png"></a><a href=./posters/VLBV05.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
Hi, my name is Marcos Nieto, I am a researcher in the <html><b><a href="http://www.vicomtech.org" style="color: rgb(12,170,200)"><font color="" 0CAAC8>Vicomtech</font><font color=gray>-ik4 research alliance</font></a></b></html> at the Department of Intelligent Transportation Systems and Industry. I completed my studies (Electrical Engineer and PhD) in the Image Processing Group (<html><b><a href="http://www.gti.ssr.upm.es"><font color=red>G</font>rupo de <font color=green>T</font>ratamiento de <font color=blue>I</font>mágenes</a></b></html>) of the Universidad Politécnica de Madrid where I also worked as researcher until 2010.
In this webpage I would like to share some of the results of my research. You will find some videos, references, posters, presentations, my [[PhD|PhD]] thesis and useful links to [[webpages|Colleagues' websites]] of some colleagues of mine.
By the way, a video is worth a million words...
[img[./images/youtubeVicomtech.PNG][http://www.youtube.com/user/VICOMTech]]
[img[./images/youtubeMNieto.PNG][http://www.youtube.com/user/marcosnietodoncel]]
You can find a useful index of my work in the tiddlers [[Publications|Publications]] and [[Research|Research]]. Hope you enjoy it!
Also I have started a blog in which I am adding some posts related to computer vision, things I've found in the Internet or useful tricks learnt through the years in research. Enjoy!
[img[./images/wordpressMnieto.png][http://marcosnietoblog.wordpress.com]]
[[Short Bio]] and short CV (English [img[./images/pdf.gif][./MarcosNieto_CV_EN_v0.1.pdf]], Spanish [img[./images/pdf.gif][./MarcosNieto_CV_ES_v0.1.pdf]]) (Last update 06/01/2012).
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2010.12.15 1.9.6 allow (but ignore) type="..." syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 6, date: new Date(2010,12,15)};
config.formatters.push( {
name: "inlineJavascript",
match: "\\<script",
lookahead: "\\<script(?: type=\\\"[^\\\"]*\\\")?(?: src=\\\"([^\\\"]*)\\\")?(?: label=\\\"([^\\\"]*)\\\")?(?: title=\\\"([^\\\"]*)\\\")?(?: key=\\\"([^\\\"]*)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
handler: function(w) {
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var src=lookaheadMatch[1];
var label=lookaheadMatch[2];
var tip=lookaheadMatch[3];
var key=lookaheadMatch[4];
var show=lookaheadMatch[5];
var code=lookaheadMatch[6];
if (src) { // external script library
var script = document.createElement("script"); script.src = src;
document.body.appendChild(script); document.body.removeChild(script);
}
if (code) { // inline code
if (show) // display source in tiddler
wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
if (label) { // create 'onclick' command link
var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"
link.tiddler=w.tiddler;
link.onclick=function(){
this.bufferedHTML="";
try{ var r=eval(this.code);
if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
if(this.bufferedHTML.length)
s.innerHTML=this.bufferedHTML;
if((typeof(r)==="string")&&r.length) {
wikify(r,s,null,this.tiddler);
return false;
} else return r!==undefined?r:false;
} catch(e){alert(e.description||e.toString());return false;}
};
link.setAttribute("title",tip||"");
var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
link.setAttribute("href",URIcode);
link.style.cursor="pointer";
if (key) link.accessKey=key.substr(0,1); // single character only
}
else { // run script immediately
var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
try { var out=eval(c); }
catch(e) { out=e.description?e.description:e.toString(); }
if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
}
}
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
} )
//}}}
// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
if(limit > 0) text = text.substr(0,limit);
var wikifier = new Wikifier(text,formatter,null,tiddler);
return wikifier.wikifyPlain();
}
//}}}
// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
The following code computes line segments in images or sequences of images (videos or live camera). This is an implementation in C++ of a variant of the [[SSWMS]] method (see references at the end of the page).
The main purpose of this code is to show how random sampling can be used to generate a desired number of line segments in short time. The implementation has been devised to be clear, not to be optimised. Nevertheless, it can run in real-time in most computers.
Compared to the PPHT (Progressive Probabilistic Hough Transform) which is currently the preferred method by ~OpenCV to detect line segments:
*Do ''not need to tune input parameters'', it works the same for any kind of images
*You can determine ''how many line segments'' you want as output
*It runs ''faster'' in most situations (specially defining 100 line segments at maximum)
*We get as output an estimation of the ''orientation error'' for each line segment
*It has been ''fully programmed in C++/~OpenCV2.x'', so it is quite easy to follow and use
The following images are just some examples of the line segments obtained with the LSWMS method, and the ~Hough method in ~OpenCV.
|[img[./images/lswms/image110.jpg]]|[img[./images/lswms/image110_lswms.png]]|[img[./images/lswms/image110_ppht.png]]|
|[img[./images/lswms/image87.jpg]]|[img[./images/lswms/image87_lswms.png]]|[img[./images/lswms/image87_ppht.png]]|
|[img[./images/lswms/image9.jpg]]|[img[./images/lswms/image9_lswms.png]]|[img[./images/lswms/image9_ppht.png]]|
| Line segments in structured environments (@@color:red;red@@: LSWMS, @@color:blue;blue@@: ~HoughLinesP from ~OpenCV) |c
|noBorder|k
!Youtube video
<html><iframe width="560" height="315" src="http://www.youtube.com/embed/YYeX8IGOAxw" frameborder="0" allowfullscreen></iframe></html>
!Code
The code has been written in C++. Although it is not optimized, it can run in real-time in most configurations.
The source code is provided with a ~CMakeLists.txt that can be used to compile the solution in different platforms. I have tested it in Windows XP, Windows 7, Ubuntu 10.04, and Ubuntu 11.10.
!!Execution instructions
{{{
**************************************************************************************************
* Line segment detection using WMS
* ----------------------------------------------------
* Author:Marcos Nieto
* www.marcosnieto.net
* marcos.nieto.doncel@gmail.com
*
* Date:01/04/2012
**************************************************************************************************
*
* Usage:
* -video # Specifies video file as input (if not specified, camera is used)
* -image # Specifies image file as input (if not specified, camera is used)
* -verbose # Actives verbose: ON, OFF (default)
* -play # ON: the video runs until the end; OFF: frame by frame (key press event)
* -resizedWidth # Specifies the desired width of the image (the height is computed to keep aspect ratio)
* -numMaxLSegs # Specifies the maximum number of line segments to detected.
*
* -hough # ON: Applies OpenCV HoughLinesP for comparison (PPHT)
* Example:
* lineSegment -video myVideo.avi -verbose ON -play OFF
* lineSegment -image myImage.jpg -resizedWidth 300 -numMaxLSegs 100
* lineSegment -image myImage.jpg -hough ON
*
* Keys:
* Esc: Quit
*
}}}
!Downloads and instructions
* [[lswms.tar.gz|code/lswms/downloadlswms.html]] Untar and create a solution using ~CMake.
!Dependencies
*[[OpenCV|http://opencv.willowgarage.com/wiki/]]: The solution uses ~OpenCV for its data structures and the Sobel algorithm. You can find a quick guide for installing ~OpenCV [[here|http://marcosnietoblog.wordpress.com/2011/11/19/opencv-for-windows-easy-installation-using-cmake/]]
!References
* ''M. Nieto'', C. Cuevas, L. Salgado, and N. Garcia, "//Line segment detection using weighted Mean Shift procedures on a 2D Slice sampling strategy//," Pattern Analysis and Applications, vol. 14, no. 2, pp. 149-163, 2011 (DOI: 10.1007/s10044-011-0211-4). [img[./images/favicon.ico][SSWMS]][img[./images/info.png][http://www.springerlink.com/content/p14600xug5t1u7n6/]][img[./images/presentation.png][http://www.slideshare.net/marcosnietodoncel/sswms-slice-sampling-weighted-mean-shift]]
[img[./images/marcos/mnd_2011_03.png]]
[[Home]]
[[Resume]]
[[Publications]]
[[Research]]
[[Code]]
[[PhD]]
[[Colleagues' websites]]
<script>addthis_pub = 'mnieto';</script><br><html><a href="http://www.addthis.com/bookmark.php" onmouseover="return addthis_open(this, '', '[URL]', '[TITLE]')" onmouseout="addthis_close()" onclick="return addthis_sendto()"><img src="http://s9.addthis.com/button1-share.gif" width="125" height="16" border="0" alt="" /></a></html><script src="http://s7.addthis.com/js/152/addthis_widget.js"></script>^^
Last known (19/01/2011) [[h-index= 5|http://interaction.lille.inria.fr/~roussel/projects/scholarindex/index.cgi?btnG=Search+Scholar&as_sauthors=Nieto&as_allsubj=all&as_q=&as_oq=Arr%C3%B3spide+Salgado+Jaureguizar+Cabrera&as_eq=Marshall+Fuentes+Erridge+Correa+Molineri+Hunt+Trincado+Piqueras+Cobo+XA+Quijano+Pijper+Thiery+Fitotecnia+Morales+Llorente+Sampedro+Marin+Redondo+Barredo+Lago+Guti%C3%A9rrez&as_publication=&as_ylo=2005&as_yhi=2010&x_minr=&as_occt=any&hl=en&lr=]] (by Google scholar)
[[What is h-index?|http://en.wikipedia.org/wiki/Hirsch_number]]
[img[./images/hindex.jpg]]
//{{{
config.macros.helloWorld = {};
config.macros.helloWorld.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
var who = params.length > 0 ? params[0] : "world";
wikify("Hello //" + who + "// from the '" + macroName + "' macro in tiddler [[" + tiddler.title + "]].", place);
}
//}}}
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class). In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release. Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE
// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");
// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
window.removeCookie=function(name) {
document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;';
}
}
config.formatters.push( {
name: "nestedSliders",
match: "\\n?\\+{3}",
terminator: "\\s*\\={3}\\n?",
lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
handler: function(w)
{
lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
{
var defopen=lookaheadMatch[1];
var cookiename=lookaheadMatch[2];
var header=lookaheadMatch[3];
var panelwidth=lookaheadMatch[4];
var transient=lookaheadMatch[5];
var hover=lookaheadMatch[6];
var buttonClass=lookaheadMatch[7];
var label=lookaheadMatch[8];
var openlabel=lookaheadMatch[9];
var panelID=lookaheadMatch[10];
var blockquote=lookaheadMatch[11];
var deferred=lookaheadMatch[12];
// location for rendering button and panel
var place=w.output;
// default to closed, no cookie, no accesskey, no alternate text/tip
var show="none"; var cookie=""; var key="";
var closedtext=">"; var closedtip="";
var openedtext="<"; var openedtip="";
// extra "+", default to open
if (defopen) show="block";
// cookie, use saved open/closed state
if (cookiename) {
cookie=cookiename.trim().slice(1,-1);
cookie="chkSlider"+cookie;
if (config.options[cookie]==undefined)
{ config.options[cookie] = (show=="block") }
show=config.options[cookie]?"block":"none";
}
// parse label/tooltip/accesskey: [label=X|tooltip]
if (label) {
var parts=label.trim().slice(1,-1).split("|");
closedtext=parts.shift();
if (closedtext.substr(closedtext.length-2,1)=="=")
{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
openedtext=closedtext;
if (parts.length) closedtip=openedtip=parts.join("|");
else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
}
// parse alternate label/tooltip: [label|tooltip]
if (openlabel) {
var parts=openlabel.trim().slice(1,-1).split("|");
openedtext=parts.shift();
if (parts.length) openedtip=parts.join("|");
else openedtip="hide "+openedtext;
}
var title=show=='block'?openedtext:closedtext;
var tooltip=show=='block'?openedtip:closedtip;
// create the button
if (header) { // use "Hn" header format instead of button/link
var lvl=(header.length>5)?5:header.length;
var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
btn.onclick=onClickNestedSlider;
btn.setAttribute("href","javascript:;");
btn.setAttribute("title",tooltip);
}
else
var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
btn.innerHTML=title; // enables use of HTML entities in label
// set extra button attributes
btn.setAttribute("closedtext",closedtext);
btn.setAttribute("closedtip",closedtip);
btn.setAttribute("openedtext",openedtext);
btn.setAttribute("openedtip",openedtip);
btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
btn.defOpen=defopen!=null; // save default open/closed state (boolean)
btn.keyparam=key; // save the access key letter ("" if none)
if (key.length) {
btn.setAttribute("accessKey",key); // init access key
btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
}
btn.setAttribute("hover",hover?"true":"false");
btn.onmouseover=function(ev) {
// optional 'open on hover' handling
if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
document.onclick.call(document,ev); // close transients
onClickNestedSlider(ev); // open this slider
}
// mouseover on button aligns floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
}
// create slider panel
var panelClass=panelwidth?"floatingPanel":"sliderPanel";
if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
panel.button = btn; // so the slider panel know which button it belongs to
btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
panel.setAttribute("transient",transient=="*"?"true":"false");
panel.style.display = show;
panel.style.width=panel.defaultPanelWidth;
panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }
// render slider (or defer until shown)
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
if ((show=="block")||!deferred) {
// render now if panel is supposed to be shown or NOT deferred rendering
w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
// align floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
}
else {
var src = w.source.substr(w.nextMatch);
var endpos=findMatchingDelimiter(src,"+++","===");
panel.setAttribute("raw",src.substr(0,endpos));
panel.setAttribute("blockquote",blockquote?"true":"false");
panel.setAttribute("rendered","false");
w.nextMatch += endpos+3;
if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
}
}
}
}
)
function findMatchingDelimiter(src,starttext,endtext) {
var startpos = 0;
var endpos = src.indexOf(endtext);
// check for nested delimiters
while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
// count number of nested 'starts'
var startcount=0;
var temp = src.substring(startpos,endpos-1);
var pos=temp.indexOf(starttext);
while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
// set up to check for additional 'starts' after adjusting endpos
startpos=endpos+endtext.length;
// find endpos for corresponding number of matching 'ends'
while (startcount && endpos!=-1) {
endpos = src.indexOf(endtext,endpos+endtext.length);
startcount--;
}
}
return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
if (!theTarget) return false;
var theSlider = theTarget.sliderPanel;
var isOpen = theSlider.style.display!="none";
// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);
// toggle label
theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
// toggle tooltip
theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));
// deferred rendering (if needed)
if (theSlider.getAttribute("rendered")=="false") {
var place=theSlider;
if (theSlider.getAttribute("blockquote")=="true")
place=createTiddlyElement(place,"blockquote");
wikify(theSlider.getAttribute("raw"),place);
theSlider.setAttribute("rendered","true");
}
// show/hide the slider
if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
else
theSlider.style.display = isOpen ? "none" : "block";
// reset to default width (might have been changed via plugin code)
theSlider.style.width=theSlider.defaultPanelWidth;
// align floater panel position with target button
if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);
// if showing panel, set focus to first 'focus-able' element in panel
if (theSlider.style.display!="none") {
var ctrls=theSlider.getElementsByTagName("*");
for (var c=0; c<ctrls.length; c++) {
var t=ctrls[c].tagName.toLowerCase();
if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
{ try{ ctrls[c].focus(); } catch(err){;} break; }
}
}
var cookie=theTarget.sliderCookie;
if (cookie && cookie.length) {
config.options[cookie]=!isOpen;
if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
else window.removeCookie(cookie); // remove cookie if slider is in default display state
}
// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
// prevent clicks *within* a slider button from being processed by browser
// but allow plain click to bubble up to page background (to close transients, if any)
if (e.shiftKey || theTarget!=resolveTarget(e))
{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
Popup.remove(); // close open popup (if any)
return false;
}
//}}}
//{{{
// click in document background closes transient panels
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);
if (document.nestedSliders_savedOnClick)
var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
// if click was inside a popup... leave transient panels alone
var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
if (p) return retval;
// if click was inside transient panel (or something contained by a transient panel), leave it alone
var p=target; while (p) {
if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
p=p.parentNode;
}
if (p) return retval;
// otherwise, find and close all transient panels...
var all=document.all?document.all:document.getElementsByTagName("DIV");
for (var i=0; i<all.length; i++) {
// if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
// otherwise, if the panel is currently visible, close it by clicking it's button
if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
}
return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
// see [[MoveablePanelPlugin]] for use of 'undocked'
var rightEdge=document.body.offsetWidth-1;
var panelWidth=panel.offsetWidth;
var left=0;
var top=btn.offsetHeight;
if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
}
if (place.style.position!="relative") {
var left=findPosX(btn);
var top=findPosY(btn)+btn.offsetHeight;
var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
if (p) { left-=findPosX(p); top-=findPosY(p); }
if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
if (left<0) left=0;
}
panel.style.left=left+"px"; panel.style.top=top+"px";
}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
Morpher.prototype.coreStop = Morpher.prototype.stop;
Morpher.prototype.stop = function() {
this.coreStop.apply(this,arguments);
var e=this.element;
if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
// adjust panel overflow and position after animation
e.style.overflow = "visible";
if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
}
};
}
//}}}
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser
Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])
<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]
----
Also see [[AdvancedOptions]]
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<!--<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>-->
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
Visual object tracking can be carried out with particle filters, a type of recursive Bayesian filtering.
<html><div style="width:425px" id="__ss_6789234"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/marcosnietodoncel/a-friendly-approach-to-particle-filters-in-computer-vision-6789234" title="A FRIENDLY APPROACH TO PARTICLE FILTERS IN COMPUTER VISION">A FRIENDLY APPROACH TO PARTICLE FILTERS IN COMPUTER VISION</a></strong><object id="__sse6789234" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2011tutorialparticlefiltersv0-2-110202105738-phpapp01&stripped_title=a-friendly-approach-to-particle-filters-in-computer-vision-6789234&userName=marcosnietodoncel" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6789234" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2011tutorialparticlefiltersv0-2-110202105738-phpapp01&stripped_title=a-friendly-approach-to-particle-filters-in-computer-vision-6789234&userName=marcosnietodoncel" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/marcosnietodoncel">Marcos Nieto</a>.</div></div></html>
Another [[tutorial|./orals/2009_MNietoRMohedano_ParticleFilters_v1.0.pdf]] that I prepared with Raúl Mohedano in 2009. He is actually a great researcher in particle filter, camera calibration and many other topics.
You can visit as well [[Carlos Roberto del Blanco website|Colleagues' websites]] for more videos, code and examples.
Finally, after some years in the Universidad Politecnica de Madrid, I completed my thesis. Here you are some information about my work:
* Title : ''Detection and tracking of vanishing points in dynamic environments''
* Advisor : Luis Salgado Alvarez de Sotomayor
* Mark : ''Summa cum laude by unanimous decision''
More information can be found in the [[digital UPM archive|http://oa.upm.es/4837]] <html> <a href=http://oa.upm.es/4837/1/MARCOS_NIETO_DONCEL.pdf target="_blank"><img src="./images/pdf.gif"></a> </html>
|<html><div style="width:380px" id="__ss_6454958"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/marcosnietodoncel/phd-defense-marcos-nieto-23112010" title="PhD defense Marcos Nieto 23/11/2010">PhD defense Marcos Nieto 23/11/2010</a></strong><object id="__sse6454958" width="380" height="320"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2010mndthesisv1-1es-110105042943-phpapp02&stripped_title=phd-defense-marcos-nieto-23112010&userName=marcosnietodoncel" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6454958" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2010mndthesisv1-1es-110105042943-phpapp02&stripped_title=phd-defense-marcos-nieto-23112010&userName=marcosnietodoncel" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="380" height="320"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/marcosnietodoncel">Marcos Nieto</a>.</div></html>|<html></div><iframe title="YouTube video player" class="youtube-player" type="text/html" width="380" height="320" src="http://www.youtube.com/embed/0l7fWcipu0c" frameborder="0" allowFullScreen></iframe></html>|
<html><iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/dWvvFrzq2OQ" frameborder="0" allowfullscreen></iframe></html>
The following videos are just some examples of the usage of the combination of the [[SSWMS]] line segment detection, the proposed MSAC-based vanihisng point estimation and the rectification of planes.
|<html><object width="300" height="250"><param name="movie" value="http://www.youtube.com/v/vFZlPcAaRtw?fs=1&hl=es_ES"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/vFZlPcAaRtw?fs=1&hl=es_ES" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="300" height="250"></embed></object></html>|<html><object width="300" height="250"><param name="movie" value="http://www.youtube.com/v/WP1E04tTeE8?fs=1&hl=es_ES"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/WP1E04tTeE8?fs=1&hl=es_ES" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="300" height="250"></embed></object></html>|
My name is Marcos Nieto, I am a PhD researcher working at the Department of Intelligent Transportation Systems and Industry within the <html><b><a href="http://www.vicomtech.org" style="color: rgb(12,170,200)"><font color="" 0CAAC8>Vicomtech</font><font color=gray>-ik4 research alliance</font></a></b></html>.
My tasks in the department include most aspects of the design, development, management and dissemination of research projects, mainly related to computer vision applications for the industry, covering areas such as Intelligent Transportation Systems, Advanced Driver Assistance Systems, Automatic Inspection, Videosurveillance, and ~Human-Machine Interface.
!!!Computer Vision
You can find more about my work in computer vision in the Research and Publications tiddlers. Nevertheless, here you are a short list of the topics I am involved with:
*Bayesian object tracking (BOT) - Currently I am working on the creation of a multiplatform C/C++ library for generic Bayesian tracking, which includes popular methods like particle filters, ~Metropolis-Hastings sampling, etc.
**Vehicle detection and tracking - For both static (surveillance) and dynamic (Driver Assistance Systems)
**3D model estimation
*Projective geometry - As you can see in my PhD, I spent some time with the study of homographies and their relation to vanishing points.
!!!Programming skills
Although we can adapt our developments to the target application, I like to work using a mixture of the following technologies:
*C/C++ programming for high efficient algorithm development
*~OpenCV 2.3 and ~OpenGL
*Qt 4.7 - To easily generate visually impressive interfaces
*~CMake - To rapidly migrate code from one platform to another
*SVN - To manage teams of source code developers
*Videoman - Source code tool that make any computer vision researcher life easier!
!!!Scientific profile
Writing papers is a significant task in research, so with the years I have published a number of works in international conferences (21) and journals (8). Take a look to my [[Publications|Publications]] for more details.
Apart from that I am an active reviewer of the following journals:
*Pattern Recognition Letters
*IEEE Transactions on Fuzzy Systems
*Optical Engineering
*Signal Processing Letters
!!! Academic
My academic formation was completed in the E.T.S.I.T. of the Universidad Politécnica de Madrid (UPM), where I got my M.S. and Ph.D. degree in electrical engineering. I was with the Grupo de Tratamiento de Imágenes, in which I studied Computer Vision and Probabilistic Methods for Optimization under the framework of different research projects.
These research activities were guided by Luis Salgado, Associate Professor of the UPM. In this years I have also collaborated with other professors of the UPM, such as Narciso GarcÃa, Fernando Jaureguizar, or Julián Cabrera. Some other [[colleagues|Colleagues' websites]] that I worked with are Jon Arróspide, Carlos Roberto del Blanco, Carlos Cuevas, and Raúl Mohedano.
!!!Affiliation
''~PhD Researcher'' - Vicomtech ~IK4 Research Alliance (2010-present)
[img[./images/vicomtech.jpg][http://www.vicomtech.es]]
''~PhD Researcher'' - Grupo de Tratamiento de Imágenes (GTI) (2005-2010)
E.T.S.Ing. Telecomunicación (ETSIT)
Universidad Politécnica de Madrid (UPM)
[img[./images/GTI.gif][http://www.gti.ssr.upm.es]]
[img[./images/upm.png][http://www.upm.es]]
I have compiled a bibtex file for all my publications in case you want to cite some work of mine: <html><a href=./papers/MNieto.txt target="_blank"><img src="./images/bibtex.jpg"></a> </html>
!International Journals
* J. Arróspide, L. Salgado, and ''M. Nieto'', "Video analysis based vehicle detection and tracking using an MCMC sampling framework," EURASIP Journal on Advances in Signal Processing, 2012:2, 2012 (DOI: 10.1186/1687-6180-2012-2).[img[./images/info.png][http://asp.eurasipjournals.com/content/2012/1/2/abstract]][img[./images/pdf.gif][http://asp.eurasipjournals.com/content/pdf/1687-6180-2012-2.pdf]]
* L. Unzueta, ''M. Nieto'', A. Cortés, J. Barandiaran, O. Otaegui, and P. Sánchez, "//Adaptive ~Multi-Cue Background Subtraction for Robust Vehicle Counting and Classification//", IEEE Transactions on Intelligent Transportation Systems, vol. 99, pp. 1-14, 2011. (DOI: 10.1109/TITS.2011.2174358) [img[./images/favicon.ico][Traffic surveillance]][img[./images/info.png][http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=6087378]]
* ''M.Nieto'', L. Unzueta, J. Barandiaran, A. Cortés, O. Otaegui, and P. Sánchez, "//Vehicle tracking and classification in challenging scenarios via slice sampling//," EURASIP Journal on Advances in Signal Processing, 2011:95, 2011 (DOI: 10.1186/1687-6180-2011-95).[img[./images/favicon.ico][Traffic surveillance]][img[./images/info.png][http://asp.eurasipjournals.com/content/2011/1/95/abstract]][img[./images/pdf.gif][http://asp.eurasipjournals.com/content/pdf/1687-6180-2011-95.pdf]]
* ''M. Nieto'' and L. Salgado, "Simultaneous estimation of vanishing points and their converging lines using the EM algorithm," Pattern Recognition Letters, vol. 32, issue 14, pp. 1691-1700, 2011 (DOI: 10.1016/j.patrec.2011.07.018). [img[./images/info.png][http://www.sciencedirect.com/science/article/pii/S016786551100239X]]
* ''M. Nieto'', C. Cuevas, L. Salgado, and N. Garcia, "//Line segment detection using weighted Mean Shift procedures on a 2D Slice sampling strategy//," Pattern Analysis and Applications, vol. 14, no. 2, pp. 149-163, 2011 (DOI: 10.1007/s10044-011-0211-4). [img[./images/favicon.ico][SSWMS]][img[./images/info.png][http://www.springerlink.com/content/p14600xug5t1u7n6/]][img[./images/presentation.png][http://www.slideshare.net/marcosnietodoncel/sswms-slice-sampling-weighted-mean-shift]]
* ''M. Nieto'', J. Arrospide, and L. Salgado, "//Road environment modeling using robust perspective analysis and recursive Bayesian segmentation//," Machine Vision and Applications, vol. 22, issue 6, pp. 927-945, 2011. (DOI.10.1007/s00138-010-0287-7)[img[./images/favicon.ico][Road modeling - GTI]][img[./images/info.png][http://www.springerlink.com/content/34478581q1850559/]]
* J. Arrospide, L. Salgado, ''M. Nieto'', and R. Mohedano, "//Homography-based ground plane detection using a single on-board camera|Ground plane detection//," IET Intelligent Transport Systems, vol. 4, no. 2, pp. 149-160, Jun. 2010. (DOI: 10.1049/iet-its.2009.0073)[img[./images/favicon.ico][Ground plane detection]][img[./images/info.png][http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=5478407]][img[./images/pdf.gif][./papers/ITS-2009-0073_R2_Arrospide.pdf]]
* ''M. Nieto'', L. Salgado, J. Cabrera, and N. Garcia, "//Fast Mode Decision on H.264/AVC Baseline Profile for real-time performance//," Journal of Real Time Image Processing, vol. 3, no. 1-2, pp. 61-75, Mar. 2008. (DOI 10.1007/s11554-007-0062-9)[img[./images/info.png][http://www.springerlink.com/index/96hrpt2177333275.pdf]][img[./images/pdf.gif][http://oa.upm.es/2348/2/INVE_MEM_2008_55105.pdf]]
* ''M. Nieto'', L. Salgado, and J. Cabrera, "//Fast Mode Decision and Motion Estimation with Object Segmentation in H.264/AVC Encoding//," Int. Conf. on Advanced Concepts for Intelligent Vision Systems, ACIVS 2005, Lecture Notes in Computer Science, vol. 3708, pp. 571-578, 2005 [img[./images/info.png][http://www.springerlink.com/index/c9yclmdlx0kk81x7.pdf]][img[./images/presentation.png][./orals/ACIVS2005.pdf]]
!International Conferences
!!2012
* ''M. Nieto'', A. Cortes, O. Otaegui, I. Etxabe, "MCMC particle filter with overrelaxated slice sampling for accurate rail inspection," in Proc. Int. Conf. on Computer Vision Theory and Applications ~VISAPP2012, pp. 164-172.
!!2011
* J. Marinas, L. Salgado, J. Arrospide, and ''M. Nieto'', "Detection and Tracking of Traffic Signs Using a Recursive Bayesian Decision Framework," in Proc. Intelligent Transportation Systems Conference ~ITSC2011, pp. 1942 - 1947, 2011. (DOI: 10.1109/ITSC.2011.6082905)[img[./images/info.png][http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=6082905]]
* ''M. Nieto'', L. Unzueta, A. Cortes, J. Barandiaran, O. Otaegui, and P. Sanchez, "//[[Real-time 3D modeling of vehicles in low-cost monocamera systems|Traffic surveillance]]//," in Proc. Int. Conf. on Computer Vision Theory and Applications ~VISAPP2011, pp. 459-464. (DOI 10.5220/0003312104590464)<html><a href=http://www.slideshare.net/marcosnietodoncel/realtime-3d-modeling-of-vehicles-in-lowcost-monocamera-systems?from=ss_embed target="_blank"><img src="./images/presentation.png"></a> </html>
* J. Congote, I. Barandiaran, J. Barandiaran, and ''M. Nieto'', "//Face reconstruction with structured light//," in Proc. Int. Conf. on Computer Vision Theory and Applications ~VISAPP2011, pp. 149-155. (DOI 10.5220/0003371401490155)
!!2010
* ''M. Nieto'' and L. Salgado, "//Plane rectification through robust vanishing point tracking using the expectation-maximization algorithm//," in IEEE Proc. Int. Conf. on Image Processing, pp. 1901-1904, 2010.<html> <a href=http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=5651779 target="_blank"><img src="./images/info.png"></a><a href=http://www.cic.unb.br/~mylene/PI_2010_2/ICIP10/pdfs/0001901.pdf target="_blank"><img src="./images/pdf.gif"></a> </html>
* ''M. Nieto'' and L. Salgado, "//Non-linear optimization for robust estimation of vanishing points//," in IEEE Proc. Int. Conf. on Image Proccesing, pp. 1885-1888, 2010. <html> <a href=http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=5652381 target="_blank"><img src="./images/info.png"></a><a href=http://www.cic.unb.br/~mylene/PI_2010_2/ICIP10/pdfs/0001885.pdf target="_blank"><img src="./images/pdf.gif"></a> </html>
* J. Arrospide, L. Salgado, and ''M. Nieto'', "//Multiple object tracking using an automatic variable-dimension particle filter//," in IEEE Proc. Int. Conf. on Image Processing, pp. 49-52, 2010. <html> <a href=http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=5651632 target="_blank"><img src="./images/info.png"></a><a href=http://www.cic.unb.br/~mylene/PI_2010_2/ICIP10/pdfs/0000049.pdf target="_blank"><img src="./images/pdf.gif"></a> </html>
* J. Arrospide, L. Salgado, ''M. Nieto'', "//Vehicle detection and tracking using homography-based plane rectification and particle filtering//," in IEEE Proc. Intelligent Vehicles Symposium, pp. 150-155, 2010. (DOI 10.1109/IVS.2010.5547980)<html> <a href=http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=5547980 target="_blank"><img src="./images/info.png"></a></html>
* ''M. Nieto'' and L. Salgado, "//Automatic video mosaicing for surveillance using vanishing points//," ~SPIENewsroom, 17 Mar. 2010. (DOI 10.1117/2.1201002.002644)<html> <a href=http://spie.org/x39390.xml?ArticleID=x39390 target="_blank"><img src="./images/info.png"></a><a href=http://spie.org/documents/Newsroom/Imported/002644/002644_10.pdf target="_blank"><img src="./images/pdf.gif"></a> </html>
* ''M. Nieto'' and L. Salgado, "//[[Real-time robust estimation of vanishing points through nonlinear optimization|Plane rectification]]//," in IS&T/SPIE Int. Conf. on ~Real-Time Image and Video Processing, SPIE vol. 7724, 772402, 2010. (DOI 10.1117/12.854592)<html> <a href=http://adsabs.harvard.edu/abs/2010SPIE.7724E...1N target="_blank"><img src="./images/info.png"></a><a href=./orals/2010_MNietoLSalgado_v0.1.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
!!2009
* J. Arrospide, L. Salgado, ''M. Nieto'', and F. Jaureguizar, "//Real-time vehicle detection and tracking based on perspective and non-perspective space cooperation//," IS&T/SPIE Int. Conf. on ~Real-Time Image and Video Processing, SPIE vol. 7244, pp. 72440H-1-12, 2009. (DOI 10.1117/12.812253) <html><a href=http://spiedigitallibrary.org/proceedings/resource/2/psisdg/7244/1/72440H_1?isAuthorized=no target="_blank"><img src="./images/info.png"></a> </html>
* ''M. Nieto'', C. Cuevas, and L. Salgado, "//~Measurement-Based Reclustering for Multiple Object Tracking with Particle Filters//," in IEEE Proc. Int. Conf. on Image Processing, pp. 4097-4100, 2009. (DOI 10.1109/ICIP.2009.5413709)<html><a href="http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=5413709" target="_blank"><img src="./images/info.png"></a><a href=ftp://ftp.elet.polimi.it/users/Stefano.Tubaro/ICIP_USB_Proceedings_v2/pdfs/0004097.pdf target="_blank"><img src="./images/pdf.gif"></a><a href=./posters/ICIP2009.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
!!2008
* ''M. Nieto'', J. Arrospide, L. Salgado, F. Jaureguizar, "//Robust Multiple Lane Road Modeling Based on Perspective Analysis//," in IEEE Proc. Int. Conf. on Image Processing, pp. 2396-2399, 2008. (DOI 10.1109/ICIP.2008.4712275) <html><a href="http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4712275" target="_blank"><img src="./images/info.png"></a><a href=http://oa.upm.es/3714/2/INVE_MEM_2008_56641.pdf target="_blank"><img src="./images/pdf.gif"></a><a href=./posters/ICIP2008_MND.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
* J. Arrospide, L. Salgado, ''M. Nieto'', and F. Jaureguizar, "//On-board Robust Multiple Vehicle Detection and Tracking Using Adaptive Quality Evaluation//," in IEEE Proc. Int. Conf. on Image Processing, pp. 2008-2011, 2008. (DOI 10.1109/ICIP.2008.4712178) <html><a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4712178" target="_blank"><img src="./images/info.png"></a><a href=http://oa.upm.es/3715/2/INVE_MEM_2008_56642.pdf target="_blank"><img src="./images/pdf.gif"></a><a href=./posters/ICIP2008_JAL.pdf target="_blank"><img src="./images/presentation.png"></a></html>
* ''M. Nieto'', J. Arrospide, L. Salgado, and F. Jaureguizar, "//~On-Board Video Based System for Robust Road Modeling//," IEEE Int. Workshop ~Content-Based Multimedia Indexing, CBMI 2008, pp. 109-116, 2008. (DOI 10.1109/CBMI.2008.4564935) <html><a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4564935" target="_blank"><img src="./images/info.png"></a><a href=http://oa.upm.es/3800/1/INVE_MEM_2008_57311.pdf target="_blank"><img src="./images/pdf.gif"></a><a href=./posters/CBMI2008.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
* ''M. Nieto'', L. Salgado, and F. Jaureguizar, "//Robust Road Modeling based on a Hierarchical Bipartite Graph//," IEEE Intelligent Vehicles Symposium, IV 2008, pp. 61-66, 2008. (DOI 10.1109/IVS.2008.4621241) <html><a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4621241" target="_blank"><img src="./images/info.png"></a><a href=./posters/IV2008.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
!!2007
* ''M. Nieto'', L. Salgado, F. Jaureguizar, and J. Cabrera, "//Stabilization of Inverse Perspective Mapping Images based on Robust Vanishing Point Estimation//," IEEE Intelligent Vehicles Symposium, pp. 315-320, 2007 <html><a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4290133" target="_blank"><img src="./images/info.png"></a><a href=./posters/IV2007.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
* D. Alonso, L. Salgado, and ''M. Nieto'', "//Robust Vehicle Detection through Multidimensional Classification for On Board Video based Systems//," in IEEE Proc. Int. Conf. on Image Processing, vol. 4, pp. 321-324, 2007 <html><a href="http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4380019" target="_blank"><img src="./images/info.png"></a><a href=./posters/ICIP07.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
* ''M. Nieto'' and L. Salgado, "//Real-time Vanishing Point Estimation in Road sequences using Adaptive Steerable Filter Banks//", Int. Conf. on Advanced Concepts for Intelligent Vision Systems, ACIVS 2007, Lecture Notes in Computer Science, vol. 4678, pp. 840-848, 2007 <html><a href="http://www.springerlink.com/index/f10v176727552302.pdf" target="_blank"><img src="./images/info.png"></a><a href=./orals/ACIVS2007.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
!!2006
* ''M. Nieto'', L. Salgado, and J. Cabrera, "//Fast Mode Decision on H.264/AVC Main Profile Encoding Based on PSNR Predictions//," in IEEE Proc. Int. Conf. on Image Processing, pp. 49-52, 2006 <html><a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4106463" target="_blank"><img src="./images/info.png"></a><a href=./orals/ICIP06_2.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
* L. Salgado and ''M. Nieto'', "//Sequence Independent Very Fast Mode Decision Algorithm on H.264/AVC Baseline Profile//," in IEEE Proc. Int. Conf. on Image Processing, pp. 41-44, 2006 <html><a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4106461" target="_blank"><img src="./images/info.png"></a><a href=./orals/ICIP06_1.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
* ''M. Nieto'', L. Salgado, and N. Garcia, "//Fast Mode Decision Based on Activity Segmentation in H.264/AVC Encoding//," Int. Workshop Visual Content Processing and Representation, VLBV 2005, Lecture Notes in Computer Science, vol. 3893, pp. 146-152, 2005 <html><a href="http://www.springerlink.com/index/d1526771873u4983.pdf" target="_blank"><img src="./images/info.png"></a><a href=./posters/VLBV05.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
<html><hr></html><html><img src="./images/favicon.ico"></html> - Tiddler in this website
<html><img src="./images/info.png"></html> - Link to article at publisher website
<html><img src="./images/pdf.gif"></html> - Full paper (link to free copies on the web, or author's version previous to review and publication)
<html><img src="./images/presentation.png"></html> - Poster or presentation
----
<script label="Print tiddler">
window.print();
</script><<setIcon images/print.png>>
The whole site is built using [img[http://tiddlywiki.com/favicon.ico]] TiddlyWiki <<version>>.
Among all its amazing properties, it allows tagging the content so that we can later make automatic quick searches without having to update it each time (which saves a lot of time of mine!):
Affiliation
|+++[]<<list filter [tag[Vicomtech]]>>===<<setIcon images/vicomtech.gif>>|+++[]<<list filter [tag[GTI-UPM]]>>===<<setIcon images/gti.gif>>|
Colleagues
|+++[]<<list filter [tag[Vicomtech]]>>===<<setIcon images/user.jpeg>>|
During these years I've been involved in quite different research lines, including some computer vision applications, optimization methods, probabilistic inference, etc.
My research is now very focused on Intelligent Transport Systems, such as Videosurveillance applications, Advanced Driver Assistance Systems, with special interest in computer vision applications and probabilistic methods like particle filters.
|[img[./images/vehicle.png][Traffic surveillance]]|[img[./orals/gaussian.gif][Particle filters]]|
|!Traffic surveillance|!Particle filters|f
Some other works in which I was involved include those that were carried out during my stay in the [[Image Processing Group (Grupo de Tratamiento de Imágenes)|http://www.gti.ssr.upm.es]]
|[img[./orals/avc.gif][H264]]|[img[./images/sswms.png][SSWMS]]|[img[./images/vps.gif][PhD]]|[img[./orals/ipm.gif][Road modeling - GTI]]|
|!H.264/AVC|!Line segments|!Vanishing points|!Road modeling|f
Here you are a short CV (English [img[./images/pdf.gif][./MarcosNieto_CV_EN_v0.1.pdf]], Spanish [img[./images/pdf.gif][./MarcosNieto_CV_ES_v0.1.pdf]]) (Last update 06/01/2012).
!!!Short Bio
Marcos Nieto received the M.S. and Ph.D. degree in electrical engineering from ETSIT of the Universidad Politécnica de Madrid (UPM), Spain, in 2005 and 2010, respectively. From 2005 to 2010 he worked as Researcher within the Grupo de Tratamiento de Imágenes in the UPM, in the field of H.264/AVC video codecs and computer vision applied to advanced driver assistance systems. Since 2010 he works as a Researcher on computer vision and machine learning techniques of the Intelligent Transport Systems and Engineering Area of Vicomtech. His actual research interests include the use of optimization methods for probabilistic models in computer vision.
!!!Experience
''Vicomtech-ik4'' - Donostia, Spain - [2010 - present] - Researcher in computer vision & Project Manager
''Universidad Politécnica de Madrid'' - Madrid, Spain - [2005 - 2010] - Ph.D. candidate & Software Developer
!!!Education
''Dr.-Eng. Technologies and Communication Systems (Ph.D)'' - E.T.S.Ing. Telecomunicación (ETSIT), Universidad Politécnica de Madrid
''Electrical Engineer'' - E.T.S.Ing. Telecomunicación (ETSIT), Universidad Politécnica de Madrid
!!!Scientific activities
Author of 9 articles in international journals (JCR indexed) related to computer vision and Intelligent Transport Systems. See the full list in the [[Publications]] section.
Active reviewer of several international journals and conferences:
*IEEE Signal Processing Letters
*IEEE Transactions on Fuzzy Systems
*Pattern Recognition Letters
*EURASIP Journal on Image and Video Processing
*SPIE Optical Engineering
*IEEE Intelligent Transport Systems Conference
*IEEE Intelligent Vehicles Symposium
!!!Core technical skills
''Languages'': C, C++, Latex, Matlab, PHP, SQL, HTML, CSS
''Libraries'': ~OpenCV, ~OpenGL, ~OpenNI, PCL, Qt, ~CMake, CUDA, ~DirectShow.
''Computer vision'': Bayesian tracking (particle filters, MCMC, MRF), nonlinear optimization (slice sampling, ~Levenberg-Marquardt), camera calibration, maching learning (~BoW, SVM), real-time processing, robust estimation (MSAC).
!!!Languages
''Spanish'': Mother tongue
''English'': Fluent writing and speaking
''French'': Notions
''Basque'': Notions
Currently I am working on enhancing the robustness, speed and accuracy of road models, including the detection of multiple lanes, curvature, ego-motion, etc.
This video shows the render of a road model computed using particle filters with MRF interaction models. It allows to estimate the curvature of the road. The video has been generated using [[videoman|http://videomanlib.sourceforge.net/]]
<html><iframe title="YouTube video player" class="youtube-player" type="text/html" width="480" height="390" src="http://www.youtube.com/embed/YFWalnGO3XQ" frameborder="0"></iframe></html>
More videos:
|<html><iframe title="YouTube video player" class="youtube-player" type="text/html" width="300" height="250" src="http://www.youtube.com/embed/leBAs0ozIjs" frameborder="0"></iframe></html>|<html><iframe title="YouTube video player" class="youtube-player" type="text/html" width="300" height="250" src="http://www.youtube.com/embed/xREyp_-mWHA" frameborder="0"></iframe></html>|
|<html><iframe title="YouTube video player" class="youtube-player" type="text/html" width="300" height="250" src="http://www.youtube.com/embed/R3DEI6Fq5ps" frameborder="0"></iframe></html>|<html><iframe title="YouTube video player" class="youtube-player" type="text/html" width="300" height="250" src="http://www.youtube.com/embed/4NW9_TmOZJQ" frameborder="0"></iframe></html>|
Road modeling has always been a very interesting field of work for me since its a challenging outdoor scenario where the algorithms must provide reliable information and perform in real-time.
These works were done in collaboration with ''Assoc. Prof. Luis Salgado'' and ''Jon Arróspide'' from the [[Image Processing Group (Grupo de Tratamiento de Imágenes)|http://www.gti.ssr.upm.es]].
Take a look to their webpages:
[[Jon Arróspide's webpage|http://www.gti.ssr.upm.es/~jal]] - It contains a useful database of vehicles for vehicle detection applications.
[[Luis Salgado's webpage|http://www.gti.ssr.upm.es/personal/miembros/71.html]]
The following videos show the results of my previous works in the [[Image Processing Group (Grupo de Tratamiento de Imágenes)|http://www.gti.ssr.upm.es]]:
|<html><object width="300" height="250"><param name="movie" value="http://www.youtube.com/v/Aw-zGYkPOYc?fs=1&hl=es_ES"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Aw-zGYkPOYc?fs=1&hl=es_ES" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="300" height="250"></embed></object></html>|<html><object width="300" height="250"><param name="movie" value="http://www.youtube.com/v/JmxDIuCIIcg?fs=1&hl=es_ES"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/JmxDIuCIIcg?fs=1&hl=es_ES" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="300" height="250"></embed></object></html>|
|<html><object width="300" height="250"><param name="movie" value="http://www.youtube.com/v/ipXQFcAeovk?fs=1&hl=es_ES"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ipXQFcAeovk?fs=1&hl=es_ES" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="300" height="250"></embed></object></html>|<html><object width="300" height="250"><param name="movie" value="http://www.youtube.com/v/BCe-yD110Do?fs=1&hl=es_ES"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/BCe-yD110Do?fs=1&hl=es_ES" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="300" height="250"></embed></object></html>|
|<html><object width="300" height="250"><param name="movie" value="http://www.youtube.com/v/oBWDDvsyuGI?fs=1&hl=es_ES"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/oBWDDvsyuGI?fs=1&hl=es_ES" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="300" height="250"></embed></object></html>|<html><object width="300" height="250"><param name="movie" value="http://www.youtube.com/v/i6roGUznJ4A?fs=1&hl=es_ES"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/i6roGUznJ4A?fs=1&hl=es_ES" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="300" height="250"></embed></object></html>|
|<html><object width="300" height="250"><param name="movie" value="http://www.youtube.com/v/v3mbr-qHBKI?fs=1&hl=es_ES"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/v3mbr-qHBKI?fs=1&hl=es_ES" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="300" height="250"></embed></object></html>|<html><object width="300" height="250"><param name="movie" value="http://www.youtube.com/v/qyFgxuqwZOI?fs=1&hl=es_ES"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/qyFgxuqwZOI?fs=1&hl=es_ES" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="300" height="250"></embed></object></html>|
One of the works I did during the ellaboration on my [[PhD|PhD]] thesis was a fast and reliable line segment detector. The aim was to have a fast algorithm that draws the most significant line segments of an image, which can be then used to detect vanishing points, or used as features for any other computer vision application.
This work was possible thanks to the collaboration of Carlos Cuevas. Here you are an slide presentation:
<html><div style="width:425px" id="__ss_7130205"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/marcosnietodoncel/sswms-slice-sampling-weighted-mean-shift" title="SSWMS - Slice Sampling Weighted Mean Shift">SSWMS - Slice Sampling Weighted Mean Shift</a></strong><object id="__sse7130205" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2010mndthesisch2v0-1es-110303024906-phpapp01&stripped_title=sswms-slice-sampling-weighted-mean-shift&userName=marcosnietodoncel" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse7130205" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2010mndthesisch2v0-1es-110303024906-phpapp01&stripped_title=sswms-slice-sampling-weighted-mean-shift&userName=marcosnietodoncel" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/marcosnietodoncel">Marcos Nieto</a>.</div></div></html>
Just for fun, I applied the detector to some videos:
<html><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/mqMbyg2NCQM?hl=es&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/mqMbyg2NCQM?hl=es&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></html>
If applied to vanishing point detectio and plane rectification, we can get things like these:
|<html><iframe title="YouTube video player" width="300" height="200" src="http://www.youtube.com/embed/WP1E04tTeE8" frameborder="0" allowfullscreen></iframe></html>|<html><iframe title="YouTube video player" width="300" height="200" src="http://www.youtube.com/embed/76Ydp4ptPXo" frameborder="0" allowfullscreen></iframe></html>|
/***
|Name|SetIconPlugin|
|Source|http://www.TiddlyTools.com/#SetIconPlugin|
|Documentation|http://www.TiddlyTools.com/#SetIconPluginInfo|
|Version|1.9.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.3|
|Type|plugin|
|Description|add an image to a toolbar, macro, or slider link|
!!!!!Documentation
>see [[SetIconPluginInfo]]
!!!!!Configuration
<<<
<<option chkIconsShowImage>> show images on links
<<option chkIconsShowText>> include link text with images
default image style: {{stretch{<<option txtIconsCSS>>}}}
<<<
!!!!!Revisions
<<<
2011.10.02 1.9.0 added 'find:...' macro param (for use with tabsets)
| see [[SetIconPluginInfo]] for additional revision details |
2008.05.09 1.0.0 initial release (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.SetIconPlugin= {major: 1, minor: 9, revision: 0, date: new Date(2011,10,2)};
if (config.options.chkIconsShowImage===undefined)
config.options.chkIconsShowImage=true;
if (config.options.chkIconsShowText===undefined)
config.options.chkIconsShowText=true;
if (config.options.txtIconsCSS===undefined)
config.options.txtIconsCSS="vertical-align:middle;width:auto;height:auto";
config.macros.setIcon = {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
if (!config.options.chkIconsShowImage) return; // text-only - do nothing
var src=params[0]; if (!src) return; // no image src specified - do nothing
var p=paramString.parseParams('name',null,true,false,true);
var label=getParam(p,'find'); if (label) params.shift(); // optional find:"..."
var css=params[1]; if (!css||!css.length) css=config.options.txtIconsCSS;
var after=params[2]&¶ms[2].toUpperCase()=="RIGHT";
var notext=params[2]&¶ms[2].toUpperCase()=="NOTEXT";
// find nearest link element
var btn=place.lastChild; // look for sibling link
while (btn && (btn.nodeName!="A" || label&&!btn.innerHTML.startsWith(label)))
btn=btn.previousSibling;
if (!btn) { // look for child link
var links=place.getElementsByTagName("A");
for (var i=links.length-1; i>=0; i--)
if (!label || links[i].innerHTML.startsWith(label)) { btn=links[i]; break; }
}
if (!btn) { // look for parent link
var btn=place.parentNode.lastChild;
while (btn && (btn.nodeName!="A" || label&&!btn.innerHTML.startsWith(label)))
btn=btn.previousSibling;
}
if (!btn) { // look for cousin link (e.g. TABS in TABSETS)
var links=place.parentNode.getElementsByTagName("A");
for (var i=links.length-1; i>=0; i--)
if (!label || links[i].innerHTML.startsWith(label)) { btn=links[i]; alert('found'); break; }
}
if (!btn) return; // can't find a link - do nothing
// set icon and command text/tip
var txt=btn.innerHTML;
if (config.macros.attach && config.macros.attach.isAttachment(src))
src=config.macros.attach.getAttachment(src); // retrieve attachment (if any)
btn.innerHTML="<img src='"+src+"' style='"+css+"'>";
if (config.options.chkIconsShowText && !notext)
btn.innerHTML=after?txt+btn.innerHTML:btn.innerHTML+txt;
else
btn.title=txt.toUpperCase()+": "+btn.title; // add text to tooltip
// adjust nested slider button text/tip
if (btn.getAttribute("closedtext")!=null) {
btn.setAttribute("closedtext",btn.innerHTML);
btn.setAttribute("openedtext",btn.innerHTML);
if (!config.options.chkIconsShowText || notext) {
btn.setAttribute("closedtip",txt.toUpperCase()+": "+btn.getAttribute("closedtip"));
btn.setAttribute("openedtip",txt.toUpperCase()+": "+btn.getAttribute("openedtip"));
}
}
}
};
//}}}
Marcos Nieto received the M.S. and Ph.D. degree in electrical engineering from ETSIT of the Universidad Politécnica de Madrid (UPM), Spain, in 2005 and 2010, respectively. From 2005 to 2010 he worked as Researcher within the Grupo de Tratamiento de Imágenes in the UPM, in the field of H.264/AVC video codecs and computer vision applied to advanced driver assistance systems. Since 2010 he works as a Researcher on computer vision and machine learning techniques of the Intelligent Transport Systems and Engineering Area of Vicomtech. His actual research interests include the use of optimization methods for probabilistic models in computer vision.
<<search>>
<<newTiddler>>
----
<html><strong>Contact Info</strong></html>
Marcos Nieto
<<email mnieto at vicomtech dot org>>[img[./images/vicomtech.gif][http://www.vicomtech.es]][img[http://www.linkedin.com/img/webpromo/btn_liprofile_blue_80x15.gif][http://www.linkedin.com/in/marcosnietodoncel]]<html> <hr><a href="http://www2.clustrmaps.com/counter/maps.php?url=http://marcosnieto.zymichost.com" id="clustrMapsLink"><img src="http://www2.clustrmaps.com/counter/index2.php?url=http://marcosnieto.zymichost.com" style="border:0px;" alt="Locations of visitors to this page" title="Locations of visitors to this page" id="clustrMapsImg" onerror="this.onerror=null; this.src='http://clustrmaps.com/images/clustrmaps-back-soon.jpg'; document.getElementById('clustrMapsLink').href='http://clustrmaps.com';" />
</a></html>
<html><!--
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers"
TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>> --></html>
/***
|Name|SinglePageModePlugin|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|
|Version|2.9.7|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Show tiddlers one at a time with automatic permalink, or always open tiddlers at top/bottom of page.|
This plugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one tiddler displayed at a time.
!!!!!Documentation
>see [[SinglePageModePluginInfo]]
!!!!!Configuration
<<<
<<option chkSinglePageMode>> Display one tiddler at a time
><<option chkSinglePagePermalink>> Automatically permalink current tiddler
><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded
><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited
<<option chkTopOfPageMode>> Open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page
<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)
Notes:
* The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}.
* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.
* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.
<<<
!!!!!Revisions
<<<
2010.11.30 2.9.7 use story.getTiddler()
2008.10.17 2.9.6 changed chkSinglePageAutoScroll default to false
| Please see [[SinglePageModePluginInfo]] for previous revision details |
2005.08.15 1.0.0 Initial Release. Support for BACK/FORWARD buttons adapted from code developed by Clint Checketts.
<<<
!!!!!Code
***/
//{{{
version.extensions.SinglePageModePlugin= {major: 2, minor: 9, revision: 7, date: new Date(2010,11,30)};
//}}}
//{{{
config.paramifiers.SPM = { onstart: function(v) {
config.options.chkSinglePageMode=eval(v);
if (config.options.chkSinglePageMode && config.options.chkSinglePagePermalink && !config.browser.isSafari) {
config.lastURL = window.location.hash;
if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
}
} };
//}}}
//{{{
if (config.options.chkSinglePageMode==undefined)
config.options.chkSinglePageMode=true;
if (config.options.chkSinglePagePermalink==undefined)
config.options.chkSinglePagePermalink=true;
if (config.options.chkSinglePageKeepFoldedTiddlers==undefined)
config.options.chkSinglePageKeepFoldedTiddlers=false;
if (config.options.chkSinglePageKeepEditedTiddlers==undefined)
config.options.chkSinglePageKeepEditedTiddlers=false;
if (config.options.chkTopOfPageMode==undefined)
config.options.chkTopOfPageMode=false;
if (config.options.chkBottomOfPageMode==undefined)
config.options.chkBottomOfPageMode=false;
if (config.options.chkSinglePageAutoScroll==undefined)
config.options.chkSinglePageAutoScroll=false;
//}}}
//{{{
config.SPMTimer = 0;
config.lastURL = window.location.hash;
function checkLastURL()
{
if (!config.options.chkSinglePageMode)
{ window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }
if (config.lastURL == window.location.hash) return; // no change in hash
var tids=decodeURIComponent(window.location.hash.substr(1)).readBracketedList();
if (tids.length==1) // permalink (single tiddler in URL)
story.displayTiddler(null,tids[0]);
else { // restore permaview or default view
config.lastURL = window.location.hash;
if (!tids.length) tids=store.getTiddlerText("DefaultTiddlers").readBracketedList();
story.closeAllTiddlers();
story.displayTiddlers(null,tids);
}
}
if (Story.prototype.SPM_coreDisplayTiddler==undefined)
Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)
{
var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
var tiddlerElem=story.getTiddler(title); // ==null unless tiddler is already displayed
var opt=config.options;
var single=opt.chkSinglePageMode && !startingUp;
var top=opt.chkTopOfPageMode && !startingUp;
var bottom=opt.chkBottomOfPageMode && !startingUp;
if (single) {
story.forEachTiddler(function(tid,elem) {
// skip current tiddler and, optionally, tiddlers that are folded.
if ( tid==title
|| (opt.chkSinglePageKeepFoldedTiddlers && elem.getAttribute("folded")=="true"))
return;
// if a tiddler is being edited, ask before closing
if (elem.getAttribute("dirty")=="true") {
if (opt.chkSinglePageKeepEditedTiddlers) return;
// if tiddler to be displayed is already shown, then leave active tiddler editor as is
// (occurs when switching between view and edit modes)
if (tiddlerElem) return;
// otherwise, ask for permission
var msg="'"+tid+"' is currently being edited.\n\n";
msg+="Press OK to save and close this tiddler\nor press Cancel to leave it opened";
if (!confirm(msg)) return; else story.saveTiddler(tid);
}
story.closeTiddler(tid);
});
}
else if (top)
arguments[0]=null;
else if (bottom)
arguments[0]="bottom";
if (single && opt.chkSinglePagePermalink && !config.browser.isSafari) {
window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));
config.lastURL = window.location.hash;
document.title = wikifyPlain("SiteTitle") + " - " + title;
if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
}
if (tiddlerElem && tiddlerElem.getAttribute("dirty")=="true") { // editing... move tiddler without re-rendering
var isTopTiddler=(tiddlerElem.previousSibling==null);
if (!isTopTiddler && (single || top))
tiddlerElem.parentNode.insertBefore(tiddlerElem,tiddlerElem.parentNode.firstChild);
else if (bottom)
tiddlerElem.parentNode.insertBefore(tiddlerElem,null);
else this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
} else
this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
var tiddlerElem=story.getTiddler(title);
if (tiddlerElem&&opt.chkSinglePageAutoScroll) {
// scroll to top of page or top of tiddler
var isTopTiddler=(tiddlerElem.previousSibling==null);
var yPos=isTopTiddler?0:ensureVisible(tiddlerElem);
// if animating, defer scroll until after animation completes
var delay=opt.chkAnimate?config.animDuration+10:0;
setTimeout("window.scrollTo(0,"+yPos+")",delay);
}
}
if (Story.prototype.SPM_coreDisplayTiddlers==undefined)
Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function() {
// suspend single/top/bottom modes when showing multiple tiddlers
var opt=config.options;
var saveSPM=opt.chkSinglePageMode; opt.chkSinglePageMode=false;
var saveTPM=opt.chkTopOfPageMode; opt.chkTopOfPageMode=false;
var saveBPM=opt.chkBottomOfPageMode; opt.chkBottomOfPageMode=false;
this.SPM_coreDisplayTiddlers.apply(this,arguments);
opt.chkBottomOfPageMode=saveBPM;
opt.chkTopOfPageMode=saveTPM;
opt.chkSinglePageMode=saveSPM;
}
//}}}
@@color(#FF8000):''Personal webpage''@@ - Research on computer vision
#mainMenu {
position:relative;
float:left;
margin-left:0.5em;
margin-bottom:0em;
text-align:right;
padding: 1.2em 2em 0em 0em;
width:10.5em;
}
#mainMenu a {
display: block;
margin-bottom: -1.1em;
padding: 0px 0px 0px 0px;
border-bottom: 1px solid [[ColorPalette::SecondaryPale]];
font-family:arial, helvetica; font-size:16px; font-weight:bold;
}
#mainMenu a:link, #navlist a:visited {
color:[[ColorPalette::SecondaryDark]];
}
#mainMenu a:hover {
background-color: [[ColorPalette::SecondaryPale]];
color:[[ColorPalette::SecondaryDark]];
}
.noBorder,.noBorder td,.noBorder th,.noBorder tr{
border:0 !important; text-align:left;}
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}
h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}
.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}
.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}
.tabSelected{color:[[ColorPalette::PrimaryDark]];
background:[[ColorPalette::TertiaryPale]];
border-left:1px solid [[ColorPalette::TertiaryLight]];
border-top:1px solid [[ColorPalette::TertiaryLight]];
border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}
#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}
.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}
#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}
.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}
.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}
.tiddler .defaultCommand {font-weight:bold;}
.shadow .title {color:[[ColorPalette::TertiaryDark]];}
.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}
.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}
.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryPale]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}
.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}
.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}
.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}
.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}
.imageLink, #displayArea .imageLink {background:transparent;}
.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}
.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}
.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}
.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}
.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}
.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}
body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}
h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}
hr {height:1px;}
a {text-decoration:none;}
dt {font-weight:bold;}
ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}
.txtOptionInput {width:11em;}
#contentWrapper .chkOptionInput {border:0;}
.externalLink {text-decoration:underline;}
.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}
.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}
/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}
#mainMenu .tiddlyLinkExisting,
#mainMenu .tiddlyLinkNonExisting,
#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}
.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:0px; top:0px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}
.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}
#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}
#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}
.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}
#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}
.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}
.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}
.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}
#contentWrapper {display:block;}
#splashScreen {display:none;}
#displayArea {margin:1em 17em 0em 14em;}
.toolbar {text-align:right; font-size:.9em;}
.tiddler {padding:1em 1em 0em 1em;}
.missing .viewer,.missing .title {font-style:italic;}
.title {font-size:1.6em; font-weight:bold;}
.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}
.tiddler .button {padding:0.2em 0.4em;}
.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:left;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagged li, .tagged ul { display:inline;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}
.footer {font-size:.9em;}
.footer li {display:inline;}
.annotation {padding:0.5em; margin:0.5em;}
* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}
.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}
.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}
.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}
.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}
.sparkline {line-height:1em;}
.sparktick {outline:0;}
.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}
* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}
.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
Recently, I've been working on traffic surveillance applications. Specifically, my target was to allow a single camera system to detect, track, and estimate the volume of the vehicles in a traffic flow monitoring infrastructure. This work was carried out with other colleagues in Vicomtech, and a short demo of the result can be seen in the Vicomtech Youtube channel:
[img[./images/youtubeVicomtech.png][http://www.youtube.com/user/VICOMTech]]
And the shortcut to the specific video about traffic surveillance:
<html><object style="height: 390px; width: 640px"><param name="movie" value="http://www.youtube.com/v/8gKiLrx1N8w?version=3"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="http://www.youtube.com/v/8gKiLrx1N8w?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"></object></html>
Here you are the presentation I did for the [[VISAPP2011|http://www.visapp.visigrapp.org/]] conference, held in Algarve, 5-7 March.
<html><div style="width:425px" id="__ss_7129684"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/marcosnietodoncel/realtime-3d-modeling-of-vehicles-in-lowcost-monocamera-systems" title="REAL-TIME 3D MODELING OF VEHICLES IN LOW-COST MONOCAMERA SYSTEMS">REAL-TIME 3D MODELING OF VEHICLES IN LOW-COST MONOCAMERA SYSTEMS</a></strong><object id="__sse7129684" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2011visappmnietov0-1-110303015751-phpapp01&stripped_title=realtime-3d-modeling-of-vehicles-in-lowcost-monocamera-systems&userName=marcosnietodoncel" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse7129684" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2011visappmnietov0-1-110303015751-phpapp01&stripped_title=realtime-3d-modeling-of-vehicles-in-lowcost-monocamera-systems&userName=marcosnietodoncel" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/marcosnietodoncel">Marcos Nieto</a>.</div></div></html>
The following code computes vanishing points in images or sequences of images (videos or live camera). This is an implementation in C++ of a ''RANSAC''-based detection method (see references at the end of the page).
''Multiple vanishing points'' can be computed for each image, which can be finite or ''infinite vanishing points''.
The method requires not the camera to be calibrated, and it uses the Canny edge detection method and the PPHT (Progressive Probabilistic Hough Transform) to obtain line segments.
The following sample image shows 3 detected vanishing points. One of them (the green one) is inside the limits of the image, and therefore it is painted.
The two others are outside, but the line segments that meet them are painted in groups (blue and red).
This sample image has been taken from the excellent [[York Urban Database|http://www.elderlab.yorku.ca/YorkUrbanDB/]]
[img[./images/vp/vp.png]]
!Code
The code has been written in C++. Although it is not optimized, it can run in real-time in most configurations.
The source code is provided with a ~CMakeLists.txt that can be used to compile the solution in different platforms. I have tested it in Windows XP, Windows 7, Ubuntu 10.04, and Ubuntu 11.10.
!!Execution instructions
{{{
**************************************************************************************************
* Vanishing point detection using Hough and MSAC
* ----------------------------------------------------
*
* Author:Marcos Nieto
* www.marcosnieto.net
* marcos.nieto.doncel@gmail.com
*
* Date:01/12/2011
**************************************************************************************************
*
* Usage:
* -numVps # Number of vanishing points to detect (at maximum)
* -mode # Estimation mode (default is NIETO): LS (Least Squares), NIETO
* -video # Specifies video file as input (if not specified, camera is used)
* -image # Specifies image file as input (if not specified, camera is used)
* -verbose # Actives verbose: ON, OFF (default)
* -play # ON: the video runs until the end; OFF: frame by frame (key press event)
* -resizedWidth # Specifies the desired width of the image (the height is computed to keep aspect ratio)
* Example:
* vanishingPoint -numVps 2 -video myVideo.avi -verbose ON
* vanishingPoint -numVps 2 -image myImage.jpg
* vanishingPoint -numVps 1 -play OFF -resizedWidth 640
*
* Keys:
* Esc: Quit
}}}
!Downloads and instructions
* [[vanishingPoint_20120331.tar|code/vp/download.html]] Untar and create a solution using ~CMake.
!Dependencies
*[[OpenCV|http://opencv.willowgarage.com/wiki/]]: The solution uses ~OpenCV for its data structures, and the sample for the implementation of the Canny and PPHT algorithms. You can find a quick guide for installing ~OpenCV [[here|http://marcosnietoblog.wordpress.com/2011/11/19/opencv-for-windows-easy-installation-using-cmake/]]
*~Levenberg-Marquardt [[lmfit|http://joachimwuttke.de/lmfit/index.html]]: This is a great and ready-to-use implementatio of the non-linear optimization procedure.
!References
* ''M. Nieto'' and L. Salgado, "Real-time robust estimation of vanishing points through nonlinear optimization," in IS&T/SPIE Int. Conf. on ~Real-Time Image and Video Processing, SPIE vol. 7724, 772402, 2010. (DOI 10.1117/12.854592)<html> <a href=http://adsabs.harvard.edu/abs/2010SPIE.7724E...1N target="_blank"><img src="./images/info.png"></a><a href=./orals/2010_MNietoLSalgado_v0.1.pdf target="_blank"><img src="./images/presentation.png"></a> </html>
* ''M. Nieto'', "Detection and tracking of vanishing points in dynamic environments," PhD Thesis, Universidad Politécnica de Madrid, 2010. <html> <a href=http://oa.upm.es/4837/1/MARCOS_NIETO_DONCEL.pdf target="_blank"><img src="./images/pdf.gif"></a> </html>
<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='tagging' macro='tagging'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<div class='tagged' macro='tags'></div>