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.GetOptions();
option.Mode = ModeFlags.ALBEDO;
option.Shader = ShaderFlags.LEVEL2;
option.Contrast = 10;
option.Brightness = 0;
option.Elevation = 30;
stereo.SetOptions(option);
stereo.SetImage(_images[0], _images[1], _images[2], _images[3]);
stereo.Inspection();
stereo.Dispose();
}
Inspection
SaigePhotometricStereo 사용하기 위한 초기화 함수입니다.
SaigeVision V1과 동시에 사용할 경우 먼저 호출해줘야합니다.
CalculataionFlags 는 연산 속도를 선택할 수 있는 모드로 basic, fast 두가지 모드가 있습니다.
- BASIC: 기본모드 입니다.
- FAST: 연산 속도는 빨리지며 사용하는 GPU 메모리도 증가합니다.
SaigePhotometricStereo stereo =
new SaigePhotometricStereo(int GPUIndex, Enum CalculataionFlags);
Option에 대해서 설정 및 적용 가능한 함수 (GetOptions, SetOptions)
ModeFlags 의 경우 이미지 분석 결과를 바탕으로 네가지 종류의 후 처리 된 이미지 결과를 얻는 API
- SHAPE: 흠집 검사에 적합합니다
- ALBEDO: 표면 반사도를 표현합니다
- GRADIENT_X: 표면의 X방향 경사 변화도를 나타냅니다
- GRADIENT_Y: 표면의 Y방향 경사 변화도를 나타냅니다
Shader 낮을 수록 평평하고 높을 수록 입체감이 드러나며, 처리시간이 소폭 증가합니다
Contrast 명암비입니다. 낮을 수록 대비가 낮고 높을 수록 대비가 높아집니다
Brightness 이미지의 밝기입니다. 낮을 수록 어두워지고 높을 수록 밝아집니다
Tilt_Degree (이미지 우측이 0도, 반시계 방향)
- Top, Bottom, Left, Right: 광원의 방향입니다. Image에서 top과 매칭되며 촬영에 맞는 각도를 입력하면 됩니다.
var option = stereo.GetOptions();
option.Mode = ModeFlags.ALBEDO;
option.Shader = ShaderFlags.LEVEL2;
option.Contrast = 10;
option.Brightness = 0;
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.SetImageBitmap top, Bitmap right, Bitmap left, null);
null 의 경우 4개의 param 중 한곳에 입력 가능
Inspection option에 대한 설정이 완료되면 Inspection 을 통해 검사를 실시합니다
stereo.Inspection();
검사 후 GetResultImage 함수를 통하여 최종 이미지를 가져옵니다
Bitmap result_image =stereo.GetResultImage();
모든 검사가 완료되었다면 Dispose 를 통해 해제해 줍니다.
stereo.Dispose();