<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5001020298892983557</id><updated>2011-11-27T16:04:20.315-08:00</updated><title type='text'>Visual Radar Detection</title><subtitle type='html'>Investigation of detecting spinning radars in video.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-2018154129574499562</id><published>2009-03-11T13:36:00.001-07:00</published><updated>2009-03-11T13:50:48.872-07:00</updated><title type='text'>Final Presentation</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="http://docs.google.com/Presentation?docid=ddw5976g_20gk3t27fw&amp;amp;hl=en"&gt;PPT File&lt;/a&gt; (preferred)&lt;br /&gt;&lt;a href="http://docs.google.com/fileview?id=F.f6f8e4a7-fdf6-407d-9c2a-13ed59fcaf56"&gt;PDF File&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left; font-weight: bold;"&gt;Feature Extraction&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-8c3546d6f53b1d45" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v11.nonxt2.googlevideo.com/videoplayback?id%3D8c3546d6f53b1d45%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6FAB97927DB63BEE232DE66EA199DE066D8293E5.4E9FD29BAAB3DFA740A7F4E7BB21C5D02C18E869%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D8c3546d6f53b1d45%26offsetms%3D5000%26itag%3Dw160%26sigh%3DNB9ACxR8ceaBVue3FiShstAJUa0&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v11.nonxt2.googlevideo.com/videoplayback?id%3D8c3546d6f53b1d45%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6FAB97927DB63BEE232DE66EA199DE066D8293E5.4E9FD29BAAB3DFA740A7F4E7BB21C5D02C18E869%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D8c3546d6f53b1d45%26offsetms%3D5000%26itag%3Dw160%26sigh%3DNB9ACxR8ceaBVue3FiShstAJUa0&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-weight: bold;"&gt;Tracking/Stabilization&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-c9e6789f84cdab46" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v18.nonxt4.googlevideo.com/videoplayback?id%3Dc9e6789f84cdab46%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3EC6EE8B8F3354517939755D12F65A769942F4A7.69E1D1E06DB75A9C230BF7D440174792746410FD%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dc9e6789f84cdab46%26offsetms%3D5000%26itag%3Dw160%26sigh%3D7i-qUvbAA8KeirGEy8TwtaYBPgo&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v18.nonxt4.googlevideo.com/videoplayback?id%3Dc9e6789f84cdab46%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3EC6EE8B8F3354517939755D12F65A769942F4A7.69E1D1E06DB75A9C230BF7D440174792746410FD%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dc9e6789f84cdab46%26offsetms%3D5000%26itag%3Dw160%26sigh%3D7i-qUvbAA8KeirGEy8TwtaYBPgo&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Helix&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-3afa78fd89df6c78" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v18.nonxt2.googlevideo.com/videoplayback?id%3D3afa78fd89df6c78%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D5563038FE38982424C38AC7036D2DBE4CB65D41A.374C463B4063330ADEF989AF6838CBA84EDFCEF9%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D3afa78fd89df6c78%26offsetms%3D5000%26itag%3Dw160%26sigh%3DvlthOITTuPoS4CucI9rxw6VZMp0&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v18.nonxt2.googlevideo.com/videoplayback?id%3D3afa78fd89df6c78%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D5563038FE38982424C38AC7036D2DBE4CB65D41A.374C463B4063330ADEF989AF6838CBA84EDFCEF9%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D3afa78fd89df6c78%26offsetms%3D5000%26itag%3Dw160%26sigh%3DvlthOITTuPoS4CucI9rxw6VZMp0&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-2018154129574499562?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/2018154129574499562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=2018154129574499562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/2018154129574499562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/2018154129574499562'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/03/final-presentation.html' title='Final Presentation'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-3383502546037253512</id><published>2009-03-07T16:30:00.000-08:00</published><updated>2009-03-09T14:31:02.880-07:00</updated><title type='text'>Delta Matrix</title><content type='html'>The following images are of Delta matrices generated by running RANSAC between every possible frame.  There are 86 frames with an x and y component estimated.  This created a Delta_X and Delta_Y matrix each of size 86x86.&lt;br /&gt;&lt;br /&gt;There are instances where the RANSAC algorithm will not converge well.  I indicate this by leaving an entry in the Delta matrix as &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=%5Cinfty" align="middle" border="0" /&gt;.  These invalid estimates are indicated by the pepper boxes that stick out in the Delta matrices.&lt;br /&gt;&lt;br /&gt;I ran selective median filter on these matrices to remove the invalid &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=%5Cinfty" align="middle" border="0" /&gt; entries.  This was achieved by first starting with a 3x3 box and median filter only on locations that are invalid.  Then enlarge the box to a 5x5 and refilter.  Do this until all the &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=%5Cinfty" align="middle" border="0" /&gt; values are gone.  I padded the images by replicating the edges to account for border issues.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i9TGH7RzARs/SbMUu5HlKHI/AAAAAAAAAnM/NBcVbhJb0vU/s1600-h/delta_x.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_i9TGH7RzARs/SbMUu5HlKHI/AAAAAAAAAnM/NBcVbhJb0vU/s400/delta_x.jpg" alt="" id="BLOGGER_PHOTO_ID_5310611181439101042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i9TGH7RzARs/SbMUukK6qLI/AAAAAAAAAnE/EP5rEUhj-Rg/s1600-h/delta_x_clean.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_i9TGH7RzARs/SbMUukK6qLI/AAAAAAAAAnE/EP5rEUhj-Rg/s400/delta_x_clean.jpg" alt="" id="BLOGGER_PHOTO_ID_5310611175815948466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i9TGH7RzARs/SbMUuPAagcI/AAAAAAAAAm8/cOFrxCL6eN8/s1600-h/delta_y.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_i9TGH7RzARs/SbMUuPAagcI/AAAAAAAAAm8/cOFrxCL6eN8/s400/delta_y.jpg" alt="" id="BLOGGER_PHOTO_ID_5310611170134753730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i9TGH7RzARs/SbMUt7j-dlI/AAAAAAAAAm0/2sGWarGWnMo/s1600-h/delta_y_clean.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_i9TGH7RzARs/SbMUt7j-dlI/AAAAAAAAAm0/2sGWarGWnMo/s400/delta_y_clean.jpg" alt="" id="BLOGGER_PHOTO_ID_5310611164915201618" border="0" /&gt;&lt;/a&gt;Another method which I will try later is to scan from left to right then top to bottom on the matrix.  If an invalid entry is encountered, replace it with the previous value.  For example, if the translation (x direction) from Frame 1 to Frame 20 is 10, then the translation from Frame 1 to Frame 21 should be close to 10 as well (not 1, -10, etc.).&lt;br /&gt;&lt;br /&gt;It's noticeable that these Delta matrices are negative transposes of themselves.  This is a &lt;a href="http://en.wikipedia.org/wiki/Skew-symmetric_matrix"&gt;skew-symmetric matrix&lt;/a&gt;.  The trace of a skew-symmetric matrix is zero which indeed is the case for these Delta matrices.&lt;br /&gt;&lt;br /&gt;What's interesting is that a skew-symmetric matrix, &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=A" align="middle" border="0" /&gt;, satisfies &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=v%5ETAv%3D0%20%5Cforall%20v" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Generating the Delta matrices and then cleaning them with the median filter provide a method to stabilize any frame to another.  This of course is non-causal but can provide a richer set of data to measure periodicity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-3383502546037253512?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/3383502546037253512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=3383502546037253512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/3383502546037253512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/3383502546037253512'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/03/delta-matrix.html' title='Delta Matrix'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i9TGH7RzARs/SbMUu5HlKHI/AAAAAAAAAnM/NBcVbhJb0vU/s72-c/delta_x.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-7164633044566669019</id><published>2009-03-06T19:06:00.000-08:00</published><updated>2009-03-06T19:14:48.052-08:00</updated><title type='text'>RANSAC on Translation Model</title><content type='html'>I implemented a RANSAC algorithm thanks to &lt;a href="http://www.mathworks.com/matlabcentral/fileexchange/18555"&gt;Marco Zuliani&lt;/a&gt;.&lt;br /&gt;This toolbox provides an engine style design where the estimate and error computing are customizable using a callback function.&lt;br /&gt;&lt;br /&gt;The model I used was a simple translation model.  The algorithm would take 2 features sets from two video frames then compute the translation vector (for stabilization). &lt;br /&gt;&lt;br /&gt;What is important is that for each frame, 10 feature points were calculated.  Now the correspondence is unknown between the two frames.  Therefore I had to replicated the vectors to give the RANSAC algorithm all possible correspondences.  It then selects which pairs are in consensus.&lt;br /&gt;&lt;br /&gt;Below are plots of the results.  The inliers selected by RANSAC are indicated by the boxed points.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i9TGH7RzARs/SbHlvPn0D6I/AAAAAAAAAmA/Me6QXIp6wQ0/s1600-h/ransac_30_80.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_i9TGH7RzARs/SbHlvPn0D6I/AAAAAAAAAmA/Me6QXIp6wQ0/s400/ransac_30_80.jpg" alt="" id="BLOGGER_PHOTO_ID_5310278035456659362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i9TGH7RzARs/SbHlupaphpI/AAAAAAAAAl4/dbuFBpLOGFI/s1600-h/ransac_1_85.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_i9TGH7RzARs/SbHlupaphpI/AAAAAAAAAl4/dbuFBpLOGFI/s400/ransac_1_85.jpg" alt="" id="BLOGGER_PHOTO_ID_5310278025200895634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i9TGH7RzARs/SbHluTKzoXI/AAAAAAAAAlw/lp3wRviRVPo/s1600-h/ransac_1_30.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_i9TGH7RzARs/SbHluTKzoXI/AAAAAAAAAlw/lp3wRviRVPo/s400/ransac_1_30.jpg" alt="" id="BLOGGER_PHOTO_ID_5310278019228868978" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-7164633044566669019?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/7164633044566669019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=7164633044566669019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/7164633044566669019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/7164633044566669019'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/03/ransac-on-translation-model.html' title='RANSAC on Translation Model'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i9TGH7RzARs/SbHlvPn0D6I/AAAAAAAAAmA/Me6QXIp6wQ0/s72-c/ransac_30_80.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-4291030596251504935</id><published>2009-03-04T10:47:00.000-08:00</published><updated>2009-03-04T11:39:30.044-08:00</updated><title type='text'>Spatial-Temporal III</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i9TGH7RzARs/Sa7YVwMjlwI/AAAAAAAAAlg/Sg1L5vIs9R0/s1600-h/spatio_temp_feats2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_i9TGH7RzARs/Sa7YVwMjlwI/AAAAAAAAAlg/Sg1L5vIs9R0/s400/spatio_temp_feats2.jpg" alt="" id="BLOGGER_PHOTO_ID_5309418878942811906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i9TGH7RzARs/Sa7YVqkzIyI/AAAAAAAAAlY/tiHxr92Q9M4/s1600-h/spatio_temp_feats.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_i9TGH7RzARs/Sa7YVqkzIyI/AAAAAAAAAlY/tiHxr92Q9M4/s400/spatio_temp_feats.jpg" alt="" id="BLOGGER_PHOTO_ID_5309418877433881378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Above are spatio-temporal plots of features acquired for 86 frames from ship video. For each frame a new set of features were computed and the top 10 were selected.    Therefore there are 10 features for each frame.  There are no correspondence assignments from frame to frame.  These plots show how some features come and go as time progresses as well as the "wiggling" from an unstable video.&lt;br /&gt;&lt;br /&gt;The idea now is to use RANSAC on these feature points to generate a delta matrix containing all the translations for any 2 frames.  From that matrix we should be able to stabilize a buffered video sequence.&lt;br /&gt;&lt;br /&gt;On a logistical note, I used matlab surface plotting to generate this:&lt;br /&gt;&lt;blockquote&gt;FRAMES = 86;&lt;br /&gt;mov = aviread('rdr.avi',1);&lt;br /&gt;I = double(rgb2gray(mov.cdata));&lt;br /&gt;[x, y, val] = klt_read_featuretable('Featgen.ft');&lt;br /&gt;&lt;br /&gt;hold on&lt;br /&gt;&lt;br /&gt;for k = 1:FRAMES&lt;br /&gt;plot3(y(:,k),x(:,k),ones(1,10)*k,'r.')&lt;br /&gt;end&lt;br /&gt;legend('Feature Point')&lt;br /&gt;grid on&lt;br /&gt;&lt;br /&gt;surface(ones(720,480),flipud(I),...&lt;br /&gt;'FaceColor','texturemap',...&lt;br /&gt;'EdgeColor','none',...&lt;br /&gt;'CDataMapping','scaled');&lt;br /&gt;view(-18,72);&lt;br /&gt;colormap gray&lt;br /&gt;&lt;br /&gt;xlabel('x')&lt;br /&gt;ylabel('y')&lt;br /&gt;zlabel('frame')&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-4291030596251504935?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/4291030596251504935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=4291030596251504935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/4291030596251504935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/4291030596251504935'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/03/spatial-temporal-iii.html' title='Spatial-Temporal III'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i9TGH7RzARs/Sa7YVwMjlwI/AAAAAAAAAlg/Sg1L5vIs9R0/s72-c/spatio_temp_feats2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-893994044332363343</id><published>2009-02-27T14:55:00.000-08:00</published><updated>2009-02-28T09:48:48.271-08:00</updated><title type='text'>Stablize and Helix</title><content type='html'>&lt;div style="text-align: left;"&gt;I implemented the stabilization method proposed in the previous post.  I then wrote another video filter that grabbed a scanline after each frame.  Below are video sequences of these methods.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Notice that the tracking works well for several frames until all the features die off.  This shows there must be a more robust method for tracking accounting for the unstable nature of the KLT feature extractions.&lt;br /&gt;&lt;br /&gt;The helix image was generated by grabbing a 480x1 pixels scanline directly over the radar.  The scanline vertical position was dependent on the stabilization parameters.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-c9e6789f84cdab46" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v18.nonxt4.googlevideo.com/videoplayback?id%3Dc9e6789f84cdab46%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6628CDC3D99B53DC6B5560F1A2E20EC4033A4459.191875B7BD510E637ACD851BB6D4AC0AE30BCB42%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dc9e6789f84cdab46%26offsetms%3D5000%26itag%3Dw160%26sigh%3D7i-qUvbAA8KeirGEy8TwtaYBPgo&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v18.nonxt4.googlevideo.com/videoplayback?id%3Dc9e6789f84cdab46%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6628CDC3D99B53DC6B5560F1A2E20EC4033A4459.191875B7BD510E637ACD851BB6D4AC0AE30BCB42%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dc9e6789f84cdab46%26offsetms%3D5000%26itag%3Dw160%26sigh%3D7i-qUvbAA8KeirGEy8TwtaYBPgo&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-3afa78fd89df6c78" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v18.nonxt2.googlevideo.com/videoplayback?id%3D3afa78fd89df6c78%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D1EFD42D90DA65933E19B996C2295D4163B3BDDB9.750297F62BEF231AA84DFC7869E72BE74C0F481B%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D3afa78fd89df6c78%26offsetms%3D5000%26itag%3Dw160%26sigh%3DvlthOITTuPoS4CucI9rxw6VZMp0&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v18.nonxt2.googlevideo.com/videoplayback?id%3D3afa78fd89df6c78%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D1EFD42D90DA65933E19B996C2295D4163B3BDDB9.750297F62BEF231AA84DFC7869E72BE74C0F481B%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D3afa78fd89df6c78%26offsetms%3D5000%26itag%3Dw160%26sigh%3DvlthOITTuPoS4CucI9rxw6VZMp0&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-893994044332363343?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=3afa78fd89df6c78&amp;type=video%2Fmp4' length='0'/><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=c9e6789f84cdab46&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/893994044332363343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=893994044332363343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/893994044332363343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/893994044332363343'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/02/stablize-and-helix.html' title='Stablize and Helix'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-3676598146631556325</id><published>2009-02-25T13:18:00.000-08:00</published><updated>2009-02-25T13:49:53.916-08:00</updated><title type='text'>Revisiting Stabilization</title><content type='html'>In order to test the algorithm I proposed in the last post I need more video samples.  This has forced me to revisit stabilization.&lt;br /&gt;&lt;br /&gt;I plan to implement a crude stabilization using KLT to get feature points and then use a variation of the trajectory conditioning algorithm presented by Rabaud and Belongie (&lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=3&amp;amp;url=http%3A%2F%2Fvision.ucsd.edu%2F%7Evrabaud%2Fpapers%2FCountingCrowdedMovingObjects_CVPR06.pdf&amp;amp;ei=ObalSamrGYzVnQf4msmYBQ&amp;amp;usg=AFQjCNGr7q5WpUmA5gHkTrZ1ujuXXHykJg&amp;amp;sig2=LC5HoBHXUkLJ4jtpxkpsuQ"&gt;Counting Crowded Moving Objects&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;The conditioning algorithm is used in a model assuming several small pixel subsets exhibit the same translative behavior.  I can simplify this by assuming there is one large subset of pixels in the video frame that exhibit the same translation. This large subset of pixels is the ship in the video sequence.&lt;br /&gt;&lt;br /&gt;I propose a method to generate several KLT points which should be "stuck" on the ship.  I then calculate the centroid of the points.  The next frame I track the KLT features and compute the new centroid.  The translation motion is then estimated by taking the difference of centroids.&lt;br /&gt;&lt;br /&gt;This doesn't account for loss of features during the KLT tracking process.  I am considering using a method of penalizing the translation vector estimate if features are lost.  I do this by calculating the variance of the feature points in each frame.  If the variance decreases, then I want the translation to be minimized.&lt;br /&gt;&lt;br /&gt;Let's consider a 1 dimensional case.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i9TGH7RzARs/SaW85hpLLkI/AAAAAAAAAlI/kjWIj5UYGDo/s1600-h/Untitled-1+copy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 511px; height: 260px;" src="http://1.bp.blogspot.com/_i9TGH7RzARs/SaW85hpLLkI/AAAAAAAAAlI/kjWIj5UYGDo/s400/Untitled-1+copy.jpg" alt="" id="BLOGGER_PHOTO_ID_5306855432395632194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Each horizontal line is a 1 dimensional real line where a feature point may lie at time Fx.  The features are indicated by red crosses.&lt;br /&gt;The blue diamond is the calculated centroid of the feature points at time Fx.  The green circle is the "true" centroid of the hidden object the feature points are attached.&lt;br /&gt;A solid line indicates the correct translation vector and the dashed line is the false trajectory.&lt;br /&gt;The translation from F1 to F2 is correct with no variance change in the feature points.&lt;br /&gt;F2 to F3 has a loss in a feature causing the variance to decrease.  This causes a false trajectory estimate.&lt;br /&gt;F3 to F4 also has a false trajectory due to a loss of a feature point.  Note the variance decreases.&lt;br /&gt;F3 to F4 has a correct trajectory estimate with the variance not changing.&lt;br /&gt;&lt;br /&gt;From this scenario I will induce a weight term on the trajectory shown in equation (1).&lt;br /&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=%20T%3Dmin%28%20%5Cfrac%7Bvar%28f_b%29%7D%7Bvar%28f_a%29%7D,%201%29%28m_b%20-%20m_a%29" align="middle" border="0" /&gt;  (1)&lt;br /&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=m_z" align="middle" border="0" /&gt; is the centroid of the feature points at frame z&lt;br /&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=var%28f_z%29" align="middle" border="0" /&gt; is the variance of the feature points at frame z&lt;br /&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=T" align="middle" border="0" /&gt; is the estimate translation&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-3676598146631556325?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/3676598146631556325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=3676598146631556325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/3676598146631556325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/3676598146631556325'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/02/revisiting-stabilization.html' title='Revisiting Stabilization'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i9TGH7RzARs/SaW85hpLLkI/AAAAAAAAAlI/kjWIj5UYGDo/s72-c/Untitled-1+copy.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-7605410913395528081</id><published>2009-02-20T15:20:00.000-08:00</published><updated>2009-02-20T15:48:10.279-08:00</updated><title type='text'>Simpler Match Metric</title><content type='html'>After working with the lattice match method for measuring the period, I thought there would possibly be a simpler method given the type of data I'm working with.&lt;br /&gt;&lt;br /&gt;Suppose I do a match metric only on the scanline plot.  I would compare scanlines separted by time (in frames) and use a simple match metric (sum of absolute differences.)  I also know the typical period the radar and can limit the match search window.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i9TGH7RzARs/SZ89Eb1vgrI/AAAAAAAAAkA/arXutK5ZmoA/s1600-h/sad_explain.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_i9TGH7RzARs/SZ89Eb1vgrI/AAAAAAAAAkA/arXutK5ZmoA/s400/sad_explain.jpg" alt="" id="BLOGGER_PHOTO_ID_5305026032467673778" border="0" /&gt;&lt;/a&gt;As shown above, a match matrix &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=M%28scanline%28t%29,%20f%29" align="middle" border="0" /&gt; would be generated by:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=M%28s%28t%29,f%29%3D%5Csum_%7Bk%5Cin%20%28T_%7Bmin%7D,%20T_%7Bmax%7D%29%7D%20%5Cvert%20I%28s%28t%29,f%29-I%28s%28t%29,f%2Bk%29%20%5Cvert" align="middle" border="0" /&gt;  (1)&lt;br /&gt;&lt;br /&gt;Where Tmin and Tmax are the minimum and maximum period times.&lt;br /&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=I%28s%28t%29,f%29" align="middle" border="0" /&gt; is the pixel value at scanline &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=s%28t%29" align="middle" border="0" /&gt; at time (or frame) &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=f" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;A plot of &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=M%28s%28t%29,f%29" align="middle" border="0" /&gt; for the stabilized scanline image is shown below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i9TGH7RzARs/SZ8_krqUDXI/AAAAAAAAAkI/84l3bTCTeFo/s1600-h/sad_stab.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_i9TGH7RzARs/SZ8_krqUDXI/AAAAAAAAAkI/84l3bTCTeFo/s400/sad_stab.jpg" alt="" id="BLOGGER_PHOTO_ID_5305028785493773682" border="0" /&gt;&lt;/a&gt;If everything was ideal, there should be a vertical minimum channel at the period location (72 frames).&lt;br /&gt;&lt;br /&gt;Taking a look at the 3D meshplot shows this behaviour:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i9TGH7RzARs/SZ8_4Pk10cI/AAAAAAAAAkQ/b4GUKXVfvNA/s1600-h/sad_meshplot_stab.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_i9TGH7RzARs/SZ8_4Pk10cI/AAAAAAAAAkQ/b4GUKXVfvNA/s400/sad_meshplot_stab.jpg" alt="" id="BLOGGER_PHOTO_ID_5305029121552011714" border="0" /&gt;&lt;/a&gt;If suspect that I can take the matrix &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=M%28s%28t%29,f%29" align="middle" border="0" /&gt; and stack the rows by summing them together and select the frame that has the minimum value.  That frame will correspond to the periodic rate.  This indeed is the case with value of 73, which is really close.  If I do the same calculation with the raw scanline image, I get a value of 71 frames.  I definitely need more data to test this idea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-7605410913395528081?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/7605410913395528081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=7605410913395528081' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/7605410913395528081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/7605410913395528081'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/02/simpler-match-metric.html' title='Simpler Match Metric'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i9TGH7RzARs/SZ89Eb1vgrI/AAAAAAAAAkA/arXutK5ZmoA/s72-c/sad_explain.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-641594551446424996</id><published>2009-02-18T14:12:00.000-08:00</published><updated>2009-02-20T15:03:39.723-08:00</updated><title type='text'>Lattice Match</title><content type='html'>I had to decipher jargon in the Cutler-Davis paper a little bit more to figure out how they developed the algorithm to measure the periodic rate.&lt;br /&gt;&lt;br /&gt;The following are the match measure requirements for &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=e" align="middle" border="0" /&gt; :&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=B_i%20%3D%20%5C%7BP_i%7C%20%7CM_%7Bd,i%7D-P_i%7C%20%5Cle%20%5Cmin_%7Bi%20%5Cne%20j%7D%7CM_%7Bd,i%7D-P_j%7C,%20T_D%20%5Cwedge%20A%28P_i%29%3CT_A%5C%7D" align="middle" border="0" /&gt;  (1)&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=e%28M_d%29%20=%20%5Csum_i%20%7CM_%7Bd,i%7D-B_i%7C" align="middle" border="0" /&gt;  (2)&lt;br /&gt;&lt;br /&gt;The trick was to develop the matrix containing the peaks from the autocorrelation matrix, &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=P_i" align="middle" border="0" /&gt;&lt;br /&gt;This was achieved by gaussian filtering the autocor. matrix and then running through each pixel and label it a peak if it is a strictly maximum value within some local neighborhood radius N.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i9TGH7RzARs/SZ82kuqGu1I/AAAAAAAAAj4/0Su9kiUuhqQ/s1600-h/auto_stab_w.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_i9TGH7RzARs/SZ82kuqGu1I/AAAAAAAAAj4/0Su9kiUuhqQ/s400/auto_stab_w.jpg" alt="" id="BLOGGER_PHOTO_ID_5305018890693557074" border="0" /&gt;&lt;/a&gt;The above image is the autocorrelation matrix of the stabilized and weighted similarity matrix.&lt;br /&gt;&lt;br /&gt;Below is image illustrating the peaks found from the autocor. matrix. where there are 7 white pixels indicating the peak locations.  A neighborhood radius of 11 was chosen&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i9TGH7RzARs/SZyKFDGBs6I/AAAAAAAAAig/40m1M3T7T9s/s1600-h/Astar_peaks.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_i9TGH7RzARs/SZyKFDGBs6I/AAAAAAAAAig/40m1M3T7T9s/s400/Astar_peaks.jpg" alt="" id="BLOGGER_PHOTO_ID_5304266280470164386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The next step was to create synthetic lattice matrices parameterized by a distance value which directly relates to the periodic rate.  A square lattice and a 45 degree rotated lattice are used.  These lattices are labeled as &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=M_%7Bd,i%7D" align="middle" border="0" /&gt; in the match metric conditions in equations (1) and (2).  Below is an illustration of the square and rotated lattice structures overllapping the autocorr. matrix.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i9TGH7RzARs/SZyKFU86PGI/AAAAAAAAAio/4e99ijw24UQ/s1600-h/square_lattice.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_i9TGH7RzARs/SZyKFU86PGI/AAAAAAAAAio/4e99ijw24UQ/s400/square_lattice.jpg" alt="" id="BLOGGER_PHOTO_ID_5304266285263764578" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i9TGH7RzARs/SZyOyxS_EvI/AAAAAAAAAi4/yWP1NJu1CKw/s1600-h/rotated_lattice.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_i9TGH7RzARs/SZyOyxS_EvI/AAAAAAAAAi4/yWP1NJu1CKw/s400/rotated_lattice.jpg" alt="" id="BLOGGER_PHOTO_ID_5304271464013173490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The results from this technique measures a distance value of 71 frames which is very accurate.  I have noticed the parameters used for selecting the peaks (such as neighborhood radius) can make the estimation way off.  For instance, the minimum value a peak can have was set to 0.25 to generate the 72 frame estimate.  If I changed the peak value to 0.2 then a distance of 61 frames was chosen.  I will need more data sequences to test this algorithm more to see how sensitive it is to the parameters chosen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-641594551446424996?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/641594551446424996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=641594551446424996' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/641594551446424996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/641594551446424996'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/02/lattice-match.html' title='Lattice Match'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i9TGH7RzARs/SZ82kuqGu1I/AAAAAAAAAj4/0Su9kiUuhqQ/s72-c/auto_stab_w.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-7240467761466008762</id><published>2009-02-16T15:42:00.000-08:00</published><updated>2009-02-20T15:01:56.168-08:00</updated><title type='text'>Autocorrelation of Similarity Matrix</title><content type='html'>The next step from creating similarity matrices is to generate an autocorrelation matrix.  I use the matlab function &lt;span style="font-style: italic;"&gt;normxcorr2()&lt;/span&gt; function for creating a normalized autocorrelation matrix.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i9TGH7RzARs/SZ82ERPseEI/AAAAAAAAAjg/FCKTntbxJzk/s1600-h/auto_raw_w.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_i9TGH7RzARs/SZ82ERPseEI/AAAAAAAAAjg/FCKTntbxJzk/s400/auto_raw_w.jpg" alt="" id="BLOGGER_PHOTO_ID_5305018333042341954" border="0" /&gt;&lt;/a&gt;Below is an autocorrelation plot of the similarity matrix generated by the unstabilized weighted scanline buffer.  It is very difficult to see any pattern in this matrix.&lt;br /&gt;&lt;br /&gt;Stabilizing the image affords a much more tractible autocorrelation of the similarity matrix as seen below.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i9TGH7RzARs/SZ82EdpJy_I/AAAAAAAAAjo/8osjel49T8k/s1600-h/auto_stab.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_i9TGH7RzARs/SZ82EdpJy_I/AAAAAAAAAjo/8osjel49T8k/s400/auto_stab.jpg" alt="" id="BLOGGER_PHOTO_ID_5305018336370346994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;Using a weight function improves the autocorrelation matrix even more:&lt;br /&gt;What is interesting from these autocorrelation plots is that the peaks coincide with the periodic nature of the image sequence.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i9TGH7RzARs/SZ82EVVeTNI/AAAAAAAAAjw/zo8yzouOniQ/s1600-h/auto_stab_w.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_i9TGH7RzARs/SZ82EVVeTNI/AAAAAAAAAjw/zo8yzouOniQ/s400/auto_stab_w.jpg" alt="" id="BLOGGER_PHOTO_ID_5305018334140320978" border="0" /&gt;&lt;/a&gt;For this particular case, the distance between each peak correspond to the periodic rate of the radar.  Shown below, the distance between each peak is 72 frames.  This equates to 72 frames/29.97 fps = 2.4024 seconds/cycle which is roughly 25 rpm which is very accurate.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i9TGH7RzARs/SZn8UZ1EHRI/AAAAAAAAAhw/zBkAVmHBQWM/s1600-h/corr_plot.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 263px;" src="http://1.bp.blogspot.com/_i9TGH7RzARs/SZn8UZ1EHRI/AAAAAAAAAhw/zBkAVmHBQWM/s400/corr_plot.jpg" alt="" id="BLOGGER_PHOTO_ID_5303547463666507026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Cutler and Davis propose a mechanism for solving for the period by creating two different synthetic lattice matrices with the parameter &lt;span style="font-style: italic;"&gt;d&lt;/span&gt; forming the distance between each lattice point.  They run a match of these synthetic lattices with the autocorrelation matrix and choose &lt;span style="font-style: italic;"&gt;d&lt;/span&gt; according to the lattice point that best matches.  My first implementation of this method affords an estimate a distance of 68 instead of 72.  There is an issue with implementation which I will look into later.&lt;br /&gt;&lt;br /&gt;The main problem I see at this point is that even if I can measure the periodic rate of the radar, I'm still not detecting the position of the radar which is the main purpose of the effort.  However measuring the periodicity will provide a means of queuing on pixels with this known periodic parameter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-7240467761466008762?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/7240467761466008762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=7240467761466008762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/7240467761466008762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/7240467761466008762'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/02/autocorrelation-of-similarity-matrix.html' title='Autocorrelation of Similarity Matrix'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i9TGH7RzARs/SZ82ERPseEI/AAAAAAAAAjg/FCKTntbxJzk/s72-c/auto_raw_w.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-150610400022878491</id><published>2009-02-14T10:26:00.001-08:00</published><updated>2009-02-20T14:59:43.704-08:00</updated><title type='text'>Similarity Plots</title><content type='html'>I started to follow the Cutler-Davis paper by generating similarity matrix plots.  These plots are essentially recurrence matrices.&lt;br /&gt;&lt;br /&gt;The similarity matrix was generated by using an absolute difference match metric:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=%20S_%7Bt_1,t_2%7D%3D%5Csum_%7B%28x,y%29%5Cin%20B%7D%7B%7CO_%7Bt_1%7D%28x,y%29%20-%20O_%7Bt_2%7D%28x,y%29%7C%7D" align="middle" border="0" /&gt;  (1)&lt;br /&gt;Where &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=O_%7Bt_r%7D%28x,y%29" align="middle" border="0" /&gt; is an image pixel value at time &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=t_r" align="middle" border="0" /&gt;.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;For this application, I used the buffered image created by grabbing a horizontal slice that overllaped the region where the radar was rotating.  (See the &lt;a href="http://novakinblood.blogspot.com/2009/02/spatial-temporal-ii.html"&gt;Spatial-Temporal II&lt;/a&gt; posting)&lt;br /&gt;&lt;br /&gt;This changes the match metric to be:&lt;br /&gt;&lt;/div&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=S_%7Bt_1,t_2%7D=%5Csum_%7B%28x,y=constant%29%20%5Cin%20%5COmega%7D%5Cvert%20%28I_s%28x,y,t_2%29-I_s%28x,,y,t_1%29%20%5Cvert" align="middle" border="0" /&gt;   (2)&lt;br /&gt;Where &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=%5COmega" align="middle" border="0" /&gt; is all pixel coordinates in an image.&lt;br /&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=I_s%28x,y,t_r%29" align="middle" border="0" /&gt; is a pixel value from the scanline buffer at time &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=t_r" align="middle" border="0" /&gt;.  This is simply a match metric between two scanlines separated by time.  &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=y" align="middle" border="0" /&gt; is a constant because it is just a single horizontal scanline slice at time t.&lt;br /&gt;&lt;br /&gt;The similarity matrix, &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=S_%7Bt_1,t_2%7D" align="middle" border="0" /&gt; , should have a constant valued main diagonal component (&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=K" align="middle" border="0" /&gt;) which is the match of image to itself.    (&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=S_%7Bt_x,t_x%7D%3DK%20%5Cforall%20x%3Dy" align="middle" border="0" /&gt;)  The diagonal is just a self-matching indicator.&lt;br /&gt;&lt;br /&gt;If there is periodicity, there should also be a pattern of values outside the main diagonal.  This is from the image matching itself a period of time later.  For example, suppose you take a snapshot of a clock with the second hand over the 6.  Take another snapshot 60 seconds later and the second hand is in the exact same orientation.&lt;br /&gt;&lt;br /&gt;I also noticed that since the radar is mainly in the center column region of the temporal/spatial buffer I should probably do a weighted version of the absolute difference to attempt to ignore the irrelevant data.  I did this by applying a Hanning window on each horizontal slice.  This gave more weight to the region where the radar is located and does improve the similarity plots.  This changes (2) into&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=S_%7Bt_1,t_2%7D=%5Csum_%7B%28x,y=constant%29%20%5Cin%20%5COmega%7Dw%28x%29*%5Cvert%20%28I_s%28x,y,t_2%29-I_s%28x,,y,t_1%29%20%5Cvert" align="middle" border="0" /&gt;  (3)&lt;br /&gt;where&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=w%28x%29%3D%5Cfrac%7B1%7D%7B2%7D%281-%5Ccos%28%5Cfrac%7B2%5Cpi%20x%7D%7B%5Cvert%5COmega_x%5Cvert%7D%29" align="middle" border="0" /&gt;  (4)&lt;br /&gt;&lt;br /&gt;and &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&amp;amp;eq=%5Cvert%5COmega_x%5Cvert" align="middle" border="0" /&gt; is width of the image.&lt;br /&gt;&lt;br /&gt;In all these plots, notice the blue main diagonal running from top-left down to the bottom-right corner.  Also, the lobes or peaks coincide with the periodic rate of the radar.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i9TGH7RzARs/SZ81lAgT3QI/AAAAAAAAAjA/BnVYk12zgyA/s1600-h/sim_raw.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_i9TGH7RzARs/SZ81lAgT3QI/AAAAAAAAAjA/BnVYk12zgyA/s400/sim_raw.jpg" alt="" id="BLOGGER_PHOTO_ID_5305017795972685058" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i9TGH7RzARs/SZ81lFb1p0I/AAAAAAAAAjI/PI3in733FZc/s1600-h/sim_raw_w.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_i9TGH7RzARs/SZ81lFb1p0I/AAAAAAAAAjI/PI3in733FZc/s400/sim_raw_w.jpg" alt="" id="BLOGGER_PHOTO_ID_5305017797296105282" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i9TGH7RzARs/SZ81lE9oJXI/AAAAAAAAAjQ/bau8Mi8WuyA/s1600-h/sim_stab.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_i9TGH7RzARs/SZ81lE9oJXI/AAAAAAAAAjQ/bau8Mi8WuyA/s400/sim_stab.jpg" alt="" id="BLOGGER_PHOTO_ID_5305017797169390962" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i9TGH7RzARs/SZ81lbyBhXI/AAAAAAAAAjY/Fzu_BKtv8jU/s1600-h/sim_stab_w.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_i9TGH7RzARs/SZ81lbyBhXI/AAAAAAAAAjY/Fzu_BKtv8jU/s400/sim_stab_w.jpg" alt="" id="BLOGGER_PHOTO_ID_5305017803294737778" border="0" /&gt;&lt;/a&gt;The best of these similarity images is the stabilized and weighted version.  It has a more uniform appearance.  This shows that stabilization and weighting can improve the similarity plots.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-150610400022878491?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/150610400022878491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=150610400022878491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/150610400022878491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/150610400022878491'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/02/similarity-plots.html' title='Similarity Plots'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i9TGH7RzARs/SZ81lAgT3QI/AAAAAAAAAjA/BnVYk12zgyA/s72-c/sim_raw.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-3048864504791415861</id><published>2009-02-11T14:29:00.000-08:00</published><updated>2009-02-11T14:39:52.321-08:00</updated><title type='text'>Rotation Periods</title><content type='html'>&lt;span style="font-weight: bold;font-family:times new roman;" &gt;RPM&lt;/span&gt;&lt;br /&gt;I browsed around for typical rotation periods for the radars of interest.  What is common among Furuno and Raytheon are the values in RPM:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;24 rpm&lt;/li&gt;&lt;li&gt;36 rpm&lt;/li&gt;&lt;li&gt;48 rpm&lt;/li&gt;&lt;/ul&gt;This is an interval of 20 to 50 rpm which is equivalent to a 1.5 to 2.5 second period.  This will be very useful in designing a bandpass type filter that will allow us to ignore unwanted periodic signals.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Periodic Measurement&lt;/span&gt;&lt;br /&gt;There are at least two methods of measuring the period.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Grab a horizontal slice and match it with another frame X frames later.  Do this for several slices to get a large sample size.  Measure the average.  This method may be a very simplified version of what Cutler and Davis do.  I will need to read &lt;a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?isNumber=18560&amp;amp;prod=CNF&amp;amp;arnumber=854929&amp;amp;arSt=+615&amp;amp;ared=+622&amp;amp;arNumber=854929"&gt;their paper&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Measure the harmonic signals within the "helix" shape using 1D signal processing and resolve the period value.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-3048864504791415861?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/3048864504791415861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=3048864504791415861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/3048864504791415861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/3048864504791415861'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/02/rotation-periods.html' title='Rotation Periods'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-4602850919522460944</id><published>2009-02-05T17:01:00.001-08:00</published><updated>2009-02-05T22:06:46.680-08:00</updated><title type='text'>Spatial-Temporal II</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-ba4fa7594bcc3253" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v18.nonxt6.googlevideo.com/videoplayback?id%3Dba4fa7594bcc3253%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3F56D75C1544B0B9E71425301F2E1A7982997B3E.293B77AD02B8936D7E40FFCE39BB394019B862DA%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dba4fa7594bcc3253%26offsetms%3D5000%26itag%3Dw160%26sigh%3DRlUibgHXyRrH-HgWO_VCJMbHIhU&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v18.nonxt6.googlevideo.com/videoplayback?id%3Dba4fa7594bcc3253%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3F56D75C1544B0B9E71425301F2E1A7982997B3E.293B77AD02B8936D7E40FFCE39BB394019B862DA%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dba4fa7594bcc3253%26offsetms%3D5000%26itag%3Dw160%26sigh%3DRlUibgHXyRrH-HgWO_VCJMbHIhU&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;The above video is from stabilizing and differencing a ship with radar video sequence.  The motion of the radar is noticed by the vertical edges of the spinning armature.&lt;br /&gt;&lt;br /&gt;Keeping in mind the findings from the&lt;a href="http://novakinblood.blogspot.com/2009/02/spatial-temporal-i.html"&gt; previous post&lt;/a&gt;, let's take a horizontal slice of each frame instead of vectorizing the whole frame.  I'm going to cheat by taking a scanline that directly overlaps where the radar is located which is the 204th row.  Below is a snapshot of a video frame with a yellow box indicating the general region of the scanline location.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i9TGH7RzARs/SYuN7MQM1lI/AAAAAAAAAfg/A_M9jWYCBbY/s1600-h/slice.jpg"&gt;&lt;img style="cursor: pointer; width: 236px; height: 157px;" src="http://2.bp.blogspot.com/_i9TGH7RzARs/SYuN7MQM1lI/AAAAAAAAAfg/A_M9jWYCBbY/s320/slice.jpg" alt="" id="BLOGGER_PHOTO_ID_5299485434572494418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Suppose we take a horizontal scanline at the same location for each frame and stack them into a matrix where each successive frame is a new row in the matrix.  The size of this matrix is (number of frames)x(scanwidth).  Essentially this new matrix is a spatio-temporal image of one slice.&lt;br /&gt;&lt;br /&gt;What's really interesting is the result from doing this procedure on a video with a periodic rigid object.&lt;br /&gt;&lt;br /&gt;Below is spatio-temporal image scanline of the raw video sequence (no stabilization or differencing).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i9TGH7RzARs/SYuPWaxEj-I/AAAAAAAAAfo/9DBbt_bjc7c/s1600-h/raw_scanline.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 337px;" src="http://3.bp.blogspot.com/_i9TGH7RzARs/SYuPWaxEj-I/AAAAAAAAAfo/9DBbt_bjc7c/s400/raw_scanline.jpg" alt="" id="BLOGGER_PHOTO_ID_5299487001836556258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;The radar in this video had one side that was blue and the other side was white.  This is seen in the blue boxed region.  Notice the shape induced by the periodic motion of the radar is distinct, like a helix.  This video sequence did not have stabilization therefore the radar "vanishes" starting near the 70th frame.  This is from the ship moving up or down in the image.  It is also evident the video is not stabilized from the skewed vertical lines.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;The next spatial-temporal scanline image is from a stabilized version of the video.  The radar "helix" signature doesn't vanish.  The period can be measured by counting the number of frames between each junction.  Since this video was stabilized, the vertical lines are almost perfectly verticle.  One can see the left 1/3rd of the radar armature is occluded.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i9TGH7RzARs/SYvBg82Sf_I/AAAAAAAAAfw/sfS_vXHtTiQ/s1600-h/stabile_scanline.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 268px;" src="http://3.bp.blogspot.com/_i9TGH7RzARs/SYvBg82Sf_I/AAAAAAAAAfw/sfS_vXHtTiQ/s400/stabile_scanline.jpg" alt="" id="BLOGGER_PHOTO_ID_5299542158365327346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;These images took advantage of the fact that the radar has a distinct color difference between the front and back of the armature.  Looking at difference frames can possibly remove the dependence on color and still afford the same "helix" shape.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i9TGH7RzARs/SYvQV-c3frI/AAAAAAAAAgQ/YDbfPNCunzE/s1600-h/diff_stab_scanline.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_i9TGH7RzARs/SYvQV-c3frI/AAAAAAAAAgQ/YDbfPNCunzE/s400/diff_stab_scanline.jpg" alt="" id="BLOGGER_PHOTO_ID_5299558462491426482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;The above image is the same spatial-temporal image using the stabilized difference video shown at the very beginning of this video.  The colormap "Jet" was used to enhance the lines more.  It's more useful to view this with a threshold as shown below.  Again, the helix shape appears.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i9TGH7RzARs/SYvQ8m3RFQI/AAAAAAAAAgY/fzDB7iFpFBE/s1600-h/thresh_scanline.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_i9TGH7RzARs/SYvQ8m3RFQI/AAAAAAAAAgY/fzDB7iFpFBE/s400/thresh_scanline.jpg" alt="" id="BLOGGER_PHOTO_ID_5299559126174602498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;I will investigate other video sequences with this same approach and will see if the same results occur.&lt;br /&gt;&lt;br /&gt;Another observation was made during this process.  Pertaining the previous post, it seams that if I know the periodic rate of the radar, I may be able to stabilize the image.  Whereas if I stabilize the image, a periodic signal will arise.&lt;br /&gt;&lt;br /&gt;The images generated in this post is dependent on knowing where the radar is.  A brute force method may be to move the scanline sequentially until this "helix" shape appears.  Or, maybe do an angled scanline instead.  The line would run from top-left down to the bottom-right corner (or vice-versa).  Also, I could scan vertically which would provide results similar to the previous post.&lt;br /&gt;&lt;br /&gt;The trick is coming up with methods that are accurate but not processor intensive.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-4602850919522460944?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=ba4fa7594bcc3253&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/4602850919522460944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=4602850919522460944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/4602850919522460944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/4602850919522460944'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/02/spatial-temporal-ii.html' title='Spatial-Temporal II'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i9TGH7RzARs/SYuN7MQM1lI/AAAAAAAAAfg/A_M9jWYCBbY/s72-c/slice.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-1376384759582926186</id><published>2009-02-02T14:24:00.000-08:00</published><updated>2009-02-02T14:55:52.923-08:00</updated><title type='text'>Spatial-Temporal I</title><content type='html'>I was able to generate a rather stabilized image sequence using the KLT method mentioned previously.  I disabled recreating features for each one lost and this provided a rather stable transformation for this particular video.&lt;br /&gt;&lt;br /&gt;Before I delved into more research I decided to investigate the periodicity of the video sequence myself.  I first grabbed the first 60 frames from the video.  For each frame, I created a vector form of it using matlab.  Each video frame is a 720x480 RGB frame.  I converted each frame to Gray and then reshaped it into a 1x(720*480) vector.  This 1x345600 vector was stored in a 60x345600 matrix: M.&lt;br /&gt;&lt;br /&gt;The rows in M represent each frame of the video.  Each column of M represented each individual pixel of the image.&lt;br /&gt;&lt;br /&gt;I conjectured that if the video is perfectly stabilized, I should see a periodic signal in individual pixels caused by the spinning radar.&lt;br /&gt;&lt;br /&gt;I used intuition to save time and memory by viewing the pixels that are located at the center of the video.  This is because the center of the video is where the radar is located.&lt;br /&gt;&lt;br /&gt;Below is an image of that matrix:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i9TGH7RzARs/SYd1AdAZf_I/AAAAAAAAAe4/zYFtkFs0KxA/s1600-h/vector_frame_plot.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 130px;" src="http://4.bp.blogspot.com/_i9TGH7RzARs/SYd1AdAZf_I/AAAAAAAAAe4/zYFtkFs0KxA/s200/vector_frame_plot.jpg" alt="" id="BLOGGER_PHOTO_ID_5298332137271427058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;One can see a periodic signal within this matrix representation at pixel ranges 70, 528, 1004, and 1484.  I was perplexed by the pixel locations of this periodic signal.  However notice that these periodic pixels are ~480 apart.  This is the width of the image.&lt;br /&gt;&lt;br /&gt;I plotted the signals at the latter three pixel ranges and I get a desired periodic (cosine) signal.  This periodic signal is verified as the same period as the radar which is 2.4 seconds.  Each frame is 30ms.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i9TGH7RzARs/SYd16Ovj5KI/AAAAAAAAAfA/Xcih6F1j_D0/s1600-h/sig_plot.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 176px;" src="http://1.bp.blogspot.com/_i9TGH7RzARs/SYd16Ovj5KI/AAAAAAAAAfA/Xcih6F1j_D0/s200/sig_plot.jpg" alt="" id="BLOGGER_PHOTO_ID_5298333129875121314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;What really helped in this investigation is the radar was a Furuno which has a dark blue strip on one side and is white on the other.  This gives the nice pixel variation seen above.&lt;br /&gt;&lt;br /&gt;There is a tool called Recurrence matrices which are a "qualitative and quantitative tool used to perform time series analysis of non-linear dynamical systems" (Cutler, Davis 2000)  This was first introduced by Eckmann et al. in "&lt;a href="http://www.iop.org/EJ/article/0295-5075/4/9/004/epl_4_9_004.pdf?request-id=995257e5-acb2-48ba-b70c-ff0103da9bb7"&gt;Recurrence plots of dynamical systems&lt;/a&gt;".  I will look into this tool to see what benefits I can gain from it.  However, I may get by with just running a bandpass filter or an fft on the pixels of interest like the above.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-1376384759582926186?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/1376384759582926186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=1376384759582926186' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/1376384759582926186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/1376384759582926186'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/02/spatial-temporal-i.html' title='Spatial-Temporal I'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i9TGH7RzARs/SYd1AdAZf_I/AAAAAAAAAe4/zYFtkFs0KxA/s72-c/vector_frame_plot.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-8412452858268507883</id><published>2009-01-27T11:34:00.000-08:00</published><updated>2009-01-28T14:55:03.141-08:00</updated><title type='text'>Dirty Eyes</title><content type='html'>I grabbed some video this week and ran them through my filter and found an interesting issue.&lt;br /&gt;The camera I used had small hair follicle and dirt on it.  This caused the KLT feature selection to select the features of the dirt over the imagery behind it.&lt;br /&gt;&lt;br /&gt;I need to either to ignore this by cleaning the lens or take this into consideration by thinking differently about what behaviors am I interested in from the set of features. &lt;br /&gt;&lt;ol&gt;&lt;li&gt;I want features that are initially translative in "nature" to become fixed (stabilization).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Initially, I want to ignore stationary features with the assumption that there is no feature I'm interested in having the nature of being perfectly stationary.  i.e.  A stationary feature must be from dirt or an object stuck to the viewing apparatus that is of no interest.&lt;/li&gt;&lt;/ol&gt;Of course, the big issue is that once we are tracked, we then fall into category two where the objects on the lens are moving and the interesting features are stationary.  Yikes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-8412452858268507883?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/8412452858268507883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=8412452858268507883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/8412452858268507883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/8412452858268507883'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/01/dirty-eyes.html' title='Dirty Eyes'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-7512131747811154258</id><published>2009-01-19T20:18:00.000-08:00</published><updated>2009-01-19T20:38:39.753-08:00</updated><title type='text'>Initial KLT Implementation</title><content type='html'>I wrote a &lt;a href="http://msdn.microsoft.com/en-us/library/ms783323%28VS.85%29.aspx"&gt;directshow &lt;/a&gt;transform filter that implements the &lt;a href="http://www.ces.clemson.edu/%7Estb/klt/"&gt;KLT&lt;/a&gt; algorithm.&lt;br /&gt;My goal was to get the nitty-gritty stuff completed, such as compiling issues, linking errors, image manipulation issues, etc.&lt;br /&gt;&lt;br /&gt;This is a snapshot of graphedit using the "radar filter" I created.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i9TGH7RzARs/SXVUrvWMmdI/AAAAAAAAAeA/SlYRAy5gyuQ/s1600-h/radar_filter.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 377px; height: 99px;" src="http://2.bp.blogspot.com/_i9TGH7RzARs/SXVUrvWMmdI/AAAAAAAAAeA/SlYRAy5gyuQ/s200/radar_filter.jpg" alt="" id="BLOGGER_PHOTO_ID_5293230047464561106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I needed to convert the video frames into grayscale or convert to HSV and grab the V channel. Using &lt;a href="http://sourceforge.net/projects/opencvlibrary/"&gt;OpenCV&lt;/a&gt; SDK was very helpful with this.&lt;br /&gt;&lt;br /&gt;I found for the most part everything rather easy to piece together.  I wrote code to overlay red crosses to indicate features being tracked.  Below is a sample video of the implementation.  I have better video sequences but I don't feel comfortable posting those online.  This video is obscure enough to post.  However it's so obscure you can see that several feature points get lost during tracking.  This could be due to the fact I was using a sub-par divx decoder along with a very washed out image sequence.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-8c3546d6f53b1d45" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v11.nonxt2.googlevideo.com/videoplayback?id%3D8c3546d6f53b1d45%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3CD062FA7C785D8D419E3E18068E3B715F81069C.73082AA313611989D7D1C18FC631493D96B05A82%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D8c3546d6f53b1d45%26offsetms%3D5000%26itag%3Dw160%26sigh%3DNB9ACxR8ceaBVue3FiShstAJUa0&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v11.nonxt2.googlevideo.com/videoplayback?id%3D8c3546d6f53b1d45%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330037555%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3CD062FA7C785D8D419E3E18068E3B715F81069C.73082AA313611989D7D1C18FC631493D96B05A82%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D8c3546d6f53b1d45%26offsetms%3D5000%26itag%3Dw160%26sigh%3DNB9ACxR8ceaBVue3FiShstAJUa0&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The processing of the video is slow.  It brings the frame rate down from 30 fps to around 2-3 fps.  There exists a KLT SDK that uses the video card GPU to significantly increase speed.  However I don't have a GPU to use on my laptop.  For the sake of researching and investigation methods, I may have to post-process video into "stabilized" video.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-7512131747811154258?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=8c3546d6f53b1d45&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/7512131747811154258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=7512131747811154258' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/7512131747811154258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/7512131747811154258'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/01/initial-klt-implementation.html' title='Initial KLT Implementation'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i9TGH7RzARs/SXVUrvWMmdI/AAAAAAAAAeA/SlYRAy5gyuQ/s72-c/radar_filter.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-868664901271648743</id><published>2009-01-16T10:30:00.000-08:00</published><updated>2009-01-16T10:38:12.233-08:00</updated><title type='text'>Registration Investigation</title><content type='html'>I manually registered images together to see how well it worked.  Overall using the &lt;span style="font-style: italic;"&gt;affine&lt;/span&gt; method works well.&lt;br /&gt;&lt;br /&gt;The following image sequences are registered by pairs.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i9TGH7RzARs/SXDSqJNc2WI/AAAAAAAAAdQ/dTQOiWiVmQ4/s1600-h/reg_32.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 266px; height: 171px;" src="http://3.bp.blogspot.com/_i9TGH7RzARs/SXDSqJNc2WI/AAAAAAAAAdQ/dTQOiWiVmQ4/s200/reg_32.jpg" alt="" id="BLOGGER_PHOTO_ID_5291961183629007202" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i9TGH7RzARs/SXDTF37PTSI/AAAAAAAAAdY/A6t62ryjYII/s1600-h/reg_43.jpg"&gt;&lt;img style="cursor: pointer; width: 239px; height: 156px;" src="http://1.bp.blogspot.com/_i9TGH7RzARs/SXDTF37PTSI/AAAAAAAAAdY/A6t62ryjYII/s200/reg_43.jpg" alt="" id="BLOGGER_PHOTO_ID_5291961660025556258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;I then investigated a different video sequence.  I grabbed the first frame, the 91st frame, and the 182nd frame.  I then registered the 91st and 182nd frame to the first frame.  I only used 3 corresponding points.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i9TGH7RzARs/SXDTkQAGOlI/AAAAAAAAAdg/vtnCE1WiDXs/s1600-h/radar_321.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 129px;" src="http://2.bp.blogspot.com/_i9TGH7RzARs/SXDTkQAGOlI/AAAAAAAAAdg/vtnCE1WiDXs/s200/radar_321.jpg" alt="" id="BLOGGER_PHOTO_ID_5291962181884459602" border="0" /&gt;&lt;/a&gt;Looking carefully, the registration worked well.  Also, note the blurry area caused by the rotation of the radar.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-868664901271648743?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/868664901271648743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=868664901271648743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/868664901271648743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/868664901271648743'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/01/registration-investigation.html' title='Registration Investigation'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i9TGH7RzARs/SXDSqJNc2WI/AAAAAAAAAdQ/dTQOiWiVmQ4/s72-c/reg_32.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-3864243548331951437</id><published>2009-01-14T13:55:00.000-08:00</published><updated>2009-01-14T14:25:33.769-08:00</updated><title type='text'>Verification of Pure Translation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i9TGH7RzARs/SW5kEw7ZKVI/AAAAAAAAAdI/wqTUuKJ4-sk/s1600-h/corr_pts.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 323px; height: 234px;" src="http://1.bp.blogspot.com/_i9TGH7RzARs/SW5kEw7ZKVI/AAAAAAAAAdI/wqTUuKJ4-sk/s200/corr_pts.jpg" alt="" id="BLOGGER_PHOTO_ID_5291276645223180626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The goal of this investigation was to verify the assumption that the stabilization method will only require translation.  The first attempt was to grab corresponding points between frames and calculate the transformation.&lt;br /&gt;&lt;br /&gt;I grabbed 7 frames from a video sequence.  The separation of time between frames was arbitrary.  The above image shows such a procedure using "cpselect" from matlab.  This was a very helpful tool.&lt;br /&gt;&lt;br /&gt;I used the corresponding points from cpselect to compute a transformation matrix in matlab:&lt;br /&gt;&lt;blockquote&gt;t1 = cp2tform(input_points1,base_points1,'affine');&lt;br /&gt;&lt;/blockquote&gt;The &lt;span style="font-style: italic;"&gt;affine&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;nonreflective similarity&lt;/span&gt; modes gave almost the same transformation results.  Each of which exhibited almost pure translation.&lt;br /&gt;&lt;br /&gt;The tables below show the results.  Given a transformation matrix with elements (a-f):&lt;br /&gt;a-d is rotation&lt;br /&gt;e: Translation in X direction&lt;br /&gt;f: Translation in Y direction&lt;br /&gt;&lt;br /&gt;&lt;table style="border-collapse: collapse; width: 585px; height: 299px;" border="0" cellpadding="0" cellspacing="0"&gt;&lt;col style="width: 58pt;" width="77"&gt;  &lt;col style="width: 48pt;" span="6" width="64"&gt;  &lt;tbody&gt;&lt;tr style="height: 15pt;" height="20"&gt;   &lt;td style="height: 15pt; width: 58pt;" width="77" height="20"&gt;&lt;span style="font-weight: bold;"&gt;Transformation&lt;/span&gt;&lt;br /&gt;a&lt;/td&gt;   &lt;td style="width: 48pt;" width="64"&gt;b&lt;/td&gt;   &lt;td style="width: 48pt;" width="64" align="right"&gt;0&lt;/td&gt;   &lt;td style="width: 48pt;" width="64"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="width: 48pt;" width="64"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="width: 48pt;" width="64"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="width: 48pt;" width="64"&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15pt;" height="20"&gt;   &lt;td style="height: 15pt;" height="20"&gt;c&lt;/td&gt;   &lt;td&gt;d&lt;/td&gt;   &lt;td align="right"&gt;0&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15.75pt;" height="21"&gt;   &lt;td style="height: 15.75pt;" height="21"&gt;e&lt;/td&gt;   &lt;td&gt;f&lt;/td&gt;   &lt;td align="right"&gt;1&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15.75pt;" height="21"&gt;   &lt;td class="xl65" style="height: 15.75pt; font-weight: bold;" height="21"&gt;Rotation&lt;/td&gt;   &lt;td class="xl66"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td class="xl66"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td class="xl66"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="text-align: center;" class="xl67"&gt;      &lt;span style="font-weight: bold;"&gt;Tx&lt;/span&gt;&lt;/td&gt;   &lt;td class="xl68" style="border-left: medium none; text-align: center; font-weight: bold;"&gt;Ty&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15pt;" height="20"&gt;   &lt;td class="xl69" style="border-top: medium none; height: 15pt; text-align: center;" height="20"&gt;a&lt;/td&gt;   &lt;td class="xl70" style="border-top: medium none; text-align: center;"&gt;b&lt;/td&gt;   &lt;td class="xl70" style="border-top: medium none; text-align: center;"&gt;c&lt;/td&gt;   &lt;td class="xl70" style="border-top: medium none; text-align: center;"&gt;d&lt;/td&gt;   &lt;td class="xl69" style="border-top: medium none; text-align: center;"&gt;e&lt;/td&gt;   &lt;td class="xl71" style="border-top: medium none; text-align: center;"&gt;f&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15pt;" height="20"&gt;   &lt;td class="xl72" style="height: 15pt; text-align: center;" height="20"&gt;1.0008&lt;/td&gt;   &lt;td style="text-align: center;"&gt;-0.0019&lt;/td&gt;   &lt;td style="text-align: center;"&gt;0.0019&lt;/td&gt;   &lt;td style="text-align: center;"&gt;1.0008&lt;/td&gt;   &lt;td style="text-align: center;" class="xl72"&gt;35.6126&lt;/td&gt;   &lt;td style="text-align: center;" class="xl73"&gt;-5.3519&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15pt;" height="20"&gt;   &lt;td class="xl72" style="height: 15pt; text-align: center;" height="20"&gt;0.9924&lt;/td&gt;   &lt;td style="text-align: center;"&gt;0.0093&lt;/td&gt;   &lt;td style="text-align: center;"&gt;-0.0093&lt;/td&gt;   &lt;td style="text-align: center;"&gt;0.9924&lt;/td&gt;   &lt;td style="text-align: center;" class="xl72"&gt;-67.2525&lt;/td&gt;   &lt;td style="text-align: center;" class="xl73"&gt;15.4407&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15pt;" height="20"&gt;   &lt;td class="xl72" style="height: 15pt; text-align: center;" height="20"&gt;0.9962&lt;/td&gt;   &lt;td style="text-align: center;"&gt;0.0017&lt;/td&gt;   &lt;td style="text-align: center;"&gt;-0.0017&lt;/td&gt;   &lt;td style="text-align: center;"&gt;0.9962&lt;/td&gt;   &lt;td style="text-align: center;" class="xl72"&gt;42.1087&lt;/td&gt;   &lt;td style="text-align: center;" class="xl73"&gt;3.0828&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15pt;" height="20"&gt;   &lt;td class="xl72" style="height: 15pt; text-align: center;" height="20"&gt;1.0055&lt;/td&gt;   &lt;td style="text-align: center;"&gt;0.009&lt;/td&gt;   &lt;td style="text-align: center;"&gt;-0.009&lt;/td&gt;   &lt;td style="text-align: center;"&gt;1.0055&lt;/td&gt;   &lt;td style="text-align: center;" class="xl72"&gt;41.0118&lt;/td&gt;   &lt;td style="text-align: center;" class="xl73"&gt;-10.823&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15pt;" height="20"&gt;   &lt;td class="xl72" style="height: 15pt; text-align: center;" height="20"&gt;1.0102&lt;/td&gt;   &lt;td style="text-align: center;"&gt;0.0069&lt;/td&gt;   &lt;td style="text-align: center;"&gt;-0.0069&lt;/td&gt;   &lt;td style="text-align: center;"&gt;1.0102&lt;/td&gt;   &lt;td style="text-align: center;" class="xl72"&gt;-77.1081&lt;/td&gt;   &lt;td style="text-align: center;" class="xl73"&gt;1.3819&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15.75pt;" height="21"&gt;   &lt;td class="xl74" style="height: 15.75pt; text-align: center;" height="21"&gt;0.9964&lt;/td&gt;   &lt;td style="text-align: center;" class="xl75"&gt;-0.0026&lt;/td&gt;   &lt;td style="text-align: center;" class="xl75"&gt;0.0026&lt;/td&gt;   &lt;td style="text-align: center;" class="xl75"&gt;0.9964&lt;/td&gt;   &lt;td style="text-align: center;" class="xl74"&gt;-58.1613&lt;/td&gt;   &lt;td style="text-align: center;" class="xl76"&gt;20.9519&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15pt;" height="20"&gt;   &lt;td style="height: 15pt; text-align: center;" height="20"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15pt;" height="20"&gt;   &lt;td style="height: 15pt; text-align: center;" height="20"&gt;1.00025&lt;/td&gt;   &lt;td style="text-align: center;"&gt;0.003733&lt;/td&gt;   &lt;td style="text-align: center;"&gt;-0.00373&lt;/td&gt;   &lt;td style="text-align: center;"&gt;1.00025&lt;/td&gt;   &lt;td style="text-align: center;"&gt;x&lt;br /&gt;&lt;/td&gt;   &lt;td style="text-align: center;"&gt;x&lt;br /&gt;&lt;/td&gt;   &lt;td style="font-weight: bold;"&gt;Mean&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15pt;" height="20"&gt;   &lt;td style="height: 15pt; text-align: center;" height="20"&gt;4.3943E-05&lt;/td&gt;   &lt;td style="text-align: center;"&gt;2.89E-05&lt;/td&gt;   &lt;td style="text-align: center;"&gt;2.89E-05&lt;/td&gt;   &lt;td style="text-align: center;"&gt;4.39E-05&lt;/td&gt;   &lt;td style="text-align: center;"&gt;x&lt;br /&gt;&lt;/td&gt;   &lt;td style="text-align: center;"&gt;x&lt;br /&gt;&lt;/td&gt;   &lt;td style="font-weight: bold;"&gt;Variance&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;What is evident is the rotation is identity with very small variance.&lt;br /&gt;&lt;br /&gt;Just from this video sequence, it appears to be safe to assume pure translation.&lt;br /&gt;&lt;br /&gt;My next approach will be to use the KLT software development kit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-3864243548331951437?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/3864243548331951437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=3864243548331951437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/3864243548331951437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/3864243548331951437'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/01/verification-of-pure-translation.html' title='Verification of Pure Translation'/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i9TGH7RzARs/SW5kEw7ZKVI/AAAAAAAAAdI/wqTUuKJ4-sk/s72-c/corr_pts.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-8479321992971519201</id><published>2009-01-09T16:03:00.001-08:00</published><updated>2009-01-10T21:29:01.482-08:00</updated><title type='text'></title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-weight: bold;"&gt;Researching the Basics&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I started reading the following papers:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="ftp://ftp.nada.kth.se/CVAP/users/laptev/iccv05.pdf"&gt;Periodic Motion Detection and Segmentation via Approximate Sequence Alignment; Laptev, Belongie, Perez, Wills&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span class="headNavBlueXLarge2"&gt;                                                                                              &lt;a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?isNumber=18560&amp;amp;prod=CNF&amp;amp;arnumber=854929&amp;amp;arSt=+615&amp;amp;ared=+622&amp;amp;arNumber=854929"&gt;Robust periodic motion and motion symmetry detection; Cutler, Davis&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;I jumped to the Cutler/Davis paper simply because the Laptev paper referred to it multiple times.  I found it useful for building a simple foundation for understanding periodic motion.&lt;br /&gt;&lt;br /&gt;Based on the Cutler/Davis paper, w+e begin defining periodic motion for a given pixel as:  At time &lt;span style="font-style: italic;"&gt;t&lt;/span&gt;, a pixel point will repeat itself again at time &lt;span style="font-style: italic;"&gt;t+p&lt;/span&gt;.  There may be a translation, &lt;span style="font-style: italic;"&gt;T(.)&lt;/span&gt;, of the point at time &lt;span style="font-style: italic;"&gt;t&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=150&amp;amp;eq=X%28p%2Bt%29%20=%20X%28t%29%20%2B%20T%28t%29" align="middle" border="0" /&gt;                   (1)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;We restrict our definition of the periodic value, &lt;span style="font-style: italic;"&gt;p&lt;/span&gt;, to be the smallest possible value.  From this, we can define the frequency as:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=150&amp;amp;eq=f%20=%201%2Fp" align="middle" border="0" /&gt;      (2)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;A radar  period, &lt;span style="font-style: italic;"&gt;p&lt;/span&gt;, is a constant for each radar.  However each radar has a different period.&lt;br /&gt;For most cases, if there are multiple radars on a ship, they will not have the same rotation period.  This is because when there are 2 or more radars, they are using different frequency bands.  Each radar frequency band has a different physical size and rotation period.&lt;br /&gt;&lt;br /&gt;From that deduction I may be able to make an assumption that if there are multiple radars in the field of view, they will not have the same period.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=150&amp;amp;eq=p_i%20%5Cne%20p_j" align="middle" border="0" /&gt;   for   &lt;img src="http://www.sitmo.com/gg/latex/latex2png.2.php?z=150&amp;amp;eq=i%20%5Cne%20j" align="middle" border="0" /&gt;  (3)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Equation (3) may come in handy when we need to distinguish from multiple radars.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Stabilization&lt;/span&gt;&lt;br /&gt;My first phase now is to stabilized the video sequence.  In order to tackle this I will assume there is only translation motion.  There are several methods to tackle this problem.&lt;br /&gt;&lt;br /&gt;First I'll try doing this manually to get a good understanding of what's going on.  This will be done by points on the image then finding corresponding points in successive frames.  This will verify that the translation model assumption is valid.&lt;br /&gt;&lt;br /&gt;Vincent Rabaud suggested looking into the following methods for feature tracking:&lt;br /&gt;KLT: &lt;a href="http://www.ces.clemson.edu/%7Estb/klt/" target="_blank"&gt;http://www.ces.clemson.edu/~&lt;wbr&gt;stb/klt/&lt;/a&gt;&lt;br /&gt;Black's : &lt;a href="http://www.cs.brown.edu/%7Eblack/framework.html" target="_blank"&gt;http://www.cs.brown.edu/~&lt;wbr&gt;black/framework.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Black's uses optical flow which will more than likely be expensive to compute.  Therefore I will first look into the KLT (Kanade-Lucas-Tomasi) algorithm.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-8479321992971519201?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/8479321992971519201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=8479321992971519201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/8479321992971519201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/8479321992971519201'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/01/i-started-reading-following-papers.html' title=''/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-8736587694847821192</id><published>2009-01-07T20:52:00.000-08:00</published><updated>2009-01-07T21:45:59.137-08:00</updated><title type='text'></title><content type='html'>Last year Prof. Belongie discussed this research topic and I gave him some video samples.  From there he suggested:&lt;br /&gt;&lt;blockquote&gt;"It looks to me like the first task is image background stabilization.  It appears that an affine model would do the trick.  As an example, you could try &lt;a href="http://www.irisa.fr/vista/Motion2D/" target="_blank"&gt;http://www.irisa.fr/vista/&lt;wbr&gt;Motion2D/&lt;/a&gt;&lt;br /&gt;(Laptev and I used this in &lt;a href="http://www.irisa.fr/vista/Papers/2005_iccv_laptev.pdf" target="_blank"&gt;http://www.irisa.fr/vista/&lt;wbr&gt;Papers/2005_iccv_laptev.pdf&lt;/a&gt; &lt;div id=":f" class="ArwC7c ckChnd"&gt;&lt;wbr&gt;for dominant motion estimation.)&lt;br /&gt;This would assume that the camera is far enough away that the ship could be approximated as a flat surface.  It would also be valid if the camera is close but is restricted to move on a pan-tilt head, i.e., not able to translate.&lt;br /&gt;After the stabilization step, we can proceed to study all the pixels that don't belong to that layer, e.g., the radar arm, the people on board, and noise."&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;My tight schedule requires me to implement background stabilization so I will look into using the Inria Motion2D functions.  I have a few video samples already to try out with the software package.&lt;br /&gt;&lt;br /&gt;I still need to gather more data using the surveillance system at work.  I plan to have a controlled data set that has no motion.  This will be achieved by recording a spinning radar that is mounted on top of my office building.&lt;br /&gt;&lt;br /&gt;Typically there is more boat traffic on Fridays so I will gather several video clips this Friday.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-8736587694847821192?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/8736587694847821192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=8736587694847821192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/8736587694847821192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/8736587694847821192'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/01/last-year-prof.html' title=''/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5001020298892983557.post-6934053164350032915</id><published>2009-01-05T08:54:00.000-08:00</published><updated>2009-01-05T10:37:01.538-08:00</updated><title type='text'></title><content type='html'>SEI stands for Specific Emitter Identification.  This technology is widely referenced in the book by&lt;br /&gt;Wiley R. G.: Electronic Infelligence: The Analysis of Radar Signals. Artech House, Inc, Norwood 1993&lt;br /&gt;&lt;br /&gt;The basic idea is to collect the electronic pulse data from a radar using an antenna dish.  The signal received is then processed to determine unique coefficients.  These coefficients are different for each radar.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i9TGH7RzARs/SWI91Q-5zDI/AAAAAAAAAb0/Ua7TAuLALDY/s1600-h/SEI.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 185px;" src="http://3.bp.blogspot.com/_i9TGH7RzARs/SWI91Q-5zDI/AAAAAAAAAb0/Ua7TAuLALDY/s320/SEI.jpg" alt="" id="BLOGGER_PHOTO_ID_5287856897787546674" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;Image from SEI AND CLASSICAL PARAMETER FUSION TECHNOLOGY white paper from Litton Applied Technology&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;There are other requirements to properly collect information on the radar pulse.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Collect features of target (name, color, etc.)&lt;/li&gt;&lt;li&gt;Determine source of collection&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i9TGH7RzARs/SWJOs-aJOtI/AAAAAAAAAcE/ZN51SPzaKUQ/s1600-h/small_Maersk_Dee+copy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 132px;" src="http://1.bp.blogspot.com/_i9TGH7RzARs/SWJOs-aJOtI/AAAAAAAAAcE/ZN51SPzaKUQ/s320/small_Maersk_Dee+copy.jpg" alt="" id="BLOGGER_PHOTO_ID_5287875447060249298" border="0" /&gt;&lt;/a&gt;The collection of name and color is crucial in determining the status of the radar.  For instance, if the ship owner changed radars, a collection will notice this only if features of the ship are collected.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i9TGH7RzARs/SWJPHXzEZBI/AAAAAAAAAcM/LTfVXOhG2bE/s1600-h/smaller_furuno.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 128px;" src="http://2.bp.blogspot.com/_i9TGH7RzARs/SWJPHXzEZBI/AAAAAAAAAcM/LTfVXOhG2bE/s200/smaller_furuno.jpg" alt="" id="BLOGGER_PHOTO_ID_5287875900552274962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Determining the source of collection is crucial to provide collection integrity.  A collection antenna is capable of receiving signals with a wide acceptance angle.  A human-in-the-loop must determine the signal received is from the expected source.  This is done by listening to the pulse generated by the antenna and watching the rotation of the radar.  Verification is met when the pulse and postion of the radar are in sync.&lt;br /&gt;&lt;br /&gt;This leads to determining the rotation of the radar with computer vision to eliminate the need for human intervention.&lt;br /&gt;&lt;br /&gt;&lt;object type="application/x-shockwave-flash" id="P5gId33" data="http://www.pond5.com/pond5FlashPlayer.swf" width="450" height="288"&gt;&lt;param name="movie" value="http://www.pond5.com/pond5FlashPlayer.swf"&gt;&lt;param name="wmode" value="opaque"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="hideController=no&amp;amp;flvProd=67245&amp;amp;orgClipWidth=16&amp;amp;orgClipHeight=9&amp;amp;debug=no&amp;amp;hqFLV=no&amp;amp;cj=yes"&gt;&lt;embed src="http://www.pond5.com/pond5FlashPlayer.swf" allowscriptaccess="always" allowfullscreen="true" flashvars="hideController=no&amp;amp;flvProd=67245&amp;amp;orgClipWidth=1440&amp;amp;orgClipHeight=1080&amp;amp;debug=no&amp;amp;hqFLV=no&amp;amp;cj=yes" width="450" height="288"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;The above video demonstrates a typical scenario for detecting the spin of a Radar.  It shows potential artifacts that must be accounted for in detecting periodicity:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Flag motion&lt;/li&gt;&lt;li&gt;Rotation of a second radar&lt;/li&gt;&lt;li&gt;People walking nearby&lt;/li&gt;&lt;li&gt;Birds flying across field of view&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5001020298892983557-6934053164350032915?l=novakinblood.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://novakinblood.blogspot.com/feeds/6934053164350032915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5001020298892983557&amp;postID=6934053164350032915' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/6934053164350032915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5001020298892983557/posts/default/6934053164350032915'/><link rel='alternate' type='text/html' href='http://novakinblood.blogspot.com/2009/01/sei-stands-for-specific-emitter.html' title=''/><author><name>Kris Gibson</name><uri>http://www.blogger.com/profile/02599522431315396548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i9TGH7RzARs/SWI91Q-5zDI/AAAAAAAAAb0/Ua7TAuLALDY/s72-c/SEI.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
