Technical Reports

Home/Technical Reports

A Greedy Patch-based Image Inpainting Framework

Click here to see the full publication. We present a system for filling holes in an image by copying patches from elsewhere in the image. These patches should be a good continuation of the hole boundary into the hole. There is typically no “right answer” as we are extrapolating image data into an unknown region.

Poisson Editing in ITK

Click here to see the full publication. Two very related problems in image processing are hole filling and compositing. This article explains an implementation of similar algorithms to solve both of these problems - poisson editing and poisson cloning; both algorithms were presented by Perez in “Poisson Image Editing”.

Small Hole Filling in ITK

Click here to see the full publication. This code provides an implementation of a simple technique to fill small holes in an image. We use a multi-pass method that fills pixels on the border of a hole with the average of its non-hole 8-connected neighbors. This process is repeated until all holes are filled. The

Interactive Correspondence Selection

Click here to see the full publication. This document presents a GUI application to manually select corresponding points in two data sets. The data sets can each be either an image or a point cloud. If both data sets are images, the functionality is equivalent to Matlab's 'cpselect' function. There are many uses of selecting

Moore Neighbor Tracing

Click here to see the full publication. This document presents an implementation of Moore Neighbor Tracing - an algorithm to find an ordered outline of a blob or contour in an image. An excellent tutorial on Moore Neighbor Tracing is provided here. The code is available here.

Clustering Segmentation for VTK

Please click here to read the full publication. This document presents a VTK implementation of the algorithm described in "A clustering method for efficient segmentation of 3D laser data" by Klasing, Klaas Wollherr, Dirk, and Buss, Martin. The code is available here.

Smart Nearest Neighbors

This document presents an implementation of two algorithms, Voronoi Neighbors and Binary Space Partition (BSP) Neighbors. These algorithms find neighbors of a point in a point set that are somehow ``better'' than a ``K nearest neighbors'' or a ``all neighbors within a radius'' query. This type of nearest neighbor query is more computationally expensive, but

Morphological Opening on a Graph

This document presents an implementation of an algorithm to perform a morphological opening on a graph. The intent is to remove short branches in a graph while preserving the large scale structure. This implementation is based on the algorithm described in "Efficient Closed Contour Extraction from Range Image's Edge Points''. We have used the data

Closed Loop Simplification

This document presents an implementation of an algorithm to find a low edge-count approximation of a complex, discrete, 2D closed contour. This implementation is based on the algorithm described in "Using Aerial Lidar Data to Segment And Model Buildings'' and "A Bayesian Approach to Building Footprint Extraction from Aerial LIDAR Data.'' The code is available

Hough Transform Plane Detector

This document presents a VTK wrapper of an extracted portion of ‘3DTK - The 3D Toolkit’ to enable a developer to find planes in 3D point cloud data. Click here to see the publication.

Loopy Belief Propagation on MRFs in ITK

David Doria "Loopy Belief Propagation on MRFs in ITK ". The Insight Journal, March 2011   This code provides a base implementation of Loopy Belief Propagation on MRFs in ITK. We use binary image denoising as an example problem to demonstrate this code. This document is intended only to describe the implementation, not the theory.

Poisson Editing in ITK

David Doria "Poisson Editing in ITK". The Insight Journal, March 2011   This code provides an implementation of two techniques from "Poisson Image Editing'' on ITK images. First, we fill a hole in an image given only the pixel values on the boundary. Second, we copy a patch of an image into another image and

Criminisi Inpainting

David Doria "Criminisi Inpainting". The Insight Journal, February 2011   This document presents a system to fill a hole in an image by copying patches from elsewhere in the image. These patches should be a good continuation of the hole boundary into the hole. The patch copying is done in an order which attempts to

Interactive Image Graph Cut Segmentation

David Doria, Siqi Chen "Interactive Image Graph Cut Segmentation". The Insight Journal, November 2010   This document presents a system to "scribble" on an image to mark foreground and background pixels and then feed these pixels to a graph cuts segmentation technique. The interaction is done using the Visualization Toolkit and the processing is done

A VTK Interface for the Hokuyo UTM 30LX Laser Range Finder

David Doria, "A VTK Interface for the Hokuyo UTM 30LX Laser Range Finder". The VTK Journal, October 2010   It is convenient to acquire data in a format which VTK can read directly. To enable this, we provide a wrapper of the Hokuyo UTM-30LX interface in a class vtkHokuyo.

A K-Means++ Clustering Implementation for VTK

David Doria, "A K-Means++ Clustering Implementation for VTK". The VTK Journal, September 2010   K-Means clustering is an excellent technique for clustering points when the number of clusters is known. We present a implementation (vtkKMeanClustering) of the algorithm written in a VTK context. We also implement the K-Means++ initialization method which finds the global optimum

A Mean Shift Clustering Implementation for VTK

David Doria, "A Mean Shift Clustering Implementation for VTK". The VTK Journal, September 2010   Mean shift clustering is an excellent technique for clustering points when the number of clusters is not known. We present a implementation (vtkMeanShiftClustering) of the simplest version of the algorithm written in a VTK context.

Expectation Maximization of Gausian Mixture Models in VTK

David Doria, "Expectation Maximization of Gausian Mixture Models in VTK". The VTK Journal, September 2010   Expectation maximization (EM) is a common technique for estimating the parameters of a model after having collected observations of data generated by the model. We first explain the algorithm, then present our impelementation. We focus on estimation of the

A Conditional Mesh Front Iterator for VTK

David Doria, "A Conditional Mesh Front Iterator for VTK". The VTK Journal, April 2010   Region growing is a technique that can be used to propagate information over a mesh. In a previous submission, "A Mesh Front Iterator for VTK", we introduced an iterator that can be used with vtkPointSet subclasses to traverse a mesh.

A Mesh Front Iterator for VTK

David Doria, "A Mesh Front Iterator for VTK". The VTK Journal, April 2010   Region growing is a technique that can be used to propagate information over a mesh. We provide an iterator that can be used with vtkPointSet subclasses to traverse a mesh in a reasonable fashion. A "front" is emanated from a selected

Graph Cuts Based Super Pixel Segmentation for VTK

David Doria, "Graph Cuts Based Super Pixel Segmentation for VTK". The VTK Journal, March 2010   Segmenting images into "super pixels" is lately a very hot topic. One implementation of such a technique is by Felzenszwalb and Huttenlocher. We propose a new class, vtkSuperPixelSegmentation, which has wrapped Felzenszwalb's code (with permission) to provide this functionality

Poisson Surface Reconstruction for VTK

D. Doria, A. Gelas, "Poisson Surface Reconstruction for VTK". The VTK Journal, March 2010   This document presents an implementation of the Poisson surface reconstruction algorithm in the VTK framework. (This code was, with permission, adapted directly from the original implementation by Kazhdan, Bolitho, and Hugues. The original implementation can be found here. We present

Stratified Mesh Sampling for VTK

David Doria, "Stratified Mesh Sampling for VTK". The VTK Journal, March 2010   This document presents an implementation of a stratified mesh sampling algorithm in the VTK framework. This code was adapted directly from the original implementation by Diego Nehab, with permission. We present a class, vtkStratifiedSampling, which uniformly samples a mesh. A Paraview plugin

A Voodoo Reader and Viewer for VTK

David Doria, "A Voodoo Reader and Viewer for VTK". The VTK Journal, March 2010   Voodoo is a popular, free structure from motion software package. It takes several, ordered images as input and computes the camera parameters of each image as well as a point cloud of an estimate of the 3D structure of the

Using and Visualizing Projective Cameras in VTK

David Doria, "Using and Visualizing Projective Cameras in VTK". The VTK Journal, March 2010   This document presents a set of classes (vtkPhysicalCamera, vtkImageCamera) to enable a camera and an image acquired by that camera to be visualized in a 3D scene. Two situations where one would want to visualize camaras with associated images are

Point Set Surface Reconstruction for VTK

David Doria, "Point Set Surface Reconstruction for VTK". The VTK Journal, March 2010   This document presents a set of classes (vtkPointSetSurfaceReconstruction, vtkVoxelizePolyData) to produce a surface from an oriented point set. These classes are implemented as VTK filters. A Paraview plugin interface is provided to allow extremely easy experimentation with the new functionality. We

A Leica PTX Reader for VTK

David Doria, "A Leica PTX Reader for VTK". The VTK Journal, March 2010   Leica LiDAR scanners output points in the PTX file format. It is often useful to convert this format to a standard VTK point cloud or mesh format before processing. We propose a new class, vtkPTXReader, to provide this functionality.

A Wavefront OBJ Writer for VTK

David Doria, "A Wavefront OBJ Writer for VTK". The VTK Journal, January 2010   The Wavefront OBJ format is a common file format for storing mesh data. It is convenient to be able to write VTK data structures out into this format, as the data can then be used in software that can read OBJ

RANSAC Plane Fitting for VTK

David Doria, "RANSAC Plane Fitting for VTK". The VTK Journal, January 2010   RANdom SAmple Concensus (RANSAC) is an iterative method to estimate parameters of a model. It assumes that their are inliers in the data which are well explained by the chosen model. We propose a new class for VTK, vtkRANSACPlane, which estimates the

A Point Set Processing Toolkit for VTK

David Doria, "A Point Set Processing Toolkit for VTK". The VTK Journal, December 2009   In the last several years, an increasing number of tools produce 3D points as output. Examples include Light Detection and Ranging (LiDAR) scanners, Structure From Motion (SFM) algorithms, and Multi View Stereo (MVS) algorithms. These unordered point sets (or point

A Synthetic LiDAR Scanner for VTK

David Doria, "A Synthetic LiDAR Scanner for VTK". The Insight Journal, September 2009   In recent years, Light Detection and Ranging (LiDAR) scanners have become more prevalent in the scientific community. They capture a "2.5-D" image of a scene by sending out thousands of laser pulses and using time-of-flight calculations to determine the distance to

Reading a PTX file into an itkMesh

David Doria, "Reading a PTX file into an itkMesh". The Insight Journal, September 2009   This document presents a set of classes to read a PTX file (a common file format produced by LiDAR scanners) into an itkMesh object. We propose these classes as addition to the Insight Toolkit.

Region Growing Using a Criterion on the Region Boundary

David Doria, "Region Growing Using a Criterion on the Region Boundary". The Insight Journal, August 2009   This document presents a set of classes which implement a region growing algorithm whose criterion for growth is different than existing ITK region growing algorithms. The region is grown into the query pixel based only on the difference

Transforming an itkPointSet

David Doria, "Transforming an itkPointSet". The Insight Journal, July 2009   This document presents a set of classes to enable operations on itkPointSet objects. In particular, itkTransformPointSetFilter allows a transformation to be applied to a set of points. We propose these classes as addition to the Insight Toolkit ITK.