Resizing the Target Image
We tweaked our previous implementation to account for targets of different sizes.
We tweaked our previous implementation to account for targets of different sizes.
This is our first true implementation of the mean-shift algorithm, and it works quite well.
We decided to better understand how the mean-shift algorithm works today. After reading the original 1975 paper and some websites (French Wikipedia, ABCshift), we scribbled the following notes on a whiteboard.
By now we have given our first tracking algorithm a pet nickname- Dumb Track. The reason should be obvious- the algorithm often returns false positives and is easily thrown off by changing the orientation of the object, and when it is tracking correctly it is usually only tracking a small section of the target. We hypothesize that one of our biggest issues is our decomposition- we are comparing the search frame to the goal frame via RGB-valued color incidence vectors. It seems that within an RGB vector there is dependence between entries.
Given this problem, we are abandoning RGB-space altogether for the much more applicable HSV-space. We hypothesize that working in HSV will solve a few problems, most notably the problem of having the RGB value of an object going through extreme variations depending on the situation of ambient light. With HSV, the color of an object should remain mostly constant independent of light in the Hue.
We wrote an RGB to HSV conversion function. Here is a video of our HSV function at work.
During our chat with Greg today he suggested we take a look at what contestants in the DARPA Grand Challenge have managed to accomplish using their cameras.
Greg also mentioned Rockwell's involvement with BAAs: Broad Area Announcements, which are open invitations for companies and universities to suggest project ideas within specific problem domains. Apparently several other groups are working on projects with similar requirements to ours. We were glad to hear our project covers a relevant topic.
Finally, we discussed the paper we will be writing towards the end of the semester. A sizeable section of the paper will be dedicated to the algorithms we used during our development. We intend to discuss criteria for choosing each algorithm via a trade matrix.
Here is a video of our first tracking algorithm. Still very rough.
We discussed our progress with Greg today. He posed some interesting challenges for us to consider:
Here's a link to a description of CAMShift. We're currently researching implementations of the algorithm in anticipation of writing our own.
We took some measurements today to determine how a 6 inch object appears to our webcam at various distances. By adding a trendline to our data, we determined that objects disappear into the distance according to a power-based equation.
The initial code for the microcontroller that runs the car is now completed and running with a working serial interface. In addition, there is now a C library with function calls such as "updateSpeed" that allow all the low level car control stuff to be abstracted away from now on (hopefully). A detailed description of how the protocol is set up can be found here. All of the features we wanted are accounted for currently including the idle timeout.
Today we worked to figure out how to control the steering and speed controller on the car. Initially we experienced some confusing results, but we went over to Everett and got an oscilliscope and measured the pwm signals the radio reciever was outputting and mimiced them with our microcontroller. In the end we know have full speed control and steering with over 1000 discrete angles we can choose, which ought to be plenty.
Additionally, we got opencv and our dev environment set up onthe computer allotted to us in the senior project lab in Siebel. We now have a skeleton program that pulls frames off the camera and displays them to the screen, which means it looks like there's nothing to stop us moving ahead now.
After our teleconference with Greg today we took our car outside to test it in a large open space. At its top speed we found that it could easily keep up with bicyclists, but its steering was very touchy. A complete spinout could easily be initiated by turning too quickly.
The car was very stable, but we will need to limit the top speed of the car to a fraction of its potential during our early programming to ensure the safety of the netbook (and the car itself) once it is autonomous. We have not mounted the netbook onto the car yet.
A squirrel found our testing interesting at first, but quickly changed its mind when it discovered the car could turn.
We had our second teleconference with Greg was this afternoon at 4:00pm. We updated him on our progress. He asked us to clarify our intended timeline for achieving the goals laid out in our requirements document.
The meeting with Greg helped us to focus on our near-term goals:
We had our first teleconference with Greg was this afternoon at 4:00pm. He helped us do some pre-emptive project management. We set up a future meeting schedule and addressed how frequently we should communicate.
After some effort we also managed to set up our coding environment. We have successfully compiled sample OpenCV programs in both Linux and Windows. Development on our own code will be commencing shortly.
Professor Woodley ordered the hardware components neccessary for our project this morning.
We met after class today to draft a document outlining all of the requirements of our project, including any hardware we'll need to purchase.