Pavel Koshevoy illustrated 367 South 1100 East, Salt Lake City, UT 84102
http://www.aragog.com/~pavel/     pkoshevoy@gmail.com
cell: 801-633-4648

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.
thumbs/style-curve-edit-R23.png thumbs/warp-bend-30.png thumbs/warp-twist-180.png
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.
thumbs/20021226-2349.png thumbs/20031105-2231.png thumbs/20040524-2211.png
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.
thumbs/20040811-1425.png
pig in progress
thumbs/20040811-195318.png
rubber pig
thumbs/20040811-051708.png
plastic F-16
thumbs/20040704-193747-024.png
instancing
thumbs/20040802-021600.png
instancing
thumbs/20050326-150337.png
instancing, texturing
thumbs/20040704-175653-022.png
thin glass
thumbs/20040803-191115.png
bumpy glass
thumbs/20040809-190809.png
glass F-16
thumbs/20040804-180239.png
water
thumbs/20040804-155727.png
smoke, coating
thumbs/20040701-115358-005.png
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.
thumbs/20041123-2321.png
B-Spline curve tool
thumbs/20050131-1133.png
B-Spline surface tool
thumbs/20050209-1117.png
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.