top of page


Long term Projects

Eigen Skeleton

Interactive Mesh Deformation Software (2012)


Implementing the concept of real-time surface mesh deformation presented in out paper titled "Eigen Deformation of 3D Models". I used C with openGL for implementing the user interface and lapack for solvers needed to perform the deformations. This software is under development.

PHS Feature Matching
PersHKS (2010)


Implementing the ideas presented in our paper "Persistent Heat Signature for Pose-oblivious Matching of Incomplete Models". The software is split into two parts. The first part (which I developed using MATLAB and Java) accepts meshes as input and generates feature vectors. The software accepts directory names as input, which allows the user to pre-process entire databases of meshes. The second part (developed by Issam Safa using C) finds the L1-distance between two feature vectors and sorts them based on it. The first part is also capable of generating nice segmentations of the input mesh.

MATLAB Binaries : PHSFeat    PHSMatch

Mesh Models     : Database   Queries 

Automation of Real Estate Management System (IIT Bombay, 2006-2007)


During my stay at IIT Bombay, I worked under Prof. S. Sudarshan in a two-member team at Application Software Cell (ASC) on automation of managing on-campus housing for 10,000+ employees and 2000+ students. Responsibilities included:

- Interaction with clients
- Designing database schema
- Designing and implementing the user interface (JSP + JavaScript + CSS)
- Back-end programming (JDBC + Oracle db)
- Testing and debugging
- Project demonstration and usage instructions for clients

Graduate School Course Projects

Image segmentation using stable manifolds (2011)


Image segmentation algorithms classically fall into one of two classes: region-based methods or edge-based methods. Region-based methods typically employ clustering, region growing, or split-and-merge methods to construct regions based on feature characteristics of the region(s). Conversely, edge-based methods use edge detection to find edges within the image, and then use some method to link the edges to form boundaries that define regions. Some methods also use elements from object recognition to further refine the segmentation.
Our method relies simple region-merging to create stable manifolds of the persistent maxima of some function derived from per-pixel color information of an image. Specifically, we wish to simplify the derived function to remove maxima with small persistence and then compute the stable manifolds of the maxima of the simplified function.


Project Report

Animation techniques (Autumn 2010)

  • Forward Kinematics using both Euler angles and quaternions with ease-in/ease-out and curvilinear interpolation

  • Inverse kinematics using Jacobian descent as well as cyclic coordinate descent

  • Particle system simulation with thousands of independent particles

  • Cloth simulation using spring and damper system with random wind field  [Source]

  • Prey-predator behaviorial model in a constrained region with obstacles  [Source]

Denoising voxel data using homological persistence (Spring 2010)


Voxels are 3D equivalents of pixels, usually generated by 3D scanners, that are used to map volumetric data onto a regular three dimensional grid. Isosurface algorithms are then used to extract (often noisy) surface meshes from this data. The aim of the project was to simplify the 3D function of voxel values by using elements from homological persistence theory. The main challenge was in finding the saddle-saddle pairs to be simplified and then removing them by changing the function values along a path connecting the two. The project was done in Java.

Curve and Surface Modeling (Spring 2010)


The aim of this project was to implement various curve generation techniques like Bezier curves, Cubic B-Splines and Casteljau subdivision. I also implemented Doo-Sabin, Catmull-Clark and Loop subdivision techniques for surfaces. The coding was done in MATLAB with GUI created using Guide.

Ray tracer using C++ (CSE 681, Winter 2010)


The software accepts a scene file as input and renders the scene by using ray tracing. The user can specify various camera parameters, location of multiple objects (cubes, spheres, cones as well as polyhedra meshes), apply transformations and even textures. The tracer also supports reflective and refractive indices, and different types light sources.


Source    [Scene Files]

LISP interpreter command line
LISP Interpreter (Spring 2008)


This implementation of a LISP Interpreter in Java mimics a standard evaluate-print interpreter model. A front-end class, called IOModule is used to interface with the user. The back-end consists of three major classes:


1. Lexer (a lexical analyzer for input expression)
2. Parser (a parser to create the s-expression object in Java)
3. Evaluator (to evaluate the s-expression)

In addition, a class Token is used for the tokens generated by Lexer and passed to Parser.

Source      Execuable JAR

Unified Parallel C - A Study and Performance Comparison with MPI (Winter 2008)


With serial execution hitting its performance limits, the world has now started to turn to parallelism over the last few years. Many new programming models and languages have been suggested and created to this effect. Of these, the MPI programming language follows the message passing model while UPC aims for a partitioned global address space model. Over the last few years, MPI has become extremely popular due to the amount of parallelism it offers, but at the price of increased complexity in programming. UPC, on the other hand, tries to keep the performance of MPI and offer an easier and more intuitive programming environment. The purpose of this project is to study and compare these two languages that are based on two different programming models and to compare their performance and scalability on distributed systems.

Project Report        Talk Slides

Mitigating IP Soofing based MITM and DDoS Attacks using Tusted Overlay Networks (Autumn 2007)


The unexpected popularity and growth of the Internet led to its arrival on the world stage without much thought being given to security issues and flaws in its protocols. As a result, it has become a hub of criminal activities with IP spoofing as the common modus operandi to make untraceable attacks. This paper proposes the use of trusted overlay networks to detect and stop two of the most popular attacks based on IP Spoofing, viz. Distributed Denial of Service (DDoS) and Man in the Middle (MITM) attacks. MITM attacks involving spoofed connections to the server are dealt with by performing IP validation based on the fact that the attacker usually isolates the actual client being impersonated, so that it becomes invisible on the Internet. The solution can also be used to curb DDoS attacks with spoofed IPs by detecting and stopping them during the TCP three-way handshake stage.


Term Paper

Undergraduate Projects

Adding text search support in ggv document viewer (2006)


During Autumn 2005 and Winter 2006, I worked with Prof. Uday Khedkar of IIT Bombay on modifying ggv (a PostScript document viewer). The objective was to add search capability. Lack of sufficient documentation on both ggv itself and bonobo (UI library used to build bonobo) meant that we had to go through the code line by line to understand the flow of execution. Some of the other challenges were result highlighting and typographic ligatures.

ext2fs partition reader for Windows (2006)


With linux systems becoming increasingly popular, the ability to read and write ext2/3fs file systems in Windows has become increasingly important. We implemented such a system using C for reading blocks of data from the hard-drive and C# for designing the front-end GUI.

Studying and modifying the C++ lex and yacc specifications (2005)


As a part of my summer internship at IIT Bombay, I worked under Prof. S. Biswas on studying the ANSI C lex and yacc specifications and modifying them to enable gcc to print helpful information such as the number of if-else constructs, for loops, while loops, deepest level of nesting etc.

bottom of page