Tapioca
Description
Tapioca is a simple tool interface for computing tie points. I think Tapioca should be sufficient in 95% of cases. If it is not the case, you will have to refer to a more complex and powerful tool named Pastis which will be described later. In fact, Tapioca is only an interface to Pastis.
Syntax
The global syntax for Tapioca is
mm3d Tapioca UnNamedArgs NamedArgs
Allowed commands
- MulScale : Compute tie points for images in low resolution and then for high resolution.
- All : Compute tie points for all images in a given resolution.
- Line : Compute tie points for linear image canvas.
- File : Compute tie points for images in a xml file
- Graph : in development
Results
Tapioca generate a directory named "Homol" ("Homol_SRes" for Tapioca MulScale) in your working directory which contain for each image of your canvas, a directory named "PastisImage_name". In this directory "Pastis" you will find a binary file (".dat") for each image linked with the first image by tie points. This binary files contains tie points.
For example, in Gravillons dataset, all images are linked so this is the arborescence of the Gravillon Homol directory :
Workflow
Tapioca, is generally the first command to launch in a MicMac process.
Previous Command : ~
Next Command : (HomolFilterMasq,Schnaps,) Tapas.
Visualize tie points
NB : This tool works only for Linux OS.
If you want to visualize tie points matched by Tapioca, you can run the command SEL:
mm3d SEL ./ image_1 image_2 KH=NB
Tie points computation mode
All
Tie points are looked for in all possible pair of images at the reduced resolution chosen by the user in the Size of image option.
Help
You can access to the help by typing :
mm3d Tapioca All -help
Mandatory unnamed args :
- string :: {Full Name (Dir+Pat)}
- INT :: {Size of image, in pixels}
Named args :
- [Name=ExpTxt] INT :: {Export files in text format (Def=false means binary)}
- [Name=PostFix] string :: {Add postfix in directory}
- [Name=ByP] INT :: {By process}
- [Name=Pat2] string :: {Second pattern}
- [Name=Detect] string
- [Name=Match] string
- [Name=NoMax] bool
- [Name=NoMin] bool
- [Name=NoUnknown] bool
Using -1 as Image's size is equivalent to use full resolution image. But it's recommended to use rather a resolution to a scaling between 0.3 and 0.5.
Example
For example with the Ramses dataset, you can launch :
mm3d Tapioca All "IMG.*CR2" 1000
For example with the Zhenjue dataset, you can launch :
mm3d Tapioca All ".*JPG" 1500
MulScale
The mode MulScale can save significant computation time on large sets of images. Even if it is not optimal for all canvas, it has the benefit of being general and usable with any data set. In this mode, a first computation of tie points is made for all the pairs of images at a low resolution (so it is quite fast), chosen by the user through the Size of Low Resolution Images option. Then the computation is done at the Size of High Resolution Images only for the pairs having, at low resolution, a number of tie points exceeding a given threshold (NbMinPt).
Help
You can access to the help by typing :
mm3d Tapioca MulScale -help
Mandatory unnamed args :
- string :: {Full Name (Dir+Pat)}
- INT :: {Size of Low Resolution Images}
- INT :: {Size of High Resolution Images}
Named args :
- [Name=ExpTxt] INT :: {Export files in text format (Def=false means binary)}
- [Name=ByP] INT :: {By process}
- [Name=PostFix] string :: {Add postfix in directory}
- [Name=NbMinPt] INT :: {Minimum number of points}
- [Name=DLR] INT :: {Do Low Resolution}
- [Name=Pat2] string :: {Second pattern}
- [Name=Detect] string
- [Name=Match] string
- [Name=NoMax] bool
- [Name=NoMin] bool
- [Name=NoUnknown] bool
Example
For example with the Buddha dataset, you can launch :
mm3d Tapioca MulScale "IMG_[0-9]{4}.tif" 300 -1
For example with the Cuxa dataset, you can launch :
mm3d Tapioca MulScale "Abbey-IMG_.*.jpg" 200 800
Line
It often occurs that the photos canvas has a linear structure, for example, when you acquire photos of a facade walking along the street. In this case, you know that the [math]Kth[/math] image can only have tie points with images in the interval [K - δ, K + δ] giving this information to Tapioca can save a lot of time. The argument Number of adjacent images to look for sets δ. The Circ option is used if the acquisition is circular (the first and last image see each other). All the other arguments have the same meaning as in the All mode.
Help
You can access to the help by typing :
mm3d Tapioca Line -help
Mandatory unnamed args :
- string :: {Full Name (Dir+Pat)}
- INT :: {Image size}
- INT :: {Number of adjacent images to look for (δ)}
Named args :
- [Name=ExpTxt] INT :: {Export files in text format (Def=false means binary)}
- [Name=Jump] vector<int> :: {Densification by jump }
- [Name=PostFix] string :: {Add postfix in directory}
- [Name=ByP] INT :: {By process}
- [Name=Circ] INT :: {In line mode if it's a loop (begin ~ end)}
- [Name=ForceAdSupResol] bool :: {to force computation even when Resol
- [Name=Detect] string
- [Name=Match] string
- [Name=NoMax] bool
- [Name=NoMin] bool
- [Name=NoUnknown] bool
Example
For example with the Ramses dataset, you can launch :
mm3d Tapioca Line "IMG.*CR2" 1000 3
Graph
Help
You can access to the help by typing :
mm3d Tapioca Graph -help
Mandatory unnamed args :
- string :: {Full images' pattern (directory+pattern)}
- INT :: {Processing size of image (for the greater dimension)}
Named args :
- [Name=ByP] INT :: {By process}
- [Name=Detect] string :: {executable used to detect keypoints}
- [Name=MaxPoint] INT :: {number of points used per image to construct the graph (default 200)}
- [Name=MinScale] REAL :: {if specified, points with a lesser scale are ignored}
- [Name=MaxScale] REAL :: {if specified, points with a greater scale are ignored}
- [Name=NbRequired] INT :: {number of matches to create a connexion between two images (default 1)}
- [Name=Out] string :: {name of the produced XML file}
- [Name=PrintGraph] bool :: {print result graph in standard output}
File
A file specifying a set of images to be matched is needed here. Such a file can either be generated manually or be produced with OriConvert when the images come with GPS information, the images to be matched together being within a given distance threshold of each others.
Help
You can access to the help by typing :
mm3d Tapioca File -help
Mandatory unnamed args :
- string :: {XML-File of pair}
- INT :: {Resolution}
Named args :
- [Name=ExpTxt] INT :: {Export files in text format (Def=false means binary)}
- [Name=PostFix] string :: {Add postfix in directory}
- [Name=ByP] INT :: {By process}
- [Name=Detect] string
- [Name=Match] string
- [Name=NoMax] bool
- [Name=NoMin] bool
- [Name=NoUnknown] bool
Example
In the tutorial GrandLeez, we use the option File for Tapioca. The file FileImagesNeighbour.xml contain for each images, his differents neighboors. If you open the file, you can see :
<Cple>R0040439.JPG R0040519.JPG</Cple> <Cple>R0040439.JPG R0040514.JPG</Cple> <Cple>R0040439.JPG R0040444.JPG</Cple> <Cple>R0040439.JPG R0040517.JPG</Cple> <Cple>R0040439.JPG R0040438.JPG</Cple> <Cple>R0040439.JPG R0040440.JPG</Cple> <Cple>R0040439.JPG R0040441.JPG</Cple> <Cple>R0040439.JPG R0040516.JPG</Cple> <Cple>R0040439.JPG R0040442.JPG</Cple> <Cple>R0040439.JPG R0040515.JPG</Cple> <Cple>R0040439.JPG R0040443.JPG</Cple>
It means, image R0040439.JPG is connected with all the images detailed in <Cple> tag. So you can run the tie point generation with Tapioca using this file :
mm3d Tapioca File FileImagesNeighbour.xml -1
What Tie Points is?
Tie points on low contrast Images
The current implementation of SIFT++ used in MicMac is not fully invariant to scaling/translation in radiometry. This may be a problem in case of acquisitions having a good SNR but with low contrast in the scene; in this case, thanks to good SNR there is potential information to get tie points, but as this information is assimilated to noise, it cannnot be extracted. To overcome this problem, it is possible to require that MicMac computes some contrast enhancement on images before computing SIFT points.