Regard3D is a structure-from-motion program (see also this Wikipedia article). That means, it can create 3D models from objects using a series of photographs taken of this object from different viewpoints.

To obtain a 3D model, the following steps are performed:

  • For each image, features (sometimes also called keypoints) are detected. Features are points in an object that have a high probability to be found in different images of the same object, for example corners, edges etc. Regard3D uses A-KAZE for this purpose.
  • For each feature, a mathematical descriptor is calculated. This descriptor has the characteristic that descriptors of the same point in an object in different images (seen from different viewpoints) is similar. Regard3D uses LIOP (Local Intensity Order Pattern) for this purpose.
  • The descriptors from different images are matched and geometrically filtered. The result of this step is a collection of matches between each image pair.
  • Now "tracks" are calculated. For each feature that is part of a match in an image pair, it is searched also in other images. A track is generated from features if these features satisfy some conditions, for example a track is seen in at least 3 images.
  • The next step is the triangulation phase. All the matches of all the image pairs are used to calculate:
    • The 3D position and characteristic of the "camera", i.e. where each image was shot and the visual characteristics of the camera
    • The 3D position of each "track" is calculated
  • The result of the triangulation phase is a sparse point cloud. In order to obtain a more dense point cloud ("densification"), several algorithms can be used.
  • The last step is called "Surface generation". The point clouds are used to generate a surface, either with colored vertices or with a texture.


Here are some tips for the images in order to obtain good results:

  • More images are better
  • All images should be taken from a slightly different viewpoint than the others
  • Higher resolution images (number of pixels of the image) will produce a more detailed model
  • The object should be photographed from all possible angles in order to avoid holes in the resulting model
  • The camera model should be stored in the JPEG, and the camera model should be in the database