Depth Image Reconstruction MAP Based 3D

1 개요

초점이 다른 이미지들의 초점 측정치를 기반으로 대상의 높이를 추정하는 알고리즘

2 알고리즘 상세 설명

Source Images Destination Texture Image Destination Height Map Image
Source Image Destination Texture Image Destination Height Map Image
Fig. Source, Destination Texture and Destination Height Map images.

최대 초점 측정치가 높은 페이지 인덱스를 높이의 기준점으로 삼습니다. 여기에 다른 페이지들의 초점 측정치 분포를 참고하여 신뢰도를 계산하고 기준점을 중심으로한 정규분포를 가정하여 최대 사후 확률 추정(MAP)으로 높이를 추정하여 출력합니다.

인근 픽셀과 색상이 유사한 픽셀의 경우 서로 유사한 높이임을 가정합니다.

Destination 3D Object
Destination Image
Fig. Destination 3D Object.

행렬 연산을 위해 CGM(Conjugate Gradient Method) 를 사용하는 반복적인 방식이므로, 경우에 따라 누적된 부동 소숫점 오차에 의한 발산 가능성이 존재합니다. 따라서 적정 수준의 반복 횟수를 설정하는 것이 권장됩니다.

높은 색상 대비 지점의 defocus 는 주변 픽셀의 잘못된 초점 측정을 유발하므로, defocus 에 의한 영향력을 무시 할 수 있는 정도의 texture 또는 낮은 색상 대비가 요구됩니다.

texture 가 존재하지 않는 평평한 단일 높이 영역에 대하여 사용자의 사전 지식을 활용하기 위해 해당 페이지에 대하여 초점 측정 bias 를 적용할 수 있습니다.
이 경우, 텍스쳐가 부족하더라도 해당 bias 값이 텍스쳐를 생성하므로 모든 페이지에 대해 낮은 초점 측정치를 지닌 영역에 대해 힌트가 될 수 있습니다.

Local Regularization 0.02 Local Regularization 0.2 Local Regularization 2.0
Destination Image Destination Image Destination Image
Fig. Local Regularization Factor.

다양한 파라미터들을 통하여 출력물의 품질을 조절할 수 있습니다. Local 정규화 수치, 바이어스 수치, CGM 반복 횟수, DoG 인 경우 sigma 값 설정 등을 통해 중점적으로 이루어집니다.

페이지 간 Alignment 가 맞지 않는 경우 이를 보정하기 위한 파라미터들이 있으며, 해당 옵션들은 내부에서 Perspective 알고리즘을 호출하는데 사용됩니다.

출력 Height 이미지의 높이 배율이 필요한 경우 파라미터를 통해 설정할 수 있습니다.

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

Page Alignment 보정

Calculation 정밀도 설정

Focus Measure 파라미터 설정

Optimization 파라미터 설정

출력 이미지 높이 배율 설정

4 예제 코드

CDepthImageReconstructionMAPBased3D depthImageReconstructionMAPBased3D;

CFLImage fliSourceImage;
CFLImage fliDestinationTextureImage;
CFLImage fliDestinationHeightMapImage;

depthImageReconstructionMAPBased3D.SetSourceImage(fliSourceImage);
depthImageReconstructionMAPBased3D.SetDestinationTextureImage(fliDestinationTextureImage);
depthImageReconstructionMAPBased3D.SetDestinationHeightMapImage(fliDestinationHeightMapImage);
depthImageReconstructionMAPBased3D.SetDestinationObject(fl3DOHM);
depthImageReconstructionMAPBased3D.Enable3DObjectGeneration(true);
depthImageReconstructionMAPBased3D.SetFMBiasPageIndex(0);
depthImageReconstructionMAPBased3D.SetFMBiasValue(0.004);
depthImageReconstructionMAPBased3D.SetFocusMeasureMethod(CDepthImageReconstructionMAPBased3D::EFocusMeasureMethod_DoG);
depthImageReconstructionMAPBased3D.SetSigma1(0.4);
depthImageReconstructionMAPBased3D.SetSigma2(0.8);
depthImageReconstructionMAPBased3D.SetLocalRegularizationFactor(0.02);
depthImageReconstructionMAPBased3D.SetCGMTolerance(0);
depthImageReconstructionMAPBased3D.SetCGMMaxIterations(50);
depthImageReconstructionMAPBased3D.SetDirection(CDepthImageReconstructionMAPBased3D::EDirection_BottomToTop);
depthImageReconstructionMAPBased3D.SetPixelAccuracy(1.0);
depthImageReconstructionMAPBased3D.SetDepthPitch(10.0);

depthImageReconstructionMAPBased3D.Execute();
CDepthImageReconstructionMAPBased3D depthImageReconstructionMAPBased3D = new CDepthImageReconstructionMAPBased3D();

CFLImage fliSourceImage = new CFLImage();
CFLImage fliDestinationTextureImage = new CFLImage();
CFLImage fliDestinationHeightMapImage = new CFLImage();
CFL3DObjectHeightMap fl3DOHM = new CFL3DObjectHeightMap();

depthImageReconstructionMAPBased3D.SetSourceImage(ref fliSourceImage);
depthImageReconstructionMAPBased3D.SetDestinationTextureImage(ref fliDestinationTextureImage);
depthImageReconstructionMAPBased3D.SetDestinationHeightMapImage(ref fliDestinationHeightMapImage);
depthImageReconstructionMAPBased3D.SetDestinationObject(ref fl3DOHM);
depthImageReconstructionMAPBased3D.Enable3DObjectGeneration(true);
depthImageReconstructionMAPBased3D.SetFMBiasPageIndex(0);
depthImageReconstructionMAPBased3D.SetFMBiasValue(0.004);
depthImageReconstructionMAPBased3D.SetFocusMeasureMethod(CDepthImageReconstructionMAPBased3D.EFocusMeasureMethod.DoG);
depthImageReconstructionMAPBased3D.SetSigma1(0.4);
depthImageReconstructionMAPBased3D.SetSigma2(0.8);
depthImageReconstructionMAPBased3D.SetLocalRegularizationFactor(0.02);
depthImageReconstructionMAPBased3D.SetCGMTolerance(0);
depthImageReconstructionMAPBased3D.SetCGMMaxIterations(50);
depthImageReconstructionMAPBased3D.SetDirection(CDepthImageReconstructionMAPBased3D.EDirection.BottomToTop);
depthImageReconstructionMAPBased3D.SetPixelAccuracy(1.0);
depthImageReconstructionMAPBased3D.SetDepthPitch(10.0);

depthImageReconstructionMAPBased3D.Execute();
depthImageReconstructionMAPBased3D = CDepthImageReconstructionMAPBased3D()

fliSourceImage = CFLImage()
fliDestinationTextureImage = CFLImage()
fliDestinationHeightMapImage = CFLImage()
fl3DOHM = CFL3DObjectHeightMap()

depthImageReconstructionMAPBased3D.SetSourceImage(fliSourceImage)
depthImageReconstructionMAPBased3D.SetDestinationTextureImage(fliDestinationTextureImage)
depthImageReconstructionMAPBased3D.SetDestinationHeightMapImage(fliDestinationHeightMapImage)
depthImageReconstructionMAPBased3D.SetDestinationObject(fl3DOHM)
depthImageReconstructionMAPBased3D.Enable3DObjectGeneration(True)
depthImageReconstructionMAPBased3D.SetFMBiasPageIndex(0)
depthImageReconstructionMAPBased3D.SetFMBiasValue(0.004)
depthImageReconstructionMAPBased3D.SetFocusMeasureMethod(CDepthImageReconstructionMAPBased3D.EFocusMeasureMethod.DoG)
depthImageReconstructionMAPBased3D.SetSigma1(0.4)
depthImageReconstructionMAPBased3D.SetSigma2(0.8)
depthImageReconstructionMAPBased3D.SetLocalRegularizationFactor(0.02)
depthImageReconstructionMAPBased3D.SetCGMTolerance(0)
depthImageReconstructionMAPBased3D.SetCGMMaxIterations(50)
depthImageReconstructionMAPBased3D.SetDirection(CDepthImageReconstructionMAPBased3D.EDirection.BottomToTop)
depthImageReconstructionMAPBased3D.SetPixelAccuracy(1.0)
depthImageReconstructionMAPBased3D.SetDepthPitch(10.0)

depthImageReconstructionMAPBased3D.Execute()

5 기타 사항

Supported Feature

Supported Format

6 관련 알고리즘

Perspective Multi Focus Depth Image Reconstruction 3D