RESULTS Lazy Snapping has been improved in terms of both speed and quality of results. The final product is a stand alone application which allows users to mark foreground and background areas of an image, recieve an image cutout based on their input, and then edit the results to achieve a quality foreground extraction. Lazy Snapping was improved first by implementing watershed image segmentation. This replaced the mean shift segmentation algorithm that was being used and speeds up segmentation significantly. Results were as follows: Rockstar(640X480): Watershed - 5 seconds. Mean-Shift - 8 seconds. Flower(400x266): Watershed - 2 seconds. Mean-Shift - 4 seconds. Skydiver(360x240): Watershed - 1 seconds. Mean-Shift - 2 seconds. Besides running faster, Watershed also produces results that are far less pixellated. The difference in quality can be seen by comparing the results from a cut done using mean shift and a cut done with a watershed segmented image. An editable boundary was also implemented in order to improve the ease of use of Lazy Snapping. This gives users direct feedback as to what was marked foreground and what was marked background which can be useful for remarking and subsequent cuts. A user can also draw a new edge directly onto the source image and a new cut will be performed, translating the rough user drawn edge into an accurate foreground/background differentiation. Lazy Snapping still has some flaws. The edge penalty does little to adjust cuts, which may mean an edge weight is being set incorrectly. Also, the border editing tool will sometimes create new incorrect edges outside of the area being fixed by the user. Allowing the user to force locality on the new border cuts may be a way to fix this. WORK The start of the project was slow for me, as I had to get comfortable with the current Lazy Snapping code, get the code to build and compile, and read about and understand many topics that were new to me. I spent the first half of the project period implementing watershed and getting it to work within Lazy Snapping. Once this was complete, I worked with Davey to improve performance of Lazy Snapping and began work on the border display and editing system. Many iterations of the border editing system don't appear in the final product, as they were buggy and hard to use. Overall, I spent more time on each part of the project than I had originally intended. This was usually because of flaws in design or a misunderstanding of the material. In the future, I need to focus more on research and design instead of immediately attempting to implement things I don't fully understand. WHAT I LEARNED Over the course of the project, I learned about many computer vision topics I was previously unfamiliar with. These mainly focused around the infrastructure of Lazy Snapping, such as image segmentation, color clustering, the max flow problem, and graph cuts. I also explored many tangents to these topics, such as using graph cuts for texture synthesis and construction. Beyond the technical knowledge I took away from this project, I also learned about what goes into a larger project and what is necessary to be successful. The largest problem I experienced during this project was not spending enough time understanding and designing. Instead I attempted to jump right into many things and "hack up" a solution. In future projects, I need to get away from this tendency. SELF EVALUATION Overall, I am pleased with the final product. It performs effective image cutout and can achieve spectacular results. However, I do feel the project could have gone better. Lazy Snapping is still not a perfect tool, and as the project came to a close I began to see more and more improvements that could have been made. In retrospect, I should have focused more on the existing code earlier in order to gain a better understanding of the system. This would have allowed me to make more improvements sooner and would have most likely improved the other parts of the project. I would advise anyone starting a project like this to spend time early in the project period ensuring the accuracy of each system module. If I had done so, I feel development would have been sped up considerably and I would have achieved better results.