Photo Detail Manipulation via Image Pyramids

My final project for the Com­pu­ta­tional Pho­tog­ra­phy class at GaT­ech. Multi-scale image contrast/detail manip­u­la­tion Oper­at­ing on images at mul­ti­ple scales is con­ven­tion­ally done using multi-scale decom­po­si­tions, such as the Lapla­cian pyra­mid [Burt and Adel­son 1983]. Such tech­niques decom­pose an image to mul­ti­ple detail lay­ers at dif­fer­ent scales in a pyra­mid like fash­ion. This project demon­strates how image pyra­mids based on the bilat­eral fil­ter [Tomasi and Man­duchi 1998; Durand and Dorsey Read more […]

Computer Vision Learning Portfolio

This page con­sti­tutes my required exter­nal learn­ing port­fo­lio for CS 7495, Com­puter Vision, taken in Fall 2011. In it, I dis­cuss what I have learned through­out the course, my activ­i­ties and find­ings, how I think I did, and what impact it had on me. About me I am a cof­fee fanatic that is into com­put­ers, pho­tog­ra­phy, com­puter vision, com­pu­ta­tional pho­tog­ra­phy, and elec­tron­ics. I am cur­rently work­ing toward a Master’s Degree in Com­puter Sci­ence at Geor­gia Tech. My pas­sion is in using GPUs Read more […]

GPU TV-L1 Optical Flow with LibJacket

Update: Huang Chao-Hui was nice enough to port the Lib­Jacket code men­tioned here to Array­Fire — see his work here. As one of my Com­puter Vision class projects, I decided to imple­ment opti­cal flow, because I wanted to learn more about opti­cal flow, and also I wanted to code it on the GPU (because I love GPU pro­gram­ming!). One of the more suc­cess­ful approaches to opti­cal flow is  total vari­a­tion L1 reg­u­lar­iza­tion (TV-L1).  Pock et al’s An Improved Algo­rithm for TV-L1 Opti­cal Flow [Paper] Read more […]

Music Visualization with Processing

Live Spec­tro­gram Re-Inspired by the awe­some artis­tic works in Res­o­nance the Film, a TED talk on gen­er­a­tive music videos, and then remem­ber­ing the good ol’ days of Milk­Drop magic, I found myself cap­ti­vated and want­ing to learn more about music visu­al­iza­tion and how I could cre­ate my own. Since I will be using Pro­cess­ing for the first time this semes­ter in my com­puter graph­ics class, I chose to jump start my learn­ing by explor­ing music visu­al­iza­tion in the lan­guage Pro­cess­ing. Doing some Read more […]

GPU Connected Component Labeling

Con­nected Com­po­nent Label­ing (CCL): “is used in com­puter vision to detect con­nected regions in binary dig­i­tal images”, and some­times referred to as blob col­or­ing. Moti­va­tion: To keep AccelerEyes’ ever expand­ing GPU library grow­ing, over a few weeks of this sum­mer I took on the project of writ­ing a CUDA ver­sion of con­nected com­po­nent label­ing to be used in Jacket (M) and Lib­Jacket (C++). It turned out to be quite a fun learn­ing expe­ri­ence! I will share some of the details here. I came Read more […]

GIMP Scripts

Usu­ally, when I’m using GIMP to edit pic­tures, there are a cou­ple of sim­ple enahc­ne­ments I rou­tinely apply to each image. So, I’m slowly learn­ing GIMP script­ing and cre­at­ing some sim­ple scripts to help auto­mate some steps in my dig­i­tal dark­room work­flow. Here are two scripts that I’ve come up with so far, that auto­mate some tasks that I do routinely. They are works in progress, but seem use­ful enough now to share here:   A batch script for Auto White Bal­ance / Con­trast Stretch / HSV Read more […]

AI Learning Portfolio

As a final assignment/write-up for my CS6601 Arti­fi­cial Intel­li­gence class at Geor­gia Tech, this learn­ing port­fo­lio was made to sum­ma­rize what I had learned through­out the course… CS 6601 Learn­ing Port­fo­lio This page con­sti­tutes my learn­ing port­fo­lio for CS 6601, Arti­fi­cial Intel­li­gence, taken in Spring 2011. In it, I dis­cuss what I have learned through­out the course, my activ­i­ties and find­ings, how I think I did, and what impact it had on me. About me I am a coffee/caffeine Read more […]

Single Camera Real Time HDR Tonemapping

April 2011   Abstract As a final project for my Com­pu­ta­tional Pho­tog­ra­phy class at Geor­gia Tech, I cre­ated an appli­ca­tion that uses a sin­gle video cam­era to cre­ate tonemapped HDR images in real time. This project’s inspi­ra­tion comes from Soviet Mon­tage Production’s DSLR HDR video. The app runs on Linux PCs (using USB or Firewire cam­eras) and Android phones (using the built-in cam­era). Cus­tom OpenCV code man­ages the dif­fer­ent expo­sure images, and gen­er­ates a basic HDR image. The HDR Read more […]

Computer Vision on Android with OpenCV

March 2011 With the help of Motodev Stu­dio for Android, I’ve extracted theandroid-opencv JNI cam­era exam­ple and spawned a fork of my orig­i­nal com­puter vision app, Viewer, to an OpenCV ver­sion: View­erCV. Both are avail­able on Google Code as open source soft­ware. Viewer Fea­tures: *FAST Fea­tures (default android-opencv exam­ple) *Square detec­tion *Sobel Fil­ter­ing *His­togram Equal­iza­tion *Gra­di­ent edge mor­phol­ogy (Neon mode) *Local Con­trast Enhance­ment (Vivid mode) *Live Read more […]

Computer Vision on Android in Java

Jan­u­ary 2010   Over the hol­i­day break, I finally cre­ated an Android app that allows image pro­cess­ing on the camera’s raw data, and dis­plays it back on the screen. It only uses Java on the CPU for now, but in my free time I’ll be port­ing the code to OpenGL ES to run on the GPU, and also explor­ing the OpenCV port for Android.  The hard part so far was get­ting access to the raw pixel data and being able to dis­play it back to the screen after mod­i­fy­ing it. Now that this is done, any Read more […]

P3DFFT+CUDA

Decem­ber 2010 My first project as a GRA under Rich Vuduc involved accel­er­at­ing 3D Fast Fourier Trans­forms (3DFFTs) with GPUs. The project was basi­cally port­ing the open-source P3DFFT code (writ­ten in FORTRAN) to run on GPU(instead of CPU) clusters using CUFFT.   Update: 04/16/2011 - This project has mor­phed into a SC11 paper — a draft that was sub­mit­ted on 04/15/2011 can be found here [Prospects for scal­able 3D FFTs on het­ero­ge­neous exas­cale sys­tems] — where we describe DiGPUFFT, Read more […]

MTIMES

July 2010 OK, it’s not really a project, but I did learn a lot about GPU matrix mul­ti­pli­ca­tion over the sum­mer, work­ing at Accel­erEyes. I re-worked the back-end CUDA code for the MTIMES Jacket func­tion. I also mod­i­fied it to accel­er­ate SUM, MIN, and MAX. Check­out my MTIMES wiki page! Read more […]

FeedSpeak Pro

May 2010 Feed­Speak reads your Google Reader RSS news feeds aloud to you using Text-To-Speech. Feed­Speak started as a class project, but I now con­tinue devel­op­ment on my own free time. Read the XDA-Developers blog post about Feed­Speak! (Note: reviewed for v1.9.6)     Feed­Speak Pro for Android on App­Brain     Feed­Speak Lite for Android on App­Brain   Lis­ten to your own per­sonal news sta­tion on the go! Feed­Speak reads your Google Reader RSS news Read more […]

UROC GPGPU Poster

April 2010 I find graph­ics card pro­gram­ming fas­ci­nat­ing. I pre­sented a UROC Poster on Mol­e­c­u­lar Dynam­ics analy­sis and visu­al­iza­tion on the GPU at the 2010 Geor­gia Tech Under­grad­u­ate Research Sym­po­sium. I also had a cool demo set up of the sys­tem run­ning (above), along with my Android bonds visu­al­iza­tion client.     Read more […]

Misc CUDA + OpenCV Fun

March 2010 I recently started play­ing with the Nvidia CUDA SDK Sam­ples involv­ing image pro­cess­ing. I extracted the SobelFil­ter ker­nel and made it run off my USB web­cam using OpenCV — the two live modes are single-channel-gray and three-channel-rgb. I wrote two dif­fer­ent basic ker­nels on my own that did binary thresh­old­ing and found the most dom­i­nant RGB value. Now on Google Code! cam-cuda-sobel   Read more […]

IGVC Robot

July 2009 I com­peted in the 2009 Intel­li­gent Ground Vehi­cle Com­pe­ti­tion, on the Geor­gia Tech Robo­jack­ets Team. Our robot: Candi. Our team ranked 6th place nationwide. Competition pho­tos here. I wrote all of the vision and map­ping code! The robot nav­i­gated using a sin­gle cam­era only. A screen­shot of the robot code run­ning on my lap­top: A pic­ture of the robot in action:   Quick and dirty break­down of the robots com­puter vision nav­i­ga­tion: Cap­ture firewire Read more […]

Laser Projection Vision System

Sep­tem­ber 2008 A project at GTRI FPTD I worked on involv­ing com­bin­ing a color vision sys­tem with a 2D laser pro­jec­tor. Case Study about the project here:  Using Lasers to Iden­tify Sub­stan­dard Food. With Python and OpenCV, I got the sys­tem to find con­tours with the cam­era, and tell the laser to draw them in real-time. The goal was to use this laser sys­tem as a mod­ule to another sys­tem that detected under-cooked sausage pat­ties. The two sys­tems com­bined detected, ana­lyzed, tracked, Read more […]

PIC Digital Speedometer

June 2008 I used a PIC micro­con­troller in a cir­cuit to mea­sure my car’s MPH. It mea­sures the fre­quency of pulses from the Vehi­cle Speed Sensor, and con­verts it to miles-per-hour. A sum­mer project involv­ing pro­gram­ming a PIC micro con­troller to mea­sure my Honda Civic’s MPH. The cir­cuit I made mea­sures the fre­quency of the pulses com­ing from the Vehi­cle Speed Sen­sor wire in my car, and cal­cu­lates my speed based on that, and dis­plays it. The speed dis­played is a lit­tle jumpy, but the average Read more […]

First BMX Video

July 2005 This is a ran­dom col­lec­tion of videos of me (black bike) and my friend, recorded via a dig­i­tal cam­era one sum­mer (and edited by me). I have done so much more cooler stuff on a bike that just never got to video. Maybe one day I’ll make another video. Be sure to watch the ‘wipe­outs’ sec­tion at the end, and again the bet­ter ones never made it to video, shame. BMX Video (YouTube) Read more […]