Ziv Yaniv, זיו יניב (ORCID, ResearchID)
      - High Quality Affordable Health Care for All, through Open Research
Last modified: April 30, 2016
home resources for CAS research publications educational material personal
Academic Service


Software Downloads

Try our Image-Guided Interventions hands on tutorial.

Senior Computer Scientist,

Office of High Performance Computing and Communications,
Lister Hill National Center for Biomedical Communications,
National Library of Medicine,
National Institutes of Health
TAJ Technologies Inc.

Adjunct Assistant Professor,
Department of Radiology,
Georgetown University

PhD. 2004 Computer Science, The Hebrew University of Jerusalem, Jerusalem, Israel.

Contact information:

Ziv Yaniv
Office of High Performance Computing and Communications
National Library of Medicine
National Institutes of Health
Bldg. 38A, Room B1N30D
8600 Rockville Pike,
Bethesda, MD, 20894
email: zivyaniv@nih.gov
web: http://yanivresearch.info

Instructions on how to get to the NIH campus in general, and the Lister Hill Center (bldg. 38A) in particular, can be found here. Don't forget to bring a US government issued ID or your passport. Entrance to the NIH campus requires going through a security check.

בוקר, ערב, צהריים רחוקה ירושלים

Academic Service

Student Theses

  • Stefan Wiesner, "Respiration Monitoring and Tomographic Reconstruction Towards 4D Cone Beam CT", Diplomarbeit (MSc. equivalent), graduated 2007 [pdf (8.4Mb)].


I am interested in several fields of computer science all of which play a role in computer aided medical interventions : computer graphics, image processing, computer vision, and software engineering.

Software Downloads

  1. Github repository containing Jupyter Python and R notebooks illustrating the use of SimpleITK to perform registration and segmentation, your gateway to the ITK world.
  2. I lead the development of the Free Open Source Image-Guided Surgery Toolkit (pronounced eye-gee-stick).
  3. Observer/Observable pattern (implementation in C++)
  4. Singleton pattern, simultaneous multiple file output (implementation in C++). If you ever wanted to output both to screen and to a log file this may be a handy class.
  5. Fast median filtering (implementation in C++).
  6. Histogram related code, normalization, equalization etc. using a single image or an image stack (implementation in C++).
  7. a. RANdom SAmple Consensus, RANSAC, - a templated framework enabling easy incorporation of this robust estimation method into any parameter estimation problem (implementation in C++). This implementation has been incorporated into the hugin image panorama tool.
    b. A similar version that requires ITK with two additional parameter estimators, nD plane and sphere, is available here, in addition to a technical discussion of the algorithm and implementation.
  8. Type safe enumeration via the Singleton pattern (implementations in java and C++). This code became defunct with the introduction of 'enum class' in C++11. It should be noted, though, that the code readily returns the string representation of the enum, something C++11 enum classes still don't do. To get this functionality in C++11 you will need to do some additional coding, possibly using the preprocessor as described in this stackoverflow posting.
  9. Absolute orientation (implementations in java, python, C++, and MATLAB), aligning two point sets with known correspondences using Horn's unit quaternion method (see description in educational material). The java and C++ implementations require external packages for computing the eigen-values, eigen-vectors of a real symmetric matrix (Jama - java matrix package from NIST, and Vnl part of Vxl - vision-something-libraries. MATLAB implementation also includes a naive method for matching points between sets such that known correspondences are not required.
  10. A web page running a java applet that shows why Fiducial Registration Error (FRE) is not a viable indicator of Target Registration Error (TRE) in rigid point based registration. Source code of the applet and corresponding application are downloadable from the web page.
  11. NDI Tracking data acquisition. (implementation in C++).This program supports acquisition of tracking data from the Polaris and Aurora (Northern Digital Inc.) tracking systems. The program is multi-platform and uses the Image-Guided Surgery Toolkit. The distribution also includes binaries for linux and windows, and the documented source. If you want to compile the program on your system you will have to (in the following order):
    1. Install the cross platform make utility, CMake. Download from here .
    2. Install the insight toolkit (ITK), configure using CMake, and compile. Download from here.
    3. Install the visualization toolkit (VTK), configure using CMake, and compile. Download from here.
    4. Install the fast light toolkit (FLTK) release 1.1.6, configure using CMake, and compile. Download from here.
    5. Install the image-guided surgery toolkit (IGSTK), configure using CMake (make sure to set IGSTK_USE_FLTK to on), and compile. Download from here (old version of the toolkit).
    6. Configure the acquisition program using CMake, and compile.
  12. Respiratory signal generation for cone beam CT (implementation in MATLAB), approximating skin motion as a linear trajectory (a.k.a. trajectory triangulation). This is the implementation of the work describe in this paper.
  13. Localization of spherical fiducials in cone beam CT data using the original projection images (implementation in MATLAB). This is the implementation of the work describe in this conference paper, which was extended into this journal paper.
  14. Localization of spherical fiducials in cone beam CT data using the original projection images or a CT/CBCT volume (implementation in MATLAB). These two programs are the implementation of the work described in this journal paper. The program for localizing spherical fiducials in a volume is the more useful of the two as it is not specific to CBCT, applicable for CT, CBCT and MRI volumes. If this is all you need you can grab this file. The program for localization using the projection images supersedes the previous list entry. Sample data sets are available here.
  15. Platform/OS independent multi-threading library (implementation in C++). These classes were taken out of ITK release 3.20. Some modifications were required to keep the number of classes to the minimum required for multi-threading. The API was maintained so that code that works with this library should work without any change using ITK. Configuration is with Cmake. The motivation for creating this library outside of ITK was my need for platform independent multi-threading without requiring the complete toolkit.
  16. Recipes for least squares estimation, git repository (C++). Least squares estimation of various parametric objects (implementations designed for use in a RANSAC framework).
  17. DicomSorter (MATLAB), sort DICOM files found in a directory tree according to their study and series. Function copies the files from their current location and separates them into study/series hierarchy. Easier to work with when your data is separated into directories.
  18. CPack tutorial - add an icon to your application and create a nice windows installer, includes CMake/CPack "source".
  19. Control a ppt presentation using your webcam - this is a toy example of how to use a tracking device as a UI component. It is clunky when compared to UI devices such as the Microsoft Kinect or a standard clicker, but it is free and illustrates the point.