|
|
What are wavelets, you ask? Well wavelets are very hard things to define. In a way they're actually a group of things, but we'll focus on the general definitions for this entry.
A wavelet is actually an algorithm. A sequence of commands to produce something or to modify something. Wavelets are used in many applications, but I'm going to be using them to compress images.
What they do, in essence, is apply a common modifier to a sequence of numbers to make storing those numbers easier. For example, 3 5 5 3 could be converted to 1 2 2 1 as long as you know that 2 has been subtracted from each one. Notice also that computers require more memory to store larger numbers. Hence, if you can get an Integer of the value...let's say 512 to get down below 128, then you can change that 32-bit number to an 8-bit number. Smaller space, right? Now there's a little extra space reserved at the end for exactly what coefficients were used to get this smaller space (defining exactly which variety of wavelet was used), and we can compress that as well or even remove it entirely and just hardcode the program to perform the same function on those numbers.
Take note that images are just sequences of numbers (pixels) and that all a wavelet has to do is compress those numbers without even knowing what they represent. The program that I am making is an optimization program made to improve upon the current wavelet by tweaking the coefficients so that they are better at compressing certain images (B&W, Grayscale, Lots of white, Lots of edges, etc.).
Easy, right? ...*faints*
OH GOD WHAT IS THIS?!
No, actually it was more like a controlled yet growing fear. The code for this program has been destroyed by Microsoft. I'm not kidding here, MS Visual Studio has created these empty methods that don't do anything and it's really throwing me off. In addition to that, I can't find the main method, which is the start to the program. Something tells me there isn't one in this format, so I've focused around the code I can recognize.
So, to better acquaint myself with the program, I've decided to convert it into Java. Naturally that means creating the visual element first.
**Cut to 2 hours later**
What the? Where did this bit of code come from?? OH! It was declared under that name at the beginning of the class...but why was it named something so unlike what it actually did? *sigh* And it doesn't help that the code isn't documented, either.
So I've got the visual element going. I should be able to finish it up tonight...I hope.
~/Dev
**Note: ask for definitions in the comments if you want, they only serve to help me :)
OK, time to describe in detail exactly what I'm going to be doing. This will help me simplify exactly what I'll be working on so I don't get so overwhelmed.
Alright. First of all, I'm going to be working in C++. C++ is very similar to Java, except it's not as object oriented. In fact it isn't at all, but does a good job at 'faking' it. The format of the language at first glance looks almost the same as Java, but C++ gets very fuzzy when method declarations, variables, and (oh god) pointers are involved. This will be my major focus; rooting out the differences between the two languages.
I will then work on ANSI C++, which is made for the UNIX environment rather than the Windows environment. ANSI C++ has very little differences to MS C++, so this process shouldn't take so long.
Once the code is complete, we'll work on optimizing it to work much faster on the Arctic Regional Supercomputer Center(ARSC)'s computers. Most of the focus will be on setting up the program to work in multiple threads to allow for parallel processing between the many servers ARSC has. The rest of the work will go to just optimizing the functions themselves, removing for-next loops where appropriate and documenting the code we have.
After that, the tweaking process begins. We need to run the program many times with different settings to determine the most efficient way for the program to work. This is harder than it sounds, as this program will likely take days to just finish one run. Still, it must be done.
Finally, me and the team (three of us total) will put together a final report on exactly how the program is working and what benefits it has to the world. This will be the main part of my grade, which is why I am making this journal.
~/Dev Thu, Jan. 19th, 2006, 12:27 pm The Beginning
In the beginning, there was man. Man screwed things up royally, but he made computers before he did. Computers didn't screw things up, and now we live a happy, prosperous life in a digitized world.
Eventually.
In the meantime we're still screwing things up. Let's work to fix that, shall we? This journal was created to assist me in a computer science project I've been assigned to work on. I will get into extremely technical subjects, and there will be some very undocumented code tossed around.
Continue if you dare. ~/Dev |