Quantcast
Kaushik Shankar

Projects

Game Development

Gnome Man's Land

April 2011
DESCRIPTION
I worked with a group of enthusiastic individuals as a programmer to make a wonderful game titled Gnome Man's Land that won the first prize during a one-week Game Jam sponsored by the Video Game Development Club at University of California, Irvine. It was written in one week using C#, and the XNA framework for the XBox 360 and PC.
TECHNOLOGIES USED

Float

January 2011
DESCRIPTION
I worked with a group of enthusiastic individuals as a programmer to make a wonderful game titled Float that won the first prize during a one-week Game Jam sponsored by the Video Game Development Club at University of California, Irvine. It was written in one week using C#, and the XNA framework for the XBox 360 and PC.
TECHNOLOGIES USED
TRAILER

The Angry Hand of God

April 2010
DESCRIPTION
I worked with a group of enthusiastic individuals as a programmer to make a game titled The Angry Hand of God, that won the first prize during a one-week Game Jam sponsored by the Video Game Development Club at University of California, Irvine. It was written in one week using C#, and the XNA framework for the XBox 360 and PC, and after much polishing, its has now been published!
TRAILER
LINK

Personal Projects

A Quick Project in Steganography

August 2011
DESCRIPTION
Steganography is about concealing messages in images so that, apart from the people who know that a hidden message exists within the image, no one suspects the image to conceal a message. I basically made a program that would take any png file and alter it very slightly to contain a file the user provided. In other words, I made a program to embed any file into any png file that meets the necessary image size requirements. Can you tell the difference between the image on the left and the image on the right?
Lenna Original Lenna Encrypted
The image on the right actually has the animated image file below encrypted into it.
Reddit Alien Original
How do I do this? I use the last bit of each color channel of each pixel to store each bit of the data file that has been provided. This works especially well for PNG files because it also includes the alpha channel, giving me a total of 4 bits per pixel to store information. The simplicity of this method lends itself to being applied in many different applications. Using larger images, more data can be stored within the image. Higher resolution is the key to more data stored inside the image.

Here is another example using a larger image:

What is encrypted in this image?
The previous image is able to conceal an entire mp3 file. What is the mp3 file? Use my code to find out! Instructions are in the readme.txt file.
CODE
THOUGHTS
As you can imagine, the ability for an image to conceal not just text, but rather an entire file, makes it very easy to distribute files. Unfortunately, sacrifice has to be made. The cost of hiding the information is the limit on the size of the file that can be embedded into a given image. Since we use 1 pixel to represent half a byte, and 1 pixel of information is 4 bytes, we are increasing the file size by a factor of 8. This disadvantage can be overcome by using some compression techniques. One simple method would be to create a ZIP archive of the file to be embedded before it is embedded so as to use less space. There is definitely room for improvement, and I am excited to see how people can improve this method.

My Professional Website

July 2011
DESCRIPTION
After much web-traversing, I was able to collect enough information and knowledge about how to make a good website. Pooling from so many different sources, I decided to use basic HTML5 and CSS3 to make this professional website. Much of the layout is not my own idea, but collected from the ideas of so many others online. Although the design was borrowed from many others, I believe this reflects my design preferences because it is not entirely similar to any single other person. Because I typed out everything, I understand the effect of every line of code. The only exceptions are of course the reset CSS files. I attribute the HTML5 reset to html5doctor.com, which also allows for mobile devices to see my page a little better. The entirety of this code with the exception of documents containing personal information is available on GitHub.
SHAMELESS PLUG
If you like the design and content of this website, please feel free to indicate to Google your interests. If you don't like the design, let me know how to make it better! Thank you!

Sudoku Puzzle Solver

June 2011
DESCRIPTION
I made a Sudoku puzzle solver for my "Intro to Artificial Intelligence" class and added some neat features once the project was due. The original project simply had to solve the puzzle and show the time spent, and the node generation count (since we were required to solve this using an algorithm that performed a state-space search). We were also required to implement different heuristics to solve the puzzle. After the due date, I added options to see the backtracking as it happened, and also added different output options. Code is available on GitHub.
LINK

Research

A Region-Based Color Constancy Algorithm using the PDE Formalization of Retinex Theory

August 2011
DESCRIPTION

During my time at the iCAMP Research Program, I was able to come up with a better method for finding the perceived color of objects in a scene. This field of research is called Retinex Theory. Retinex Theory, formulated by Edwin H. Land in 1964, attempts to simulate and explain how the human visual system perceives the same color under different lighting conditions. The ability to acquire the perceived color of objects in a scene, by removing the effects of lighting (illuminance), can be a very useful tool for numerous applications including object recognition, and photo image correction.

A PDE Formalization of Retinex Theory, by Jean Morel et al. has led to a fast implementation using only two FFTs with reasonable effectiveness. The key concept is in considering the changes in pixel intensity as a way to investigate the effects of ambient light. If we assume that ambient light causes slow changes in the pixel intensities, while objects in the image cause sharp changes in pixel intensities, we can remove the ambient light by finding the changes in the pixel intensities (by computing the gradient values at each pixel) and then applying a threshold to remove only the small changes. This will result in a new, thresholded gradient, from which a modified image can be formed. One drawback to this method is that different changes in ambient light are not considered, and thus they still remain within the image. For example, pixels that are part of a wall in an image may contain a very smooth gradient, while pixels that are part of a ball within an image may contain sharper changes (simply because the shape causes the gradient of the ambient light to change faster). Another drawback is that the threshold value is provided by the user. This makes the user responsible for finding the best value that will remove the most ambient lighting. The problem with this is that there may be regions of the image that will lose detail as a result of having a higher threshold value that is necessary for another region. These problems are exceedingly apparent when images are of real-world scenes.

One improvement I made is to consider images as having distinct regions, within which there exists ambient light specific to that region. The next step is the key to the solution. The threshold value depends on the pixel intensities within that region. As a result, each region can have different threshold values. Rather than choosing threshold values, users are asked to choose regions within the image which contain the ambient lighting. Regions are easier to provide for the user, than threshold values, because regions have explicit visual meaning, where as threshold values are implicit. These two changes have greatly improved the effectiveness of the removal of ambient lighting within an image.

RESULTS
Adelson Checkershadow Illusion
Square A and B are the exact same color.

My goal is to change the image to make color values to be how we perceive the colors to be. In this case, the color values should change such that Square A should have darker colors than Square B, since that is how we perceive it.

Current Method for Retinex Theory My Method for Retinex Theory
Adelson Checkershadow Illusion Adelson Checkershadow Illusion
The original method changes the colors on the checkerboard squares A and B so that A is darker than B, but causes major color changes in the rest of the image and causes detail loss as well. My method significantly reduces the shadow's effects to make squares have colors that are similar to how we perceive them, without any loss of color anywhere else in the image.
MORE INFORMATION
For more information about my work on Retinex Theory, visit the iCAMP Research Program Summer 2011 Page.

Antibiotic Resistance

January 2011
DESCRIPTION
I worked with a biologist researcher to visualize the antibiotic-resistant bacteria to a number of currently available antibiotics. The image below is the final visualization showing specific antibiotics on the outer ring, and specific isolets in the inner ring, and connections indicating resistance. I used Java to read in and store the data entries provided to me, and then proceed to generate the image. Furthermore, I used ImageIO along with ImageBuffer to generate the desired output. Some quick and clever tricks to generate colorful lines were added by request of the researcher in order to create visual appeal.

Mathematics

Hyperbolic Trigonometric Functions [UPDATE]

June 2011
DESCRIPTION
Revised and remade the original work to be simpler and more professional. Specifically, the formula numbering system was revised so that only important formulas are numbered for later use. Furthermore, I improved the readability of certain step-descriptions, and emphasized the overarching process while also looking at the details of the integral calculus.
LINK

Project Euler Problems 1 - 25

June 2011
DESCRIPTION
The problems described and posed by Project Euler sparked my interest in solving them. I started solving these puzzles about 3 weeks ago, while also learning to use the Git version control system. So far I have solved 25, and I will continue working on them, and posting them to my GitHub repository for my Project Euler solutions, as I have the time. Below is the badge I received for completing the first 25 problems.

Deriving the Definition of Hyperbolic Trigonometric Functions and Their Identities

October 2010
DESCRIPTION
A high school project for which teaching to a broad audience a new topic was the primary objective. I discuss the derivation of the hyperbolic trigonometric functions, which are conventionally expressed as exponential functions of the hyperbolic angle, and their similarities and differences to the circular trigonometric functions. This shows my strengths in LaTeX as well as my strengths in compiling and presenting data. I want to stress that I have compiled different sources in the remaking of this proof and it was not me who came up with it. I just want to stress that I attempted to make this proof clearer than the proof which I had been presented.
LINK