<?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-1584473998227859362</id><updated>2011-09-14T21:08:09.134-07:00</updated><category term='Howdy'/><title type='text'>Parking Space Vacancy Detection (CSE 190, W/07)</title><subtitle type='html'>The goal of this project is the development of a computer vision based parking space detection system.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nick True</name><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>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1584473998227859362.post-4842166498618650449</id><published>2007-03-18T23:35:00.000-07:00</published><updated>2007-03-19T23:09:35.594-07:00</updated><title type='text'>Final Paper</title><content type='html'>Ok, so this is probably my last post.  The project was a lot of fun and a great learning experience.  If you are interested in reading my final results check out the &lt;a href="http://www-cse.ucsd.edu/classes/wi07/cse190-a/reports/ntrue.pdf"&gt;paper &lt;/a&gt;I wrote.  If you are still interested to learn more about this kind of stuff, go check out my classmates at the &lt;a href="http://www-cse.ucsd.edu/classes/wi07/cse190-a/"&gt;cse190a &lt;/a&gt;website because some of their stuff is really quite impressive.&lt;br /&gt;&lt;br /&gt;cya!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-4842166498618650449?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/4842166498618650449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=4842166498618650449' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/4842166498618650449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/4842166498618650449'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/03/final-paper.html' title='Final Paper'/><author><name>Nick True</name><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1584473998227859362.post-5102053393730892537</id><published>2007-03-14T06:03:00.001-07:00</published><updated>2008-12-10T15:21:01.652-08:00</updated><title type='text'>Feature Vocabulary</title><content type='html'>In the previous post I commented that the interest point detection algorithm I created looked like it could detect vehicles all by itself.  I created a simplistic feature point counting program which 'detected' a parking spot as empty if the number of interest points in the ROI was below an arbitrary threshold.  The results were moderately good but nowhere near as good as I had expected.&lt;br /&gt;&lt;br /&gt;Threshold (min # of interest pts):&lt;br /&gt;1 __ %81&lt;br /&gt;2    __ %82&lt;br /&gt;3    __ %77&lt;br /&gt;4    __ %74&lt;br /&gt;5     __ %70&lt;br /&gt;&lt;br /&gt;The next thing I focused on was the generation of a code book of car features--small image segments centered at each interest point.  For each ROI, I scale the image so as to normalize the 'zoom' of each image feature.  To save a little time and memory, I only keep one feature image for interest points which are within a 3 pixel range.  I then save all feature images who's center lie within the current parking space ROI being examined, positive features to one set negative features to another.  Here's an example of the resulting feature vocabulary from one occupied parking space:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jq0c13H6AT4/Rff3fljpnEI/AAAAAAAAAEQ/gaC4-HxIPU8/s1600-h/car_parts3.PNG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_jq0c13H6AT4/Rff3fljpnEI/AAAAAAAAAEQ/gaC4-HxIPU8/s200/car_parts3.PNG" alt="" id="BLOGGER_PHOTO_ID_5041770429894204482" 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/1584473998227859362-5102053393730892537?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/5102053393730892537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=5102053393730892537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/5102053393730892537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/5102053393730892537'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/03/feature-vocabulary_14.html' title='Feature Vocabulary'/><author><name>Nick True</name><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/_jq0c13H6AT4/Rff3fljpnEI/AAAAAAAAAEQ/gaC4-HxIPU8/s72-c/car_parts3.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1584473998227859362.post-3294118009077767144</id><published>2007-03-05T13:05:00.000-08:00</published><updated>2008-12-10T15:21:01.953-08:00</updated><title type='text'>Interest Point Detection</title><content type='html'>So the next stage of the project is to bring in vehicle feature detection to make the overall algorithm more robust.  To this end, I read Agarwal and Roth's paper on "&lt;a href="http://web.mit.edu/shivani/www/Papers/2002/eccv02.pdf"&gt;Learning a Sparse Representation for Object Detection&lt;/a&gt;" and it seemed like an excellent place to start.&lt;br /&gt;&lt;br /&gt;The first thing I needed to do was implement interest point detection and test it out on some of my training data.  &lt;a href="http://3dphotos.blogspot.com/"&gt;Kristen&lt;/a&gt; was kind enough to give me a copy of her implementation of Förstner Corner detection.  But like Kristen warned me, Förstner worked fine on the test image of a checkers board but it didn't pick much up in my training images (see below):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jq0c13H6AT4/ReyJDmXpk5I/AAAAAAAAAD4/Ubsa7nxL7WQ/s1600-h/ForstnerCorner.PNG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_jq0c13H6AT4/ReyJDmXpk5I/AAAAAAAAAD4/Ubsa7nxL7WQ/s200/ForstnerCorner.PNG" alt="" id="BLOGGER_PHOTO_ID_5038552778053096338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I then used OpenCV's Harris Corner detection and found it to be extremely good for my project (see below):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jq0c13H6AT4/ReyItWXpk4I/AAAAAAAAADw/2Xg-fk5iP-Y/s1600-h/HarrisCorner.PNG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_jq0c13H6AT4/ReyItWXpk4I/AAAAAAAAADw/2Xg-fk5iP-Y/s200/HarrisCorner.PNG" alt="" id="BLOGGER_PHOTO_ID_5038552395801006978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The interesting thing about this Harris Corner detection algorithm is that even without creating a database of vehicle features and a database of non-vehicle features and then using that to detect vehicles, the interest points themselves are actually very accurate at determining where a vehicle is.  However, I'm still going to try and reproduce as much of Adarwal and Roth's research, time permitting ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-3294118009077767144?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/3294118009077767144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=3294118009077767144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/3294118009077767144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/3294118009077767144'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/03/interest-point-detection.html' title='Interest Point Detection'/><author><name>Nick True</name><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/_jq0c13H6AT4/ReyJDmXpk5I/AAAAAAAAAD4/Ubsa7nxL7WQ/s72-c/ForstnerCorner.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1584473998227859362.post-8389677419890590190</id><published>2007-02-20T07:08:00.000-08:00</published><updated>2008-12-10T15:21:02.008-08:00</updated><title type='text'>Poster</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jq0c13H6AT4/RdsWbjj9Z0I/AAAAAAAAADM/hsHZnjVq43k/s1600-h/poster.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_jq0c13H6AT4/RdsWbjj9Z0I/AAAAAAAAADM/hsHZnjVq43k/s400/poster.PNG" alt="" id="BLOGGER_PHOTO_ID_5033641671175006018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;After working all night I finally finished the slide for the EUReKA conference.  Here it is....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-8389677419890590190?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/8389677419890590190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=8389677419890590190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/8389677419890590190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/8389677419890590190'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/02/poster.html' title='Poster'/><author><name>Nick True</name><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/_jq0c13H6AT4/RdsWbjj9Z0I/AAAAAAAAADM/hsHZnjVq43k/s72-c/poster.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1584473998227859362.post-1904564201951907368</id><published>2007-02-19T22:24:00.000-08:00</published><updated>2008-12-10T15:21:03.144-08:00</updated><title type='text'>KNN Distance Metric Comparisons</title><content type='html'>I just finished running a comparison of K-nearest neighbor using euclidean distance and chi-squared (I've been using euclidean this whole time).  And what do you know, using chi-squared distance got me consistently better results.  Here's the results of the tests:&lt;br /&gt;&lt;br /&gt;KNN (k=3)&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;Night Images:&lt;br /&gt;&lt;br /&gt;Euclidean Distance:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;92% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;85% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;87% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;85% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;90% accuracy, # test images = 41&lt;/li&gt;&lt;/ol&gt;&lt;span&gt;&lt;span&gt; Chi-Squared Distance:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;92% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;90% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;90% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;90% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;95% accuracy, # test images = 41&lt;/li&gt;&lt;/ol&gt; Day &lt;span&gt;&lt;span&gt;Images:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;Euclidean Distance:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;75% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;76% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;81% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;76% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;84% accuracy, # test images = 41&lt;/li&gt;&lt;/ol&gt; &lt;span&gt;&lt;span&gt; Chi-Squared Distance:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;77% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;84% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;85% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;78% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;85% accuracy, # test images = 41&lt;/li&gt;&lt;/ol&gt;Here are some visual examples of the differences in the results from Chi-Squared and Euclidean Distances:&lt;br /&gt;&lt;br /&gt;Chi-Square 1&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jq0c13H6AT4/RdqZUzj9ZsI/AAAAAAAAABs/UuRPzxl4q-4/s1600-h/IMG_0064_RESULT.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_jq0c13H6AT4/RdqZUzj9ZsI/AAAAAAAAABs/UuRPzxl4q-4/s200/IMG_0064_RESULT.jpg" alt="" id="BLOGGER_PHOTO_ID_5033504116257416898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Euclidean 1&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jq0c13H6AT4/RdqZwDj9ZtI/AAAAAAAAAB0/e3TUefmpLS8/s1600-h/IMG_0064_RESULT.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_jq0c13H6AT4/RdqZwDj9ZtI/AAAAAAAAAB0/e3TUefmpLS8/s200/IMG_0064_RESULT.jpg" alt="" id="BLOGGER_PHOTO_ID_5033504584408852178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Chi-Square 2&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jq0c13H6AT4/RdqaBjj9ZuI/AAAAAAAAAB8/YGDtdqH_8Yw/s1600-h/IMG_0083_RESULT.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_jq0c13H6AT4/RdqaBjj9ZuI/AAAAAAAAAB8/YGDtdqH_8Yw/s200/IMG_0083_RESULT.jpg" alt="" id="BLOGGER_PHOTO_ID_5033504885056562914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Euclidean 2&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jq0c13H6AT4/RdqaBjj9ZuI/AAAAAAAAAB8/YGDtdqH_8Yw/s1600-h/IMG_0083_RESULT.jpg"&gt; &lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jq0c13H6AT4/RdqaKjj9ZvI/AAAAAAAAACE/esy9ZtJ_Tqc/s1600-h/IMG_0083_RESULT.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_jq0c13H6AT4/RdqaKjj9ZvI/AAAAAAAAACE/esy9ZtJ_Tqc/s200/IMG_0083_RESULT.jpg" alt="" id="BLOGGER_PHOTO_ID_5033505039675385586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Chi-Square 3&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jq0c13H6AT4/RdqalDj9ZwI/AAAAAAAAACM/772DhpMrznE/s1600-h/IMG_0155_RESULT.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_jq0c13H6AT4/RdqalDj9ZwI/AAAAAAAAACM/772DhpMrznE/s200/IMG_0155_RESULT.jpg" alt="" id="BLOGGER_PHOTO_ID_5033505494941918978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Euclidean 3&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jq0c13H6AT4/RdqalDj9ZwI/AAAAAAAAACM/772DhpMrznE/s1600-h/IMG_0155_RESULT.jpg"&gt; &lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jq0c13H6AT4/RdqaqDj9ZxI/AAAAAAAAACU/ZVfopSnHcWk/s1600-h/IMG_0155_RESULT.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_jq0c13H6AT4/RdqaqDj9ZxI/AAAAAAAAACU/ZVfopSnHcWk/s200/IMG_0155_RESULT.jpg" alt="" id="BLOGGER_PHOTO_ID_5033505580841264914" 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/1584473998227859362-1904564201951907368?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/1904564201951907368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=1904564201951907368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/1904564201951907368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/1904564201951907368'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/02/knn-distance-metric-comparisons.html' title='KNN Distance Metric Comparisons'/><author><name>Nick True</name><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/_jq0c13H6AT4/RdqZUzj9ZsI/AAAAAAAAABs/UuRPzxl4q-4/s72-c/IMG_0064_RESULT.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1584473998227859362.post-5282132614570778229</id><published>2007-02-19T20:49:00.001-08:00</published><updated>2007-02-19T20:58:15.711-08:00</updated><title type='text'>Viewing Night Results</title><content type='html'>&lt;div style="margin-bottom: 2px; text-align: left; font-weight: bold;"&gt;Photobucket Album&lt;/div&gt;&lt;a href="http://s173.photobucket.com/albums/w44/njtrue/night_results_knn/"&gt;&lt;img src="http://i173.photobucket.com/albums/w44/njtrue/night_results_knn/IMG_0064_RESULT.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Green = empty space,    White = occupied space,     Blue = Misclassified Space&lt;br /&gt;&lt;br /&gt;So I just finished writing a combination of programs which gather up the results from the k-fold validation testing and visualizes these results (ie creates a set of result pictures).  You can go to my photo bucket account and view the results from the night set.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-5282132614570778229?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/5282132614570778229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=5282132614570778229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/5282132614570778229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/5282132614570778229'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/02/viewing-night-results.html' title='Viewing Night Results'/><author><name>Nick True</name><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://i173.photobucket.com/albums/w44/njtrue/night_results_knn/th_IMG_0064_RESULT.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1584473998227859362.post-1476722596651515529</id><published>2007-02-14T19:56:00.000-08:00</published><updated>2007-02-14T20:13:39.486-08:00</updated><title type='text'>Night and Day</title><content type='html'>I have been gathering more training data and the increase from 650 total images to 740 has made a visible difference in the detection rates for the KNN classifier.&lt;br /&gt;&lt;br /&gt;I have been experimenting with the idea of splitting the image set into smaller sets related to the time of day and general lighting level.  Other than the benefits of reducing the KNN classification time, these time-specific images sets noticeably increase the detection rates.  The following is results of my tests so far:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;KNN&lt;/span&gt;&lt;span&gt;&lt;span&gt; (K=3)&lt;br /&gt;&lt;br /&gt;All Images:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;79% accuracy, # test images = 148&lt;/li&gt;&lt;li&gt;80% accuracy, # test images = 147&lt;/li&gt;&lt;li&gt;84% accuracy, # test images = 148&lt;/li&gt;&lt;li&gt;78% accuracy, # test images = 148&lt;/li&gt;&lt;li&gt;78% accuracy, # test images = 149&lt;/li&gt;&lt;/ol&gt;&lt;span&gt;&lt;span&gt;Day Images:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt; &lt;ol&gt;&lt;li&gt;80% accuracy, # test images = 107&lt;/li&gt;&lt;li&gt;83% accuracy, # test images = 107&lt;/li&gt;&lt;li&gt;66% accuracy, # test images = 106&lt;/li&gt;&lt;li&gt;82% accuracy, # test images = 107&lt;/li&gt;&lt;li&gt;78% accuracy, # test images = 109&lt;/li&gt;&lt;/ol&gt;&lt;span&gt;&lt;span&gt;Night Images:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt; &lt;ol&gt;&lt;li&gt;90% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;90% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;90% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;82% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;80% accuracy, # test images = 41&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SVM&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;All Images:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt; &lt;ol&gt;&lt;li&gt;78% accuracy, # test images = 148&lt;/li&gt;&lt;li&gt;76% accuracy, # test images = 147&lt;/li&gt;&lt;li&gt;78% accuracy, # test images = 148&lt;/li&gt;&lt;li&gt;68% accuracy, # test images = 148&lt;/li&gt;&lt;li&gt;76% accuracy, # test images = 149&lt;/li&gt;&lt;/ol&gt; &lt;span&gt;&lt;span&gt;Day Images:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt; &lt;ol&gt;&lt;li&gt;75% accuracy, # test images = 107&lt;/li&gt;&lt;li&gt;76% accuracy, # test images = 107&lt;/li&gt;&lt;li&gt;59% accuracy, # test images = 106&lt;/li&gt;&lt;li&gt;75% accuracy, # test images = 107&lt;/li&gt;&lt;li&gt;66% accuracy, # test images = 109&lt;/li&gt;&lt;/ol&gt; &lt;span&gt;&lt;span&gt;Night Images:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt; &lt;ol&gt;&lt;li&gt;70% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;85% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;68% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;75% accuracy, # test images = 41&lt;/li&gt;&lt;li&gt;63% accuracy, # test images = 41&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/1584473998227859362-1476722596651515529?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/1476722596651515529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=1476722596651515529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/1476722596651515529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/1476722596651515529'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/02/day-and-night.html' title='Night and Day'/><author><name>Nick True</name><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-1584473998227859362.post-47949045063231983</id><published>2007-02-12T23:15:00.000-08:00</published><updated>2007-02-13T01:19:26.035-08:00</updated><title type='text'>KNN &gt; SVM</title><content type='html'>I just finished fixing my K-nearest neighbor program and what do you know, its detection rate is consistently better than the svm.  The results on the k-fold cross-validation testing where k=5 is:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;KNN&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;(K=1)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;72% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;82% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;75% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;74% accuracy, # test images = 128&lt;/li&gt;&lt;li&gt;77% accuracy, # test images = 129&lt;/li&gt;&lt;/ol&gt;&lt;span&gt;&lt;span&gt;(K=3)&lt;/span&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;79% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;83% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;77% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;75% accuracy, # test images = 128&lt;/li&gt;&lt;li&gt;77% accuracy, # test images = 129&lt;/li&gt;&lt;/ol&gt;&lt;span&gt;&lt;span&gt;(K=5)&lt;/span&gt;&lt;/span&gt; &lt;ol&gt;&lt;li&gt;75% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;86% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;81% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;73% accuracy, # test images = 128&lt;/li&gt;&lt;li&gt;77% accuracy, # test images = 129&lt;/li&gt;&lt;/ol&gt; &lt;span&gt;&lt;span&gt;(K=7)&lt;/span&gt;&lt;/span&gt; &lt;ol&gt;&lt;li&gt;79% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;84% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;76% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;74% accuracy, # test images = 128&lt;/li&gt;&lt;li&gt;79% accuracy, # test images = 129&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SVM&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;ol&gt;&lt;li&gt;79% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;65% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;59% accuracy, # test images = 129&lt;/li&gt;&lt;li&gt;62% accuracy, # test images = 128&lt;/li&gt;&lt;li&gt;71% accuracy, # test images = 129&lt;/li&gt;&lt;/ol&gt;Personally, I find these results very interesting....&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-47949045063231983?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/47949045063231983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=47949045063231983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/47949045063231983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/47949045063231983'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/02/knn-svm.html' title='KNN &gt; SVM'/><author><name>Nick True</name><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-1584473998227859362.post-4842095398386436987</id><published>2007-02-12T13:16:00.000-08:00</published><updated>2007-02-05T17:10:54.216-08:00</updated><title type='text'>Cross-validation and KNN</title><content type='html'>Throughout the week I have been taking pictures of parking lots as I have walked to and from school each day.  However, the number of ROI from my image set is still pretty small, around 650 distinct parking spaces, and this may be adversely affecting my training efforts.  Most research papers that I've read have said that good results are often achieved with somewhere between 1000 and 2000 bits of training data.&lt;br /&gt;&lt;br /&gt;The next thing that I did was to implement a &lt;a href="http://en.wikipedia.org/wiki/Cross-validation"&gt;cross-validation&lt;/a&gt; script.  I ended up coding a K-fold in python which starts by randomizing the input data and then performs the cross validation.  With K=5, the svm is classifying within a range of 59%-79% positive detection rate.  This extremely wide range might be the result of poor randomization of the data on the part of the script and/or it might be due to the fact that I have very few night time images as part of my test data.  Right now I'm going to increase the size of my test set and see if that has an effect in reducing the range of results returned by the cross-validation script.&lt;br /&gt;&lt;br /&gt;The last thing that I worked on was to create a &lt;a href="http://en.wikipedia.org/wiki/Nearest_neighbor_%28pattern_recognition%29"&gt;K-nearest neighbor&lt;/a&gt; classification program.  I am still trying to debug the program but I hope to have it done sometime tonight or tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-4842095398386436987?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/4842095398386436987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=4842095398386436987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/4842095398386436987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/4842095398386436987'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/02/cross-validation-and-knn.html' title='Cross-validation and KNN'/><author><name>Nick True</name><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-1584473998227859362.post-1729939447243912274</id><published>2007-02-05T03:23:00.000-08:00</published><updated>2007-02-05T17:10:12.148-08:00</updated><title type='text'>SVMs</title><content type='html'>So I installed, trained, and ran &lt;a href="http://svmlight.joachims.org/"&gt;SVM&lt;span style="font-style: italic;"&gt;Light&lt;/span&gt;&lt;/a&gt; today.  I used some images which weren't part of the training set and which were taken on completely different days than those taken for the training set (ie, no obviously similar images being used to train and test at the same time).  However, these images were quite a bit larger than those that I trained on.  I figure that because the features being used right now are color histograms and because this test was only to help me get my bearings, the difference in the sizes of the images wouldn't be extremely important for now.  In the end, the SVM got 73% accuracy on the test set (58 pos detect, 21 neg detect), which I find encouraging for a first step.&lt;br /&gt;&lt;br /&gt;One of the things I am considering doing next is relabeling my training set so that there are only non-occluded parking spaces being trained on.  I also want to gather a more images to both increase the training set and also build a more realistic pseudo-test set.  Lastly, I'm going to code up a program for visualizing the SVM's classification guesses overlaid on the test images if I have time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-1729939447243912274?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/1729939447243912274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=1729939447243912274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/1729939447243912274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/1729939447243912274'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/02/svms.html' title='SVMs'/><author><name>Nick True</name><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-1584473998227859362.post-2896898816167677868</id><published>2007-02-02T23:02:00.000-08:00</published><updated>2008-12-10T15:21:03.397-08:00</updated><title type='text'>Finished Histogramming</title><content type='html'>So I &lt;span style="font-style: italic;"&gt;finally &lt;/span&gt;finished my color &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;histogramming&lt;/span&gt; program.  Since training the support vector machine is completely pointless unless the data you are training it on is accurate, I had to make sure that my '&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;histogrammer&lt;/span&gt;' was 100% bug free.  Here are some of the test images I used to debug the program:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jq0c13H6AT4/RcQ8zkTVQHI/AAAAAAAAABc/PSuUdvLPYYg/s1600-h/test_strip.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_jq0c13H6AT4/RcQ8zkTVQHI/AAAAAAAAABc/PSuUdvLPYYg/s320/test_strip.PNG" alt="" id="BLOGGER_PHOTO_ID_5027209940668072050" border="0" /&gt;&lt;/a&gt;Currently, the program works by reading in the log file which contains a list of coordinate-image lines to extract the pixels from a particular region of an image.  For each line in the log file the program does the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Compute the extraction region in the image.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Convert the image from &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;RGB&lt;/span&gt; to L*a*b*.&lt;/li&gt;&lt;li&gt;Create 2 32-bin histograms, one for the 'a' channel and one for the 'b' channel (we discard the 'L' channel as it does not add much useful information in this case).&lt;/li&gt;&lt;li&gt;Compute the histograms.&lt;/li&gt;&lt;li&gt;Write out each histogram, bin by bin, to the resulting text file along with a 0 or a 1 to indicate if the region was a positive or negative training example.&lt;/li&gt;&lt;/ol&gt;With a log file of exactly 800 training regions, the program only took a couple of minutes to finish its calculations.&lt;br /&gt;&lt;br /&gt;My next step will be to train a support vector machine on this training data.  Since I'm most familiar with &lt;a href="http://svmlight.joachims.org/"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;SVM&lt;/span&gt;&lt;span style="font-style: italic;"&gt;Light&lt;/span&gt;&lt;/a&gt;, I'm probably going to start there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-2896898816167677868?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/2896898816167677868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=2896898816167677868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/2896898816167677868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/2896898816167677868'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/02/finished-histogramming.html' title='Finished Histogramming'/><author><name>Nick True</name><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/_jq0c13H6AT4/RcQ8zkTVQHI/AAAAAAAAABc/PSuUdvLPYYg/s72-c/test_strip.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1584473998227859362.post-3272327626402739732</id><published>2007-01-29T00:06:00.000-08:00</published><updated>2007-01-29T12:36:23.542-08:00</updated><title type='text'>Histograms</title><content type='html'>So I talked to &lt;a href="http://www.tomduerig.com/"&gt;Tom Duerig&lt;/a&gt; about using SMORs as the cascade backbone for my the detection algorithm.  Although I'll probably have to do a bunch of tweaking, it sounds like SMORs will work really well with this project.&lt;br /&gt;&lt;br /&gt;I also talked to &lt;a href="http://www.cse.ucsd.edu/%7Ecgallegu/"&gt;Carolina Galleguillos&lt;/a&gt; about how GroZi uses color histograms as part of the overall algorithm.  She was kind enough to give me a copy of the histogram source file to help me get an idea of how to create my color histogramming program.&lt;br /&gt;&lt;br /&gt;I ended up coding the histogramming program from scratch since the code from GroZi was not completely applicable.  Currently I'm in the process of testing and debugging the program.&lt;br /&gt;&lt;br /&gt;Lastly, I labeled my training images using the labeling program I created last week.&lt;br /&gt;&lt;a href="http://www.cse.ucsd.edu/%7Ecgallegu/"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-3272327626402739732?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/3272327626402739732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=3272327626402739732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/3272327626402739732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/3272327626402739732'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/01/histograms.html' title='Histograms'/><author><name>Nick True</name><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-1584473998227859362.post-4514614461984679742</id><published>2007-01-22T02:50:00.000-08:00</published><updated>2007-01-22T03:09:44.956-08:00</updated><title type='text'>Color Histograms</title><content type='html'>I have been researching different methods for coming up with features from the sets of empty and occupied parking spaces before I create the program to gather these features.  The most useful paper that I've found on this subject is called &lt;a href="http://citeseer.ist.psu.edu/cache/papers/cs2/481/http:zSzzSzwww.cs.nott.ac.ukzSzzCz7EqiuzSzwebpageszSzPaperszSzICIP2003Final-Photo.pdf/feng03color.pdf"&gt;Color Photo Categorization Using Compressed Histograms and Support Vector Machines&lt;/a&gt; by Xia Feng, Jianzhong Fang and Guoping Qiu.  This paper goes over a bunch of different methods for describing color information in images as well as their methodology for using a support vector machine for classification using the color features described in the previous section.  It seems that the MPEG-7 color structure descriptor got the best results and this is what I'm going to read about this in more detail next (specifically, &lt;a href="http://www-iplab.ece.ucsb.edu/publications/01IEEEManjunath.pdf"&gt;Color and Texture Descriptors&lt;/a&gt; by B. S. Manjunath, Jens-Rainer Ohm, Vinod V. Vasudevan, and Akio Yamada).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-4514614461984679742?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/4514614461984679742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=4514614461984679742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/4514614461984679742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/4514614461984679742'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/01/color-histograms.html' title='Color Histograms'/><author><name>Nick True</name><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-1584473998227859362.post-8880489317376457090</id><published>2007-01-21T03:22:00.000-08:00</published><updated>2008-12-10T15:21:03.644-08:00</updated><title type='text'>Change of Direction</title><content type='html'>Due to some helpful advice I have refocused my research from car feature detection to the direct detection of vacant parking spaces.  So far, the most promising work that I have found is by &lt;a href="http://www.cs.cmu.edu/%7Eepxing/Class/10701/project-reports/wu_zhang.pdf"&gt;Qi Wu and Yi Zhang&lt;/a&gt;, two students at Carnegie Mellon.   They're method for detecting the state (occupied/empty) of parking spaces centered around a SVM (Support Vector Machine) which was trained on the probability of the ground color.  Overall, it sounds like they were pretty successful at creating a parking space detector.  The one drawback to all of this is that this type of detector will only work well when there's very little occlusion by other vehicles due to a less than optimal camera angle.  However, this seems like a good place to start and I think that using car feature detection in addition to this SVM-based detection algorithm could successfully deal with the cases where there's occlusion.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jq0c13H6AT4/RbNVD2jHVPI/AAAAAAAAABI/Rw-GCu3QVNI/s1600-h/pixel_extractor.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_jq0c13H6AT4/RbNVD2jHVPI/AAAAAAAAABI/Rw-GCu3QVNI/s320/pixel_extractor.PNG" alt="" id="BLOGGER_PHOTO_ID_5022451534118999282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The first step towards implementing the SVM-based parking space detection algorithm is to extract the information from all of the parking spaces in the images in my training set.  To this end, I have created a labeling program in Java which allows me to quickly label the parking spaces in the parking lot images and create a file log file of all of my label work.  All one has to do is click on the 4 corners of a parking space and the program writes out the image path and coordinate information to the log file.&lt;br /&gt;&lt;br /&gt;My next step will be to create a program to read the log file and quickly extract the set of pixels contained in each quadrangle.  This way, I can label the pictures once, and extract the pixel info and create a set of parking space training features as many times as I want without having to relabel everything every time I make a change.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-8880489317376457090?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/8880489317376457090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=8880489317376457090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/8880489317376457090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/8880489317376457090'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/01/change-of-direction.html' title='Change of Direction'/><author><name>Nick True</name><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/_jq0c13H6AT4/RbNVD2jHVPI/AAAAAAAAABI/Rw-GCu3QVNI/s72-c/pixel_extractor.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1584473998227859362.post-895970370854004964</id><published>2007-01-09T22:54:00.000-08:00</published><updated>2007-01-10T23:42:36.290-08:00</updated><title type='text'>Battles With OpenCV and MS Visual Studio 2005</title><content type='html'>So I just loaded Microsoft Visual Studio 2005.  The first time I tried to do this I failed because one of the installation CDs was warped!  Thankfully the second set of install CDs was defect free.  Next, I installed OpenCV and tried to integrate it into Visual Studios.  I used &lt;a href="http://qevan.blogspot.com/2005/10/how-to-configue-opencv-in-visual.html"&gt;qevanblog&lt;/a&gt;'s blog to help guide me through the integration process.  However, I think that the integration guide at &lt;a href="http://opencvlibrary.sourceforge.net/VisualC%2B%2B"&gt;sourceforge&lt;/a&gt; is a bit easier to understand.  Of course OpenCV always loves to throw a curveball every now and again and it did so this time by complaining about missing DLLs (specifically highgui100.dll, cxcore100.dll, and libguide40.dll).  My solution was to copy those DLLs to the directory of the executable I was building.  I spent a bunch of time trying to have Visual Studios fold those DLLs into the executable as part of the build process but was unable to get that to work.  Hopefully I will come up with a more practical solution in the near future.&lt;br /&gt;&lt;br /&gt;EDIT:&lt;br /&gt;I got some good advice from &lt;a href="http://super-resolution.blogspot.com/"&gt;Thomas&lt;/a&gt; on how to fix my DLL problem.  He suggested that I include the path to the directory that holds the DLLs in my environmental variables.  Interestingly enough, when I went to go add the path to my environmental variables I found that it was already there.  So I restarted Visual Studios, recompiled the test program and the thing actually worked.  My guess is that my system was set up properly the whole time and I just did something stupid like not restarting or not reloading Visual Studios.  Meh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-895970370854004964?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/895970370854004964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=895970370854004964' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/895970370854004964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/895970370854004964'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/01/battles-with-opencv-and-ms-visual.html' title='Battles With OpenCV and MS Visual Studio 2005'/><author><name>Nick True</name><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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1584473998227859362.post-8213244865255231962</id><published>2007-01-03T02:38:00.000-08:00</published><updated>2008-12-10T15:21:03.933-08:00</updated><title type='text'>More</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_jq0c13H6AT4/RZuHtlVrpsI/AAAAAAAAAA8/CpCfwfYiOHA/s1600-h/IMG_0191.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5015751827194095298" style="margin: 0px 0px 10px 10px; float: right;" alt="" src="http://3.bp.blogspot.com/_jq0c13H6AT4/RZuHtlVrpsI/AAAAAAAAAA8/CpCfwfYiOHA/s320/IMG_0191.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;More images to add to the growing training (or test) set.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-8213244865255231962?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/8213244865255231962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=8213244865255231962' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/8213244865255231962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/8213244865255231962'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/01/more.html' title='More'/><author><name>Nick True</name><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/_jq0c13H6AT4/RZuHtlVrpsI/AAAAAAAAAA8/CpCfwfYiOHA/s72-c/IMG_0191.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1584473998227859362.post-6982940559540219387</id><published>2007-01-01T16:37:00.000-08:00</published><updated>2008-12-10T15:21:04.058-08:00</updated><title type='text'>New Years Day training set</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jq0c13H6AT4/RZmqAlVrprI/AAAAAAAAAAw/tAX-GSvMjK4/s1600-h/IMG_0099.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5015226587053532850" style="FLOAT: right; MARGIN: 0pt 0pt 10px 10px; CURSOR: pointer" alt="" src="http://1.bp.blogspot.com/_jq0c13H6AT4/RZmqAlVrprI/AAAAAAAAAAw/tAX-GSvMjK4/s320/IMG_0099.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;What better thing to do on New Years Day except for creating a training set of 45 new images.  :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-6982940559540219387?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/6982940559540219387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=6982940559540219387' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/6982940559540219387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/6982940559540219387'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2007/01/new-years-day-training-set.html' title='New Years Day training set'/><author><name>Nick True</name><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/_jq0c13H6AT4/RZmqAlVrprI/AAAAAAAAAAw/tAX-GSvMjK4/s72-c/IMG_0099.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1584473998227859362.post-3249858876225939795</id><published>2006-12-24T01:21:00.000-08:00</published><updated>2008-12-10T15:21:04.219-08:00</updated><title type='text'>Empty Lot</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jq0c13H6AT4/RY5GwjPRbZI/AAAAAAAAAAk/ShRozm3ND50/s1600-h/IMG_0084.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_jq0c13H6AT4/RY5GwjPRbZI/AAAAAAAAAAk/ShRozm3ND50/s320/IMG_0084.jpg" alt="" id="BLOGGER_PHOTO_ID_5012021235216903570" border="0" /&gt;&lt;/a&gt;Right now, I'm thinking that there will be two components to my vacant parking space detection system: count the number of parking spaces in the camera's field of view, and detect the number of cars occupying spaces.&lt;br /&gt;&lt;br /&gt;To help create a solution to the problem of counting the number of parking spaces, I took a few pictures of the parking lot at 1am when the lot was empty.  If the lot were nearly full, counting parking spaces could be a fairly difficult problem for a computer since large trucks and vans could block the view of the lines or of whole parking spots.  So I took a few pictures of the lot when it was empty to make my life a little easier.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-3249858876225939795?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/3249858876225939795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=3249858876225939795' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/3249858876225939795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/3249858876225939795'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2006/12/empty-lot.html' title='Empty Lot'/><author><name>Nick True</name><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/_jq0c13H6AT4/RY5GwjPRbZI/AAAAAAAAAAk/ShRozm3ND50/s72-c/IMG_0084.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1584473998227859362.post-126297926398556088</id><published>2006-12-22T20:18:00.000-08:00</published><updated>2008-12-10T15:21:04.360-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Howdy'/><title type='text'>Howdy</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jq0c13H6AT4/RYyvATPRbYI/AAAAAAAAAAU/SEcEg2OSvA4/s1600-h/IMG_0062.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_jq0c13H6AT4/RYyvATPRbYI/AAAAAAAAAAU/SEcEg2OSvA4/s320/IMG_0062.jpg" alt="" id="BLOGGER_PHOTO_ID_5011572905055710594" border="0" /&gt;&lt;/a&gt;Hello and welcome to the &lt;span style="font-style: italic;"&gt;exciting &lt;/span&gt;adventure that is "vacant parking space detection". So far, the focus of my efforts has been the generation of a viable training set and test set comprised of overhead images of a parking lot.&lt;br /&gt;&lt;br /&gt;Being that I am currently in the Bay Area and have no access to P503 (the parking lot behind EBUI), I have decided to use a parking lot in Emeryville, CA, shown in the image on the right to train and test my vacant parking space detection software on.&lt;br /&gt;&lt;br /&gt;Using a Cannon A540 set at 640x480 with a circular polarizing lens to cut down on glare, I took 33 pictures of a parking lot on 12/22/06. Unfortunately, over 2/3 of the pictures were ruined due to blurriness caused by my shaky hands. Since I took the pictures at dusk when the lighting was poor, the camera shutter was open a lot longer than it is when the lighting is good, requiring a steadier hand to prevent &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;blurring&lt;/span&gt;.  Oh well, live and learn.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1584473998227859362-126297926398556088?l=truepvd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truepvd.blogspot.com/feeds/126297926398556088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1584473998227859362&amp;postID=126297926398556088' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/126297926398556088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1584473998227859362/posts/default/126297926398556088'/><link rel='alternate' type='text/html' href='http://truepvd.blogspot.com/2006/12/howdy.html' title='Howdy'/><author><name>Nick True</name><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/_jq0c13H6AT4/RYyvATPRbYI/AAAAAAAAAAU/SEcEg2OSvA4/s72-c/IMG_0062.jpg' height='72' width='72'/><thr:total>2</thr:total></entry></feed>
