Erkan Okuyan, Developer in Ankara, Turkey
Erkan is available for hire
Hire Erkan

Erkan Okuyan

Verified Expert  in Engineering

Software Developer

Ankara, Turkey
Toptal Member Since
February 8, 2022

Erkan is a software developer and team leader with expertise in implementing efficient algorithms on platforms with limited computational capability. As a developer, he has applied various computer vision algorithms to embedded environments for several defense projects, including missile seeker heads, head-mounted displays, and missile warning systems. Erkan has also led a team of over eight engineers to develop and carry out computer vision solutions for around ten active defense projects.


C, C++, MATLAB, OpenCV, OpenMP, OpenGL, Algorithms, UDP, TCP/IP, UML...
Awecom, Inc.
C++, NVIDIA CUDA, OpenGL, Python, Computer Vision, C#, JSON, MXF...
C++, OpenCV, Python 3, Python, CMake, Linux, Ubuntu, Ubuntu Linux




Preferred Environment

Windows, Linux, C, C++, MATLAB, NVIDIA CUDA

The most amazing...

...thing I've developed is a seeker head of an anti-aircraft missile system that detects and tracks the target for homing purposes.

Work Experience

Embedded Software Engineer

2009 - PRESENT
  • Developed a real-time 100-to-200 frame-per-second target detection and tracking routines for HISAR, a surface-to-air anti-aircraft missile system. Designed and implemented computer vision algorithms for computationally limited embedded systems.
  • Created a real-time target tracking routines for cluttered environments for U/OMTAS, an air-surface-to-surface anti-tank missile system. Implemented patterns for target quality calculations, critical hit point selection, and more.
  • Launched a real-time target tracking routines for cluttered environments for KARAOK, a surface-to-surface anti-tank missile system. The patterns were implemented to work on CPUs and FPGAs and were configured to be used as co-processors.
  • Managed the real-time head tracking routines to direct airborne weapon systems and cameras from head movements for AVCI, a helmet-mounted display unit with head tracking capacity. Implemented rigid object tracking algorithms for this project.
  • Parallelized a moving object detection routine for surveillance using OpenCV, OpenMP, and OpenGL libraries.
  • Pioneered an auto-focus procedure for automatically finding the correct optic system lens position to achieve the best focus for thermal cameras. Used a dynamic programming approach that sees the most extended increasing sequence of sharpness values.
  • Established an object detection routine for an ultraviolet missile warning system with scene adaptive features.
  • Implemented a packet relaying software for man-in-the-middle attack purposes enabling an open-loop scene generation software to accept input to render images from the platforms' point of view.
  • Authored several patents and utility models. Six of these patents have been granted, two are in pending status, and one is in submission.
  • Led a team of eight full-time and two part-time engineers to develop and implement computer vision solutions for around ten active defense projects.
Technologies: C, C++, MATLAB, OpenCV, OpenMP, OpenGL, Algorithms, UDP, TCP/IP, UML, Computer Vision, Wireshark, Embedded Systems, Windows, Linux, Embedded C++, Python, Python 3, GUI, Multithreading, Concurrency, Back-end, Back-end Development, Memory Management, Background Threading, Qt, Software Architecture, Object-oriented Programming (OOP), Optimization, Best Practices, Software Design Patterns

C++ Developer

2022 - 2023
Awecom, Inc.
  • Developed software that calculates similarities between image segments using C++ and CUDA using client-specified similarity metrics. Ensured the software was well tested and ran fast.
  • Wrote C++ code to parse custom app-specific data present in the MXF files. Read the specifications of the data and parsed the data accordingly. Also reviewed the code of another app written in C# to understand the MXF file format.
  • Wrote C++ code to parse custom app-specific data present in the MPEG-TS files. Read the specifications of the data and parsed the data accordingly. Implemented functionality to dump parsed information in JSON format.
  • Developed software that finds the best matches between features found in a reference image and an image captured from a real-time video source using C++ and CUDA. Ensured the software was well tested and ran fast.
  • Implemented a video search routine using OpenCV and C++. Produced the best position in the video and quality metrics. Utilized image hashing methods to do image comparisons and a backtracking method with early termination options to do video search.
  • Wrote a parser that has a double functionality: the parser can read and parse data from the JSON files using the nlohmann::json library, and the parsed parameters can be overwritten by processing the command line commands using the CLI11 library.
  • Investigated a procedure to log system information of the utilized workstations, including GPU state, to enable remote observation of the utilization and system problems. Used and integrated Prometheus and Grafana to produce the logging system.
  • Investigated a library called radialpose which implements minimal solvers to find the position and orientation of a camera using a minimal number of correspondences. Implemented C++ wrappers and Python scripts for client testing.
Technologies: C++, NVIDIA CUDA, OpenGL, Python, Computer Vision, C#, JSON, MXF, Command-line Interface (CLI), Software Architecture, Algorithms, Videos, OpenCV, MPEG, Search, Image Hashing, Object-oriented Programming (OOP), Optimization, Best Practices

Software Developer

2022 - 2022
  • Integrated the client-developed face recognition algorithm to the National Institute of Standards and Technology (NIST) and specified Face Recognition Vendor Test (FRVT) software for the client.
  • Modified the DICIO software to accept multiple images belonging to the same person and modified the DICIO software to process numerous faces presented in a single image.
  • Wrote Python scripts to achieve image type conversions, image analysis, and performance analysis of the face recognition algorithm for the monochrome input images for the client.
Technologies: C++, OpenCV, Python 3, Python, CMake, Linux, Ubuntu, Ubuntu Linux

Teaching Assistant

2006 - 2009
Bilkent University
  • Worked as a teaching assistant for algorithms and computer networks courses.
  • Created assignments, graded exams, homework, and projects, and gave lectures.
  • Submitted a thesis (Hypergraph-partitioning-based Image-space-parallel Direct Volume Renderer for Unstructured Grids with Replication) and implemented the project over a Beowulf cluster connected via a high-speed switch using C++ and MPI.
Technologies: C, C++, MPI, Java, Sockets, Wireshark, Windows, Linux, MATLAB, Algorithms, Computer Networking, Computer Graphics, UDP, TCP/IP, OpenGL, UML, Wireless Sensor Networks, Graph Theory, Computer Vision, Parallel Programming, Multiprocessing, Computational Biology, Electronic Design Automation (EDA), OpenMP, NVIDIA CUDA, Unix, Multithreading, Background Threading, Optimization

A Method to Accelerate Deep Learning Applications for Embedded Environments
This project relates to a sub-class of deep learning applications called convolutional neural networks. It is specially designed to fasten processing speed for such applications, where processing is carried out over the central processing unit (CPU). Generally, fast co-processors are used for convolutional neural network applications. However, energy efficiency requirements for some embedded environments may necessitate the usage of CPUs.

An inherent sub-function is crucial in the fast execution of convolutional neural networks. This is a convolution operation, which can be thought of as passing a filter over an image. For this project, I have found an order of execution between pixels so that retrieved data to the cache is used more times before eviction from the cache. Thus, cache misses reduce, and overall calculation speed increases.

Acceleration achieved using this method greatly varies according to image sizes and cache structure or size of the underlying platform. We have achieved three to five times speedup for the limited embedded environments we have tested.

There is a pending patent application associated with this project (tr 2021/013858).

A Method for Passively Optimizing Focus of an Optical System
As this system has the capability of optical focus to different distances, the search algorithm for finding the best focusing distance needs to process images captured from various distances. Determining the order of distances to be processed is crucial so that execution finishes quickly. Furthermore, system-level constraints usually determine the distance for the next calculation step. These constraints typically arise because directional changes or sudden stops of the motors controlling the lens positions are costly. Thus, the order of distances to be processed determined by the search algorithm also has to respect system-level constraints.

I have formulated the focusing problem for this project with a dynamic programming approach as an effortless way to implement the longest increasing sub-sequence calculation. This formulation allows fast calculation without directional change and finds the optimal focus distance before much defocusing occurs after the optimal point, i.e., it provides an excellent early termination condition.

A granted patent application is associated with this project (PCT/TR2016/050155).

A Noise Elimination Method for Detection Applications
This project relates to a noise elimination method for detection applications utilizing a data structure capable of fast and efficient membership tests. Candidates obtained from each frame are tested with the data structure responsible for membership tests to see if the prior occurrence of the same candidate took place. If not, the candidate is processed. Otherwise, the candidate is marked as seen in the data structure. Since candidates produced by noise in the frame are more likely to be blocked by the membership tests than candidates belonging to the object of detection, the present method is expected to improve detection performance.

I have used a Bloom filter data structure to carry out fast membership tests. The Bloom filter supports O(1) time insertion and test operations as well as O(1) space requirements. This incredible feat is achieved by allowing a small percentage of false positives for memberships tests while never allowing false negatives or supporting deletions. Thus, I eliminated noisy data with minimal computational cost by using the Bloom filter structure.

A pending patent application is associated with this project (tr 2020/19736).


C, C++, Embedded C++, Java, UML, MIPS, Tcl, R, C#, Python, Python 3


MPI, OpenMP, Sockets, OpenGL, OpenCV


MATLAB, NS-2, Weka, Wireshark, CMake


Parallel Programming, Object-oriented Programming (OOP), Best Practices


Windows, Linux, NVIDIA CUDA, Unix, Ubuntu, Software Design Patterns, Ubuntu Linux


Algorithms, Multiprocessing, Multithreading, Concurrency, Back-end Development, Back-end, Background Threading, Software Architecture, Optimization, Computer Networking, Embedded Systems, Memory Management, Computer Graphics, Operating Systems, Programming Languages, UDP, TCP/IP, Yacc, Wireless Networking, Wireless Sensor Networks, Cryptography, Computer Vision, Graph Theory, Information Retrieval, Data Mining, Computational Biology, Electronic Design Automation (EDA), Mobile Networks, GUI, MXF, Command-line Interface (CLI), Economics, Finance, Architecture, Videos, MPEG, Search, Image Hashing




Databases, JSON

2006 - 2009

Master's Degree in Computer Engineering

Bilkent University - Ankara, Turkey

2002 - 2006

Bachelor's Degree in Computer Engineering

Bilkent University - Ankara, Turkey