• Getting Started
  • Api Documentation
  • Release Notes
Show / Hide Table of Contents
  • Installation
  • Photometric Stereo
  • Find Circle
  • Find Line
  • Image Synthesis

SaigeVision ImageProcess Quick Start - Photometric Stereo

이 문서는 ImageProcess 기능 중 Photometric Stereo에 대해서 사용하는 방법에 대해 설명합니다.

기능 소개

Overall pipeline

Photometric stereo 기술은 상, 하, 좌, 우 방향으로 조명을 가한 4장의 이미지를 제공받아 표면의 이물, 스크래치 등 결함으로 판단될 가능성이 있는 영역을 시각화해 보여주는 기술입니다.

Input data

같은 검사 대상물을 여러 방향으로 조명을 가해 촬영한 이미지 최소 3장 (권장 4장) 과 그에 해당하는 조명 방향각 값이 인풋으로 사용됩니다. 최대한 다양한 방향의 조명으로 촬영하는 것이 바람직하며, 기본적으로는 상, 하, 좌, 우 90도 단위로 4장을 촬영하는 것이 권장됩니다. 이미지 갯수와 조명 방향각 값 갯수는 동일하게 제공되어야 합니다.

Output data

모드별로 주요 영역을 시각화한 grayscale 이미지 1장이 반환됩니다. 원본 이미지와 height, width가 같습니다.

Shape
GradientX
GradientY
Albedo

API Detail

아래는 ‘Photometric Stereo’를 설명하기 위한 샘플 코드입니다.

{
	SaigePhotometricStereo stereo = 
			new SaigePhotometricStereo(0, CalculataionFlags.BASIC);
	List<Bitmap> _images = new List<Bitmap>();
	string path = @"..\..\images";
	_images.Add(new Bitmap(Path.Combine(path, "upper.bmp")));
	_images.Add(new Bitmap(Path.Combine(path, "right.bmp")));
	_images.Add(new Bitmap(Path.Combine(path, "left.bmp")));
	_images.Add(new Bitmap(Path.Combine(path, "bottom.bmp")));

	var option = stereo.GetAnalyzeOptions();
	option.Elevation = 30;
	stereo.SetAnalyzeOptions(option);

	stereo.SetImage(_images[0], _images[1], _images[2], _images[3]);
	stereo.PhotometricStereoAnalyze();

	var resultOption = stereo.GetResultOptions();
	resultOption.Mode = ModeFlags.ALBEDO;

	// ALBEDO, GRADIENT, SHAPE MODE 에서 적용되는 OPTION 입니다.
	resultOption.Shader = ShaderFlags.LEVEL2;
	resultOption.Contrast = 10;
	resultOption.Brightness = 0;
	resultOption.Normalize = true;

	// DEPTH MODE 에서 적용되는 OPTION 입니다.
	resultOption.Order = 1.0;
	resultOption.Cutoff_Frequency = 10;
	resultOption.Depth_Contrast = 0.3;

	stereo.SetResultOptions(resultOption);

	Bitmap bmp = stereo.GetResultImage();

	stereo.Dispose();
}

Inspection


SaigePhotometricStereo 사용하기 위한 초기화 함수입니다. Build에 따른 시간이 소요될 수 있습니다.

SaigeVision V1과 동시에 사용할 경우 먼저 호출해줘야합니다.

CalculataionFlags 는 연산 속도를 선택할 수 있는 모드로 basic, fast 두가지 모드가 있습니다.

  • BASIC: 기본모드 입니다.
  • FAST: 연산 속도는 빨리지며 사용하는 GPU 메모리도 증가합니다.
SaigePhotometricStereo stereo = new SaigePhotometricStereo(int GPUIndex, Enum CalculataionFlags);

이미지 추론에 사용하는 Option에 대해서 설정 및 적용 가능한 함수 (GetOptions, SetOptions)

Elevation 촬영 시 이미지 중심점으로부터 조명까지의 고도각 (elevation angle) 을 degree 단위로 표현한 값입니다.

Tilt_Degree (이미지 우측이 0도, 반시계 방향)

  • Top, Bottom, Left, Right: 광원의 방향입니다. Image에서 top과 매칭되며 촬영에 맞는 각도를 입력하면 됩니다.
var option = stereo.GetOptions();
option.Elevation = 30;
option.Tilt_Degree_Top = 90;
option.Tilt_Degree_Bottom = 270;
option.Tilt_Degree_Left = 180;
option.Tilt_Degree_Right = 0;
stereo.SetOptions(option);

SetImage의 경우 검사를 위한 이미지를 설정하는 함수입니다. 3장 또는 4장의 이미지가 입력되어야 합니다.

stereo.SetImage(Bitmap top, Bitmap right, Bitmap left, Bitmap bottom);
stereo.SetImage(Bitmap top, Bitmap right, Bitmap left, null);

null 의 경우 4개의 param 중 한곳에 입력 가능

PhotometricStereoAnalyze option에 대한 설정이 완료되면 PhotometricStereoAnalyze 을 통해 검사를 실시합니다

stereo.PhotometricStereoAnalyze();

결과 이미지를 받아로기 위한 SaigePhotometricStereoResultImageOption에 대해서 설정 및 적용 가능한 함수 (GetResultImageOptions, SetResultImageOptions)

ModeFlags 의 경우 이미지 분석 결과를 바탕으로 다섯가지 종류의 후 처리 된 이미지 결과를 얻는 API

  • SHAPE: 흠집 검사에 적합합니다
  • ALBEDO: 표면 반사도를 표현합니다
  • GRADIENT_X: 표면의 X방향 경사 변화도를 나타냅니다
  • GRADIENT_Y: 표면의 Y방향 경사 변화도를 나타냅니다
  • DEPTH: 표면의 깊이를 나타냅니다.

Shader 낮을 수록 평평하고 높을 수록 입체감이 드러나며, 처리시간이 소폭 증가합니다. (1~5, 기본=2)

Contrast 명암비입니다. 낮을 수록 대비가 낮고 높을 수록 대비가 높아집니다. (-100~100, 기본=10)

Brightness 이미지의 밝기입니다. 낮을 수록 어두워지고 높을 수록 밝아집니다. (-30~30, 기본0)

normalize 결과물의 정규화 여부를 선택합니다. False일 경우 실제 이미지에 더 가깝습니다.

Order 고주파 통과 필터의 차수입니다. 값이 커질수록 저주파 성분이 더 많이 없어집니다. (0.1~5.0, 기본=1.0)

Cutoff Frequency 고주파 통과 필터의 cutoff frequency입니다. cutoff frequency 이상의 주파수 값은 없애지 않습니다. (1~, 기본=10)

Depth Contrast Depth 이미지의 대비 정도를 조절합니다. (0.1~1.0, 기본=0.3)

var resultOption = stereo.GetResultImageOptions();
resultOption.Mode = ModeFlags.ALBEDO;

// ALBEDO, GRADIENT, SHAPE MODE 에서 적용되는 OPTION 입니다.
resultOption.Shader = ShaderFlags.LEVEL2;
resultOption.Contrast = 10;
resultOption.Brightness = 0;
resultOption.Normalize = true;

// DEPTH MODE 에서 적용되는 OPTION 입니다.
resultOption.Order = 1.0;
resultOption.Cutoff_Frequency = 10;
resultOption.Depth_Contrast = 0.3;

stereo.SetResultImageOptions(resultOption);

PhotometricStereoAnalyze 후 GetResultImage 함수를 통하여 최종 이미지를 가져옵니다

Bitmap result_image =stereo.GetResultImage();

모든 검사가 완료되었다면 Dispose 를 통해 해제해 줍니다.

stereo.Dispose();
  • Improve this Doc
In This Article
Back to top Generated by DocFX