Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
CPFIND("1")			      HUGIN			     CPFIND("1")

NAME
     cpfind - Feature matching for panoramic stitching

SYNOPSIS
     cpfind [options] -o output_project project.pto

     cpfind [options] -k i0 -k i1 [...] project.pto

     cpfind [options] --kall project.pto

DESCRIPTION
     cpfind cpfind is a control-point detector for Hugin. It expects a project
     file as input and writes a project file with control-points on success.  It
     depends on reasonable lens information in the input project file.

     The first step is the feature description: In this step the images of the
     project file are loaded and so called keypoints are searched. They describe
     destinctive features in the image. cpfind uses a gradient based descriptor
     for the feature description of the keypoints.

     In a second step, the feature matching, all keypoints of two images are
     matched against each other to find features which are on both images. If
     this matching was successful two keypoints in the two images become one
     control point.

USAGE
   Rectilinear and fisheye images
     Cpfind can find control points in rectilinear and fisheye images. To
     achieve good control points images with a high horizontal field of view
     (e.g. ultra wide rectilinear or fisheye) are therefore remapped into a con-
     formal space (cpfind is using the stereographic projection) and the feature
     matching occurs in this space. Before writing the control points the coor-
     dinates are remapped back to the image space. This happens automatic de-
     pending on the information about the lens in the input project file. So
     check that your input project file contains reasonable information about
     the used lens.

   Using celeste
     Outdoor panorama often contains clouds. Clouds are bad areas for setting
     control points because they are moving object. Cpfind can use the same al-
     gorithm as celeste_standalone to masked out areas which contains clouds.
     (This is only done internal for the keypoint finding step and does not
     change the alpha channel of your image. If you want to generate a mask im-
     age use celeste_standalone). To run cpfind with celeste use

	cpfind --celeste -o output.pto input.pto

     Using cpfind with integrated celeste should be superior against using
     cpfind and celeste_standalone sequential. When running cpfind with celeste
     areas of clouds, which often contains keypoints with a high quality mea-
     sure, are disregarded and areas without clouds are used instead. When run-
     ning cpfind without celeste also keypoints on clouds are found. When after-
     wards running celeste_standalone these control points are removed. In the
     worst case all control points of a certain image pair are removed.

     So running cpfind with celeste leads to a better "control point quality"
     for outdoor panorama (e.g. panorama with clouds). Running cpfind with ce-
     leste takes longer than cpfind alone. So for indoor panorama this option
     does not need to specified (because of longer computation time).

     The celeste step can be fine tuned by the parameters --celesteRadius and
     --celesteThreshold.

   Matching strategy
     All pairs

     This is the default matching strategy. Here all image pairs are matched
     against each other. E.g. if your project contains 5 images then cpfind
     matches the image pairs: 0-1, 0-2, 0-3, 0-4, 1-2, 1-3, 1-4, 2-3, 2-4 and
     3-4

     This strategy works for all shooting strategy (single-row, multi-row, un-
     ordered). It finds (nearly) all connected image pairs. But it is computa-
     tional expensive for projects with many images, because it test many image
     pairs which are not connected.

     Linear match

     This matching strategy works best for single row panoramas:

	cpfind --linearmatch -o output.pto input.pto

     This will only detect matches between adjacent images, e.g. for the 5 image
     example it will matches images pairs 0-1, 1-2, 2-3 and 3-4. The matching
     distance can be increased with the switch --linearmatchlen. E.g. with
     --linearmatchlen 2 cpfind will match a image with the next image and the
     image after next, in our example it would be 0-1, 0-2, 1-2, 1-3, 2-3, 2-4
     and 3-4.

     Multirow matching

     This is an optimized matching strategy for single and multi-row panorama:

	cpfind --multirow -o output.pto input.pto

     The algorithm is the same as described in multi-row panorama. By integrat-
     ing this algorithm into cpfind it is faster by using several cores of mod-
     ern CPUs and don't caching the keypoints to disc (which is time consuming).
     If you want to use this multi-row matching inside hugin set the control
     point detector type to All images at once.

     Keypoints caching to disc

     The calculation of keypoints takes some time. So cpfind offers the possi-
     bility to save the keypoints to a file and reuse them later again. With
     --kall the keypoints for all images in the project are saved to disc. If
     you only want the keypoints of particular image use the parameter -k with
     the image number:

	cpfind --kall input.pto
	cpfind -k 0 -k 1 input.pto

     The keypoint files are saved by default into the same directory as the im-
     ages with the extension .key. In this case no matching of images occurs and
     therefore no output project file needs to specified. If cpfind finds key-
     files for an image in the project it will use them automatically and not
     run the feature descriptor again on this image. If you want to save them to
     annother directory use the --keypath switch.

     This procedure can also be automate with the switch --cache:

	cpfind --cache -o output.pto input.pto

     In this case it tries to load existing keypoint files. For images, which
     don't have a keypoint file, the keypoints are detected and save to the
     file. Then it matches all loaded and newly found keypoints and writes the
     output project.

     If you don't need the keyfile longer, the can be deleted automatic by

	cpfind --clean input.pto

EXTENDED OPTIONS
   Feature description
     For speed reasons cpfind is using images, which are scaled to their half
     width and height, to find keypoints. With the switch --fullscale cpfind is
     working on the full scale images. This takes longer but can provide "bet-
     ter" and/or more control points.

     The feature description step can be fine-tuned by the parameters:

     --sieve1width <int>
	 Sieve 1: Number of buckets on width (default: 10)

     --sieve1height <int>
	 Sieve 1: Number of buckets on height (default: 10)

     --sieve1size <int>
	 Sieve 1: Max points per bucket (default: 100)

     --kdtreesteps <int>
	 KDTree: search steps (default: 200)

     --kdtreeseconddist <double>

     KDTree: distance of 2nd match (default: 0.25)

     Cpfind stores maximal sieve1width * sieve1height * sieve1size keypoints per
     image. If you have only a small overlap, e.g. for 360 degree panorama shoot
     with fisheye images, you can get better results if you increase sieve1size.
     You can also try to increase sieve1width and/or sieve1height.

   Feature matching
     Fine-tuning of the matching step by the following parameters:

     --ransaciter <int>
	 Ransac: iterations (default: 1000)

     --ransacdist <int>
	 Ransac: homography estimation distance threshold (pixels) (default: 25)

     --ransacmode (auto, hom, rpy, rpyv, rpyb)
	 Select the model used in the ransac step.

	 hom: Assume a homography. Only applicable for non-wide angle
	      views. Uses the original panomatic code. It is also more flexible
	      than required and can generate false matches, particularly if most
	      of the matches are located on a single line.

	 rpy: Align images using roll, pitch and yaw. This requires a good
	      estimate for the horizontal field of view (and distortion, for
	      heavily distorted images). It is the preferred mode if a
	      calibrated lens is used, or the HFOV could be read successfully
	      from the EXIF data.

	 rpyv: Align pair by optimizing roll, pitch, yaw and field of
	       view. Should work without prior knowledge of the field of view,
	       but might fail more often, due to error function used in the
	       panotools optimizer, it tends to shrink the fov to 0.

	 rpyvb: Align pair by optimizing roll, pitch, yaw, field of view and
		the "b" distortion parameter.  Probably very fragile, just
		implemented for testing.

	 auto: Use homography for images with hfov < 65 degrees and rpy other-
	 wise.

     --minmatches <int>
	 Minimum matches (default: 4)

     --sieve2width <int>
	 Sieve 2: Number of buckets on width (default: 5)

     --sieve2height <int>
	 Sieve 2: Number of buckets on height (default: 5)

     --sieve2size <int>
	 Sieve 2: Max points per bucket (default: 2)

	 Cpfind generates between minmatches and sieve2width * sieve2height *
	 sieve2size control points between an image pair. (Default setting is
	 between 4 and 50 (=5*5*2) control points per image pair.) If less then
	 minmatches control points are found for a given image pairs these con-
	 trol points are disregarded and this image pair is considers as not
	 connected. For narrow overlaps you can try to decrease minmatches, but
	 this increases the risk of getting wrong control points.

OPTIONS
     --celesteRadius <int>
	 Radius for celeste (default 20)

     --celesteThreshold <double>
	 Threshold for celeste (default 0.5)

     --celeste
	 Run celeste sky identification after loading images, this ignores all
	 features associated with 'clouds'.

     -p <string, --keypath <string>
	 Path to cache keyfiles

     --clean
	 Clean up cached keyfiles

     -c, --cache
	 Caches keypoints to external file

     --kall
	 Write keyfiles for all images

     -k <int>, --writekeyfile <int>
	 Write a keyfile for this image number (accepted multiple times)

     -o <string>, --output <string>
	 Output file, required

     -n <int>, --ncores <int>
	 Number of CPU/Cores (default:autodetect)

     -t, --test
	 Enables test mode

     --fullscale
	 Uses full scale image to detect keypoints (default:false)

     --sieve1width <int>
	 Sieve 1 : Number of buckets on width (default : 10)

     --sieve1height <int>
	 Sieve 1 : Number of buckets on height (default : 10)

     --sieve1size <int>
	 Sieve 1 : Max points per bucket (default : 100)

     --kdtreesteps <int>
	 KDTree : search steps (default : 200)

     --kdtreeseconddist <double>
	 KDTree : distance of 2nd match (default : 0.15)

     --multirow
	 Enable heuristic multi row matching (default: off)

     --linearmatch
	 Enable linear images matching (default : all pairs)

     --linearmatchlen <int>
	 Number of images to match in linear matching (default:1)

     --minmatches <int>
	 Minimum matches (default : 4)

     --ransaciter <int>
	 Ransac : iterations (default : 1000)

     --ransacdist <int>
	 Ransac : homography estimation distance threshold (pixels) (default :
	 25)

     --sieve2width <int>
	 Sieve 2 : Number of buckets on width (default : 5)

     --sieve2height <int>
	 Sieve 2 : Number of buckets on height (default : 5)

     --sieve2size <int>
	 Sieve 2 : Max points per bucket (default : 2)

     --, --ignore_rest
	 Ignores the rest of the labeled arguments following this flag.

     --version
	 Displays version information and exits.

     -h, --help
	 Displays usage information and exits.

AUTHORS
     Anael Orlinski, Pablo d'Angelo, Antoine Deleforge, Thomas Modes

Version: 2025.0.1"		   2019-01-26			     CPFIND("1")

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=cpfind&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help