Write a small introduction to yourself.
Hi, my name is Daniel Bloznalis and I am a Freshman Computer Engineering Major at the University of Southern California. I was born in Massachusetts, and now spend time there, with my mother in Georgia, and at school in California. I am also pursuing a minor in Physics and am involved in Fencing and the USC Rocket Propulsion Lab. I have been interested in computer science for as long as I can remember but my first formal experience with it was an introduction to Java class that I took during my sophomore year of high school. Since then I have also been doing something in CS, be it for a class or just for fun. I am also very interested in photography.
State your preferred email address.
If you have chosen a nick for IRC, what is it?
Why do you want to participate in summer of code?
I want to participate in the Summer of Code for many reasons. Some are practical, it would provide more work experience and I would be paid for it. But mostly it is so that I can get a chance to work on a cool project and learn from a mentor. I figure I_m going to spend a good portion of my summer coding because I enjoy it, so it might as well be for something productive.
What are you studying, subject, level and school?
I am studying Computer Engineering (CECS) as the University of Southern California
What country are you from, at what time are you most likely to be able to join IRC?
I am from the United States (but will be on the East Coast for the summer and the West Coast during the School year). I would most likely to join IRC between 9:00am and 1:00am.
Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.
I do not currently have any other plans for the summer. If I were to travel during the summer it would not be a vacation and I would definitely take my laptop with me.
What programs/software have you worked on before?
During the summer after my sophomore and junior years of high school I worked as a programming intern at Stratascope Inc. They developed a web application that provided research tools for inside sales associates. It provided information about companies, problems they faced, and conclusions based on this data. It was written in C# and asp.net and used a SQL database.
I have also worked on numerous programs of my own for fun. Some of the better ones were (all of these are works in progress) are
-a program that used a webcam to track and recognize playing cards. The end goal was to play a card game against a computer of across the internet with physical cards. C#
-a Narrator program that would take a novel and parse the text to try to determine the speaker using clues such as name and gender. The end goal of this was to develop an ebook reader that would use different voices for different speakers. C#
-a physics engine. It has gone through many false starts and is currently at a very simple state. C++
-a program that would generate maps for the game Minecraft. The worlds would be composed of floating planet-like bodies. This is the most recent project (I started 2 days ago, it is currently 2/3 of the way through understanding the Minecraft world file format). C++
Have you developed software in a team environment before (as opposed to hacking on something on your own)?
At Stratascope I worked on a small team with 2 other programmers.
Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?
I have not participated in the GSoC before
Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.
I am not involved in any open source development projects
What type of photos do you take, with what camera, in which format?
I_m not sure how to describe the types of pictures that I take, they are not landscapes, portraits or studio. I take pictures of things that I think are interesting. My camera is a Canon T2i, and I currently really like my 50mm f1.8 lens. I shoot in RAW.
How do you organise and develop your photos?
I have organized and developed my photos previously in Picasa and now use Lightroom
Do you have a website/flickr account?
How proficient are you with post-production software, and which one(s) do you know?
I am mildly proficient with Lightroom and Photoshop
Are you familiar with basic photographic data processing (demosaicing, white balance, color management)?
I am familiar with white balance, but not the other two (although I feel better after reading a little Wikipedia)
If you have contributed any patches to darktable, please list them below. You can also list patches that have been submitted but not committed yet, patches that were refused or patches that have not been specifically written for GSoC. This will help us find out what your work was and how you code.
Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.
English is the only language that I speak fluently. I would describe myself as very proficient in written English (I read a lot)
What spoken languages are you fluent in?
Are you good at interacting with other people?
I interact very well with people and enjoy collaborating with others on projects. It is great to work with people with similar skills and interests and create things together.
Do you give constructive advice (both as a photographer and as a coder)?
I give constructive advice often with people I know well and am friendly with, possibly a little too often (you would have to ask them to be sure!) If I do not know a person, however, I most likely will not give them advice unless they specifically ask for it.
Do you receive advice well (both as a photographer and as a coder)?
I believe that I receive advice well, and will sometimes make changes based on the advice I get. I always consider the source, consider how the advice relates to what I am doing, but will also reject it if I do not agree with it.
Are you good at sorting useful criticisms from useless ones?
Yes, I do not take criticism personally, so I can sort out the useful from the useless pretty well. I think most criticism has some value, but as I said, if something does not make sense to me, or if I do not think it will improve what I am doing, I will reject it.
How autonomous are you when developing? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to "see how it turn out", taking the risk of having it thrown away if it doesn't match what the project want?
I am relatively autonomous when developing. It is sometimes good to discuss complex problems with others. For a particularly tough problem, I will often talk to someone who has no background in computer science simply to organize my thoughts; kind of like talking to myself, except with someone to nod and give feedback, to confirm whether or not I am making sense. In the case presented, I think I would take the second option: action, even it has to be thrown away, rather than careful planning . If it does have to be thrown away, I know I will have learned something from the experience and will be in a better position to start again.
Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?
The project that I selected from the list was Computational photography. I was particularly interested in the areas of image alignment/stitching/panoramas, noise removal by combining images, and face recognition. The other areas interested me as well. Before selected this project I was also interested in the Local Edits project.
Why did you choose this project?
I choose this project because it is an area that interests me in both computer science and in photography. I like to take HDR images and panoramas and I am very interested in the area of computer vision (I am on our USC Aerial Robotics Team, Software, computer vision. I did not mention it before because I have just started getting involved). The area of computational image processing has always interested me (it was the reason for the webcam sprogram mentioned above) and I was fascinated when I saw the Darpa urban challenge on television.
Include an estimated timeline for your work on the project. Don't forget to mention special things like "I booked holidays between A and B" and "I got an exam at ABC and won't be doing much then".
I_m not sure how to put together a detailed timeline of my work. I have no other real time commitments over the summer and would devote my entire work time to this project. So my timeline would be to work on the most important feature until it is finished and then move on to the next one. Before the start of the program I would plan to do a good deal of research into this area so that coding can begin immediately.
Pre GSoC _ become more familiar with the darktable codebase. Look for existing free software that can be used in these projects
Summer _ I plan to complete as much of this as I can. This is the proposed order
Image alignment/stitching/panoramas All of these are extremely rough estimates
-2 weeks, prototype and evaluate different algorithms. Choose one/ a combination of different ones. (I have started working on this now with the point matching algorithm)
-2 weeks, implement selected algorithm and integrate into darktable
-focus stacking (should just be a slight modification of Image alignment to account for the differences in focus)
-1.5 weeks, adjust algorithm from above to work with out of focus images
-1 week, integrate into darktable
-face recognition/feature search (optional/time permitting)
-1 week, research/algorithm prototyping
-1.5 weeks - implementation and integration
-noise removal (optional/time permitting)
-retargeting (optional/time permitting)
Include as much technical detail about your implementation as you can.
Panoramas/stitching/focus stacking _ some sort of point matching algorithm; finding as many as possible corresponding points in images, using either colors or geometry. These would be used to align the image. Possibly something from the openCV library? Also for Panoramas, distortion would have to be taken into account. I would need to do more research before I can say anything about the improved HDR bracketing or the retargeting. The noise removal seems like it should be able to borrow algorithms from video processing and there are portions of the openCV library dedicated to facial recognition.
Details: stitching/image matching
-feature based template matching: generate a edge map of the image and assign weights to the lines. Take the "heaviest" (ie. the most defined line) on the edge of the image and try to match it with a edge map of the other image. The openCV edge detection algorithm would be helpful with this. This is currently the most promising approach (in many panoramas there are strong lines, such as the horizon that would make this particularly effective)
-template matching: take a section of the image and attempt to directly compare it to sections on the other image. This technique seems very resource intensive and may run into trouble with panoramas as the exposure of the images will change as the camera is moved. some variant of this (such as comparing the ratios of neighboring pixels) maybe effective
- point matching: generate a signature of a point which is composed of the color of the point and the color of the surrounding pixels. Then generate signatures of points in the other image and attempt to match them. When enough points have been found the images can be "pinned" together using these points.
-use simple signature mapping to get a basic alignment and use the more advanced algorithms from there. The simple signatures would consist of a value for each row and column that could be matched against row and column signatures in the other image
-sliding comparison: could be applied to the Point matching and template matching algorithms. After an initial point was selected, additional points could be selected by "sliding" the point towards more similar points until a best match is reached. You can think of this as water flowing down a hill, once it stops moving we have reached our best match.
-simplification/compression of the image: the image could be converted to black and white before matching, like colors could be merged to form blobs and then these blobs could be matched, or the image could be resized to a smaller size.
What do you expect to gain from this project?
I expect to gain experience working on a large project and general coding experience. I also intend to gain knowledge related to fields that I am very interested in, mainly photography and computer vision.
What would make you stay in the darktable community after the conclusion of GSoC?
I would stay in the darktable community after the conclusion of GSoC if other features (such as the local edits) that I was interested in are not implemented yet, I become extremely involved in the community, or my work isn_t finished.
Are you familiar with any of the following tools or languages?
git (used for all commits)
my only experience is using it to download the Darktable source code. It seemed very straight forward
C99 (language used for all the normal source code)
I am familiar with C, but am more familiar with C++. My first exposure to it was at the start of the school year, but I have now taken two classes about it and feel very comfortable with it.
I used SQL when I was an intern at Statascope and am relativly familiar with it
not familiar with it, have now read the Wikipedia page
have used it during my CS100 class. I am familiar with the basics
not familiar, ready to learn
SSE intrinsics/optimized programming
not familiar, ready to learn
I have used it before, would not say that I am proficient with it
Which tools do you normally use for development? Why do you use them?
For development in C/C++ I use gedit. I have used eclipse for C/C++ also. For java I prefer an IDE called jCreator or, alternatively, netebans. For C# I have used Visual Studio Express Edition 2010 for my own code and the Team Development version while I was working at Stratascope.
What programming languages are you fluent in?
I am fluent in C, C++, C#, Java and SQL
Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably only add this number in the application for you submit to Google since the info in the wiki is available in public. We will not make any use of your number unless some case of "there is no way to contact you" does arise!
I would be great to talk over the phone.