Fringe Pattern 3D

1 개요

물체에 투영된 프린지 패턴(Fringe pattern)을 조사하여 물체의 높이를 판단하는 알고리즘

2 알고리즘 상세 설명

Learn Images Source Images Destination Object
Learn Image Source Image Destination Object
Fig. Learn, Source and Result images.

위 예시에서 사용된 Learn, Source 페어는 각 7 페이지이며, 2개의 페어를 사용하여 연산한 결과를 나타냅니다.

알고리즘 수행은 크게 Calibrate 과정과 Excute 과정으로 구성됩니다.
Calibrate 용 Learn 이미지 시퀀스와 Excute 용 Source 이미지 시퀀스는 서로 쌍을 이루기 때문에 동일 페이지 인덱스에서 투영되는 패턴의 위상이 서로 동일해야 합니다. 두 이미지 간의 차이점은 측정 대상 물체의 유무입니다.

위의 예시와 같은 일부 케이스의 경우, 패턴 투영 각도와 물체의 높이 및 길이로 인해 측정 불가 지점이 국소적으로 존재할 수 있으며, 이를 보완하기 위해 투영 각도를 달리한 여러 시퀀스 페어의 이미지를 입력할 수 있습니다. 이 경우, 서로 다른 페어에서 물체의 위치가 변경되지 않아야 합니다.

GUI 상에서는 입력할 페어의 수를 Add Data 버튼 및 Delete Data 버튼으로 변경할 수 있습니다.

3 파라미터 설정 및 사용 방법

Camera 파라미터 설정

Calibrate 파라미터 설정

Execute 파라미터 설정

4 예제 코드

CFringePattern3D fringePattern3D;

CFLArray<CFLImage*> arrPFliLearnImage;
CFLArray<CFLImage*> arrPFliSourceImage;
CFLImage fliDestinationHeightMapImage;
CMultiVar<double> mvAngles(73.0, 105.0);

fringePattern3D.SetWorkingDistance(330.0);
fringePattern3D.SetFieldOfView(400.0);
fringePattern3D.SetAngleOfProjector(mvAngles);
fringePattern3D.SetPatternType(CFringePattern3D::EPatternType_SquareWave);
fringePattern3D.SetBinProcessingType(CFringePattern3D::EBinProcessingType_Auto);
fringePattern3D.SetDestinationHeightMapImage(fliDestinationHeightMapImage);
fringePattern3D.EnableNoiseReduction(true);

fringePattern3D.SetLearnImage(arrPFliSourceImage);
fringePattern3D.Calibrate();

fringePattern3D.SetSourceImage(arrPFliSourceImage);
fringePattern3D.Execute();
CFringePattern3D fringePattern3D = new CFringePattern3D();

List<Base.CFLImage> arrPFliLearnImage = new List<Base.CFLImage>();
List<Base.CFLImage> arrPFliSourceImage = new List<Base.CFLImage>();
CFLImage fliDestinationHeightMapImage = new CFLImage();
CMultiVar<double> mvAngles = new CMultiVar<double>();
mvAngles.PushBack(73.0);
mvAngles.PushBack(105.0);

fringePattern3D.SetWorkingDistance(330.0);
fringePattern3D.SetFieldOfView(400.0);
fringePattern3D.SetAngleOfProjector(mvAngles);
fringePattern3D.SetPatternType(CFringePattern3D.EPatternType.SquareWave);
fringePattern3D.SetBinProcessingType(CFringePattern3D.EBinProcessingType.Auto);
fringePattern3D.SetDestinationHeightMapImage(ref fliDestinationHeightMapImage);
fringePattern3D.EnableNoiseReduction(true);

fringePattern3D.SetLearnImage(ref arrPFliLearnImage);
fringePattern3D.Calibrate();

fringePattern3D.SetSourceImage(ref arrPFliSourceImage);
fringePattern3D.Execute();
fringePattern3D = CFringePattern3D()

arrPFliLearnImage = List[CFLImage]()
arrPFliSourceImage = List[CFLImage]()
fliDestinationHeightMapImage = CFLImage()
fl3DOHM = CFL3DObjectHeightMap()
mvAngles = CMultiVar[Double]()
mvAngles.PushBack(73.0)
mvAngles.PushBack(105.0)

fringePattern3D.SetDestinationHeightMapImage(fliDestinationHeightMapImage)
fringePattern3D.SetDestinationObject(fl3DOHM)
fringePattern3D.SetWorkingDistance(330.0)
fringePattern3D.SetFieldOfView(400.0)
fringePattern3D.SetAngleOfProjector(mvAngles)
fringePattern3D.SetPatternType(CFringePattern3D.EPatternType.SquareWave)
fringePattern3D.SetBinProcessingType(CFringePattern3D.EBinProcessingType.Auto)
fringePattern3D.EnableNoiseReduction(True)

fringePattern3D.SetLearnImage(arrPFliLearnImage)
fringePattern3D.Calibrate()

fringePattern3D.SetSourceImage(arrPFliSourceImage)
fringePattern3D.Execute()

5 기타 사항

Supported Feature

Supported Format