1
0
mirror of https://github.com/opencv/opencv_contrib.git synced 2025-10-21 06:11:09 +08:00
Files
AmbroiseMoreau e439f26d37 first commit. Interface for sinusoidal pattern profilometry has been added along with stubs functions in the implementation class. The new interface inherits from StructuredLightPattern
Added markers to sinusoidal patterns

computePhaseMap for Fourier transform profilometry

computePhaseMap for Fourier transform profilometry

added phase map computation for PSP. Changed the maskDftRegion to frequencyFiltering. It uses regions of interest and can filter symmetrically. Also added computeShadowMask and computeDataModulationTerm

changed formatting in structured light module. First commit for the phase unwrapping module. So far, pixel reliabilities are computed and edges are sorted in a histogram.

Fixed an error in edges sorting. Added the unwrap histogram method. It computes the number of 2*Pi that has to be added to each pixel to unwrap the phase map

added an example for phase unwrapping and a test that unwraps a simple phase map

Added documentation draft and a small example that can generate sinusoidal patterns

removed unnecessary include

added a few comments in sinusoidalpattern.cpp and histogramphaseunwrapping.cpp. Removed some redudancy about mask in the reliability computation. Changed formatting

projector calibration as a sample

bug fix

calibration + cap sinus example

doc and tutorials

modified calibration example

fix for pr

fix for pr

shadow mask for FTP as in the reference paper

changed doc

added test for faps

dummy commit

fixing warnings in test

changed test to use jpeg

dummy

changed permissions and used atan2(x,y) instead of atan

dummy commit

dummy

setting dmt to zero near shadow mask border. It reduces noise

bug fix in dmt computation

dummy commit for build bots

dummy commit for build bots
2016-11-07 10:58:58 +01:00

2.8 KiB

Unwrap two-dimensional phase maps

Goal

In this tutorial, you will learn how to use the phase unwrapping module to unwrap two-dimensional phase maps. The implementation is based on @cite histogramUnwrapping.

Code

@include phase_unwrapping/samples/unwrap.cpp

Explanation

To use this example, wrapped phase map values should be stored in a yml file as CV_32FC1 Mat, under the name "phaseValues". Path to the data and a name to save the unwrapped phase map must be set in the command line. The results are saved with floating point precision in a yml file and as an 8-bit image for visualization purpose.

Some parameters can be chosen by the user:

  • histThresh is a parameter used to divide the histogram in two parts. Bins before histThresh are smaller than the ones after histThresh. (Default value is 3pipi).
  • nbrOfSmallBins is the number of bins between 0 and histThresh. (Default value is 10).
  • nbrOfLargeBins is the number of bins between histThresh and 32pipi. (Default value is 5).

@code{.cpp} phase_unwrapping::HistogramPhaseUnwrapping::Params params;

CommandLineParser parser(argc, argv, keys);
String inputPath = parser.get<String>(0);
String outputUnwrappedName = parser.get<String>(1);
String outputWrappedName = parser.get<String>(2);

if( inputPath.empty() || outputUnwrappedName.empty() )
{
    help();
    return -1;
}
FileStorage fsInput(inputPath, FileStorage::READ);
FileStorage fsOutput(outputUnwrappedName + ".yml", FileStorage::WRITE);

Mat wPhaseMap;
Mat uPhaseMap;
Mat reliabilities;
fsInput["phaseValues"] >> wPhaseMap;
fsInput.release();
params.width = wPhaseMap.cols;
params.height = wPhaseMap.rows;
Ptr<phase_unwrapping::HistogramPhaseUnwrapping> phaseUnwrapping = phase_unwrapping::HistogramPhaseUnwrapping::create(params);

@endcode The wrapped phase map is unwrapped and the result is saved in a yml file. We can also get the reliabilities map for visualization purpose. The unwrapped phase map and the reliabilities map are converted to 8-bit images in order to be saved as png files.

@code{.cpp} phaseUnwrapping->unwrapPhaseMap(wPhaseMap, uPhaseMap); fsOutput << "phaseValues" << uPhaseMap; fsOutput.release();

phaseUnwrapping->getInverseReliabilityMap(reliabilities);

Mat uPhaseMap8, wPhaseMap8, reliabilities8;
wPhaseMap.convertTo(wPhaseMap8, CV_8U, 255, 128);
uPhaseMap.convertTo(uPhaseMap8, CV_8U, 1, 128);
reliabilities.convertTo(reliabilities8, CV_8U, 255,128);

imshow("reliabilities", reliabilities);
imshow("wrapped phase map", wPhaseMap8);
imshow("unwrapped phase map", uPhaseMap8);

imwrite(outputUnwrappedName + ".png", uPhaseMap8);
imwrite("reliabilities.png", reliabilities8);

@endcode