|
Experience
|
|
Sorenson Media Salt Lake City, UT
|
05/2007 - current
|
|
Senior Software Engineer |
|
|
Working on Sorenson Squeeze allowed me to gain experience with DirectShow, QuickTime, VST, and other audio/video processing and compression technologies.
|
|
|
|
Sorenson Media Salt Lake City, UT
|
03/2007 - 05/2007
|
|
Contractor |
|
|
I was contracted by Sorenson Media to research and implement video
fingerprinting technology for the purposes of detecting copyright infringing material.
|
|
|
|
Scientific Computing and Imaging Institute Salt Lake City, UT
|
09/2005 - 05/2007
|
|
Computer Specialist |
|
|
During my time working with Dr. Tolga Tasdizen in collaboration with
the Robert Marc Laboratory, I've refined the automatic image
mosaicking application, added an automatic slice to slice image
registration tool, and implemented cross platform applications for
interactive manual slice to slice registration and mosaic layout. For
further details, see the following link: http://www.sci.utah.edu/~koshevoy/research/
In the course of this work I have expanded my knowledge to include
such technologies as CMake, Qt 4, GLSL and Cg fragment shading, and
gained some experience with cross platform OpenGL development.
|
|
|
|
Scientific Computing and Imaging Institute Salt Lake City, UT
|
09/2004 - 09/2005
|
|
|
Research Assistant |
|
|
As a Research Assistant to Prof. Ross Whitaker I developed automated Transmission Electron Microscopy image
registration tools implemented within the ITK framework. These tools
were later used to reconstruct a 45 section rabbit retina microneuroma
dataset for the Marc Laboratory.
|
|
The following image demonstrates one automatically assembled
section of the rabbit retina microneuroma dataset.
|
|
Automatically assembled microneuroma section.
|
The automatic image mosaicking proceeds as follows. Operating under the assumption that
images have an inherent yet unknown order, and adjacent images overlap, I calculate image cross-correlation normalized by
average image auto-correlation to estimate the initial image
tile layout in the mosaic. I then use a regular step gradient descent
optimizer to reduce the mean pixel variance within the overlapping
tile regions of the mosaic. The pixel variance may exist due to
initial layout translation errors and any warping that may exist in
any of the tiles. The variance is reduced by refining the transform
parameters of all image tiles simultaneously.
|
|
|
|
Parametric Technology Corporation Salt Lake City, UT
|
11/1999 - 12/2003
|
|
|
Senior Software Engineer
|
|
|
I was one of the team members on the Style and Warp projects of
the PTC flagship MCAD product Pro/Engineer.
I developed 3D geometry direct manipulation framework
that was later used to implement tools for manipulation of solids,
surfaces, and curves. I was one of the developers on the Warp project,
a new feature in Pro/Engineer at the time.
|
|
Below are several screenshots of Pro/Engineer. The first screenshot
shows the freeform curve editing tool. I was responsible for
implementation of the mouse and keyboard event handler infrastructure for
curve creation and manipulation. Later I was able to reuse my mouse/keyboard event handler
infrastructure for the Warp project. Warp allows the user to perform a
global deformation on a solid. The images below illustrate the Bend
and Twist operations on an extruded rectangular solid. I was
responsible for implementation of the Warp user interface.
|
|
|
|
The curve tool.
|
Bend.
|
Twist.
|
|
|
|
While working at PTC I developed an interest in Computer Aided
Geometric Design (CAGD) and pursued studies into this matter on my own.
I started a testbed software project to validate some of my ideas.
Through this I improved my knowledge of the Qt library and
taught myself enough OpenGL to implement an interactive
3D modeling environment.
The images below illustrate some of the uses I got
out of this framework so far. I try to reuse my code as much as
possible and extend it when necessary. Originally I implemented
this framework using the Qt 3 libraries. Since then I introduced a
UI abstraction layer and added FLTK and Qt 4 implementations.
|
|
|
|
4-view curve editing. OpenGL, Qt.
|
Testing the BSP tree. OpenGL, Qt.
|
Testing curve selection. OpenGL, Qt.
|
|
|
|
|
Beehive Telephone Co., Inc.,
Wendover, UT
|
06/1998 - 11/1999
|
|
|
Programmer
|
|
|
At Beehive I maintained in-house software used to pre-process customer
call records and bill AT&T. I also developed a number of in-house
applications used to automate routine tasks and offload some of the
more tedious work from employees to computers. This includes an
application that automatically polled phone call records from various
telephone switchboards (Harris, Alcatel and others) by dialing up each
switchboard and interacting according to a set of rules defined
by a state machine. Later I adapted this code to automatically
reprogram my Cisco DSL modem (something I had to do far too often
with my former ISP).
I also served as an informal network administrator and provided
in-house technical support. I maintained the company web site, e-mail,
NFS, NIS, and DNS services.
|
|
|
Education
|
|
University of Utah, Salt Lake City, UT
|
|
|
MS - Computational Engineering and Science |
completed August 2005 |
|
|
BS - Computer Science |
completed August 1999 |
|
I have met several interesting people at the U - Robert Mecklenburg,
Erik Brunvand, Peter Shirley, Elaine Cohen and Tolga Tasdizen to
name a few. I enjoyed enormously the time I've spent learning from
them. Here I will illustrate some of the projects I have done for coursework.
During the summer of 2004 I created a Probabilistic Raytracer
for Peter Shirleys Realistic Image Synthesis course. Below
is a mini-gallery of the images it produced. The raytracer has an
interactive modeling environment for configuring the scene and camera
parameters.
pig in progress
|
rubber pig
|
plastic F-16
|
instancing
|
instancing
|
instancing, texturing
|
thin glass
|
bumpy glass
|
glass F-16
|
water
|
smoke, coating
|
texturing
|
I attended a Computer Aided Geometric Design course taught by
Elaine Cohen. Below are a few screenshots from the applications I've
implemented then. Once again, I've reused my 3D
modeling framework. This course was also the reason why I had to introduce
a UI abstraction layer and provide an FLTK implementation - I was not allowed to use Qt.
The first image shows a B-Spline curve tool.
It allows the user to edit the control points and the knot vector.
It also allows analysis of curve properties
by animating the osculating curve and Frenet frame.
The other two screenshots are of a B-Spline surface modeling tool.
The control mesh is hidden to reduce clutter.
B-Spline curve tool
|
B-Spline surface tool
|
Several surfaces
|
|
|
|
Skills
|
|
Linux, OSX, Windows, C++, Qt, OpenGL, ITK, CMake, CVS, Subversion, Objective-C, QuickTime, DirectShow, FFmpeg, libCURL, Boost.
I am comfortable working with Visual Studio, Cygwin, Xcode, Emacs, etc...
I taught myself Qt, OpenGL, Cg, GLSL, Direct Show, QuickTime, QTKit, JNI, and Objective-C Cocoa development.
I have experience with ITK (Insight toolkit), VTK (Visualization toolkit), Matlab, Tcl/Tk, FLTK, libCURL, and FFmpeg libraries.
|
|
|
Languages
|
|
Bilingual Russian-English speaker.
|
|
|