title
  HOME         PROJECT         JOURNAL         CAREER        
April 30
    I've completed the project for this semester. Finally got the open/save functionality in each platform to work, with a small exception in VB, where I get a Microsoft error when exiting the program after re-opening a still image (the image will display, but the error only occurs here). The OpenCV environment allowed for much easier development here with built-in functionality for importing and exporting files.
    Also, I've spent the past few weeks on the Flash project seen on the front page. Very time consuming but fun!

April 14
    In the VB environment, I've been able to save images as JPEGs and also customly so that I'm able to reopen them back into the program. Right now I'm working on opening and saving streams of images, specifically made for my program. If I have time, I'll look into a more portable file format like .avi, so that streams can be played in most players.
    In the OpenCV platform, I've been able to achieve the rotoscope image statically and now I've created a way to allow the user to control the threshold by capturing keys from the keyboard. I'm looking to import the SOBEL trace into this image. I'm also confident that I'll be able to develop some import and export functionality here before the semester's end.
    From the Flash environment I'm working on tracing over each frame from a video I recorded with the webcam. It's a time-consuming process, but I think the final product will give a better understanding of rotoscoping and how tedious it can be in industry.

April 2
    These past few weeks have been dedicated to improving the processing time when doing the rotoscope filter, and I've found something that I'm satisfied with (for now). I'm using integer division on each pixel and generating my new values by dividing and then multiplying the pixel's RGB bytes by the threshold divisor.
    So, for example, when the divisor is 127.5 (the slider control yields this when 2 is selected), any value from a pixel will yield a range of 0,1 or 2 when dividing by this divisor, since this number is an integer. I then multiply this new value by the divisor and again truncate that value, so the only possible values for each RGB byte are now 0, 127, or 255. I've achieved a 0.1 improvement in processing time when compared to my old method.
    I've also made a few changes to my UI. I've added a filter selection box, so the user can choose which filter to view. I also created a toggle for the SOBEL edge detection that I'm using for the tracing effect to be turned on and off (it really slows down the processing time). Right now, I'm working on opening/saving functionality for both still images and image streams, and I've already been able to import the still image saving process.

March 13
    Now that I've developed what I think is a sufficient image, my time now will be dedicated to deciding the best way to implement my algorithm. VB offers familiarity but I'm not sure if it is capable of processing the stream from the camera and the frames fast enough for my liking. I've done some research on an open source platform called OpenCV, libraries written in C driven to handle camera vision. I could gain a lot of power in this environment regarding ability to process frames faster and also handling the ease of saving/opening still images and file streams.
    Also, our project walkthroughs are happening this week - I'd like to thank everyone that attended for their bright ideas and recommendations for my project!

March 6
    I was able to implement my algorithm to rotoscope frames coming from the camera. I look at each RGB byte within the color structure and determine a new value based on the number of colors I'm allowing. If there are only two choices, for example 0 or 255, I ask which is closer and store the closer in the array. So the final frame in this example would have RGB values of either 0 or 255, which results in only 23 choices for colors. As you allow more colors, the base will change, thus increasing the processing.
    I visited with Dr. Pankratz and he suggested a fast way to calculate these values. In his algorithm, the values are calculated as opposed to my method, where I ran a bunch of "if" statements to see what was the appropriate value. I'll be trying this new algorithm out this week and I'll report back to see if I'm able to gain some processing time.

February 25
    I extended the application to the SOBEL method, which focuses on edge detection. This feature gives me a better defined trace look to the input stream, when compared to my first attempt, which just kept the dark pixels. I started to think about how I'm going limit the number of colors now that I've identified a way to incorporate a trace. I was able to do something simple here by just amplifying each pixel, depending on what basic color it was closest to (red, green or blue). In addition I placed the SOBEL trace on top of this image. It's a start, now I just need to extend the amount of colors used. An unprocessed image is using 2563 possible colors, and in my simple rotoscope image there are only 3 possible colors. Also, I started to slip in processing time here, so this is something I'm going to have to start paying attention to.

February 22
    I built a small tool to trace all dark pixels on an incoming stream of frames. I'll be able to use this algorithm to modify pixels to lessen the number of colors used on the incoming images. Currently I'm designing a structure to define the threshold of colors to make a new image from the input stream. Right now this structure will be static, defined within the program, but after I can attain a "rotoscoped" image I will work towards allowing the user to define the threshold with a control on the interface.

February 6
    Started a small application with simple functionality - takes stream from camera and captures a still image. From that still image I will attempt to modify individual pixels and show the new image.

January 28
    First week of class - assigned our projects, see the project page for details.