
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
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