SaigeSurface
PhotometricStereo.SaigeSurface
Bases: PhotometricStereo
2.5D 이미지 생성을 위한 SaigeSurface class입니다. Usage:
from PhotometricStereo.engine.api import SaigeSurface
saige_surface = SaigeSurface.build(device=0, inference_mode="fast")
# surface normal 계산
error_code, (normal, albedo) = saige_surface.calculate_surface_normal(img_list)
config = {
"mode": "shape",
"shader_level": 2,
"contrast": 15,
"brightness": 0,
"normalize_image": True,
}
# 이미지 후처리 진행
error_code, result = saige_surface.postprocess(normal, albedo, config)
build(device, inference_mode)
classmethod
SaigeSurface class의 instance를 생성합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
device |
int
|
GPU device index 입니다. |
required |
inference_mode |
str
|
인퍼런스 모드입니다. "basic", "fast" 중 선택합니다. |
required |
calculate_surface_normal_and_albedo(img_list, tilt_degree_list, elevation=30)
4장의 이미지를 이용하여 surface normal과 albedo를 계산합니다. 이미지 순서가 광원 위치 기준 [left, top, right, bottom]으로 정확해야합니다. 이미지 순서가 올바르지 않을 경우, 정확한 결과를 계산할 수 없습니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
img_list |
List[ndarray]
|
required | |
tilt_degree_list |
List[int]
|
required | |
elevation |
Optional[int]]
|
빛의 각도입니다. Defaults to 30. |
30
|
Raises:
| Type | Description |
|---|---|
NotEnoughImageError
|
이미지 최소 3장이 필요합니다. |
ImageAndTiltNumMismatchError
|
이미지 수와 tilt 수가 동일해야 합니다. |
InvalidTiltAngleError
|
주어진 tilt 조건에서 분석을 수행할 수 없습니다. 다른 tilt 조건이 필요합니다. |
InvalidImageShapeError
|
모든 이미지는 동일한 크기여야 합니다. |
InvalidImageShapeError
|
모든 이미지는 grayscale이어야 합니다. |
ElevationAngleOutOfRangeError
|
Elevation angle이 0보다 작거나 90보다 큽니다. |
Returns:
| Type | Description |
|---|---|
Tuple[Tensor, Tensor]
|
Tuple[torch.Tensor, torch.Tensor]: surface normal, albedo |
postprocess(normal, albedo, config)
surface normal map에 이미지 프로세싱 기법을 적용합니다.
- mode : 용도에 맞게 모드를 선택합니다.
- shape: 흠집 검사에 적합합니다.
- gradientX: 표면의 X방향 경사 변화도를 나타냅니다.
- gradientY: 표면의 Y방향 경사 변화도를 나타냅니다.
- albedo: 표면 반사도를 표현합니다.
- depth: 표면의 깊이를 표현합니다.
- shader_level: 쉐이더 레벨입니다. 낮을 수록 평평하고 높을 수록 입체감이 드러나며, 처리시간이 소폭 증가합니다. (1~5; 기본=2)
- contrast: 명암비입니다. 낮을 수록 대비가 낮고 높을 수록 대비가 높아집니다. (-100~100, 기본=10)
- brightness: 이미지 밝기입니다. 낮을 수록 어두워지고 높을 수록 밝아집니다. (-30~30, 기본=0)
- normalize_image: 결과물의 정규화 여부를 선택합니다. False일 경우 실제 이미지에 더 가깝습니다. (기본=True)
- order: [for depth mode] 고주파 통과 필터의 차수입니다. 값이 커질수록 저주파 성분이 더 많이 없어집니다. (0.1~5.0, 기본=1.0)
- cutoff_frequency: [for depth mode] 고주파 통과 필터의 cutoff frequency입니다. cutoff frequency 이상의 주파수 값은 없애지 않습니다. (1~, 기본=10)
- clip_min: [for depth mode] 이미지의 픽셀값 하한입니다. clip_min * 255 이하의 픽셀값이 모두 0으로 치환되고, 그 이상의 값은 0~255로 mapping 됩니다. (0.0~1.0, 기본=0.0)
- clip_max: [for depth mode] 이지지의 픽셀값 상한입니다. clip_min * 255 이하의 픽셀값이 모두 255로 치환되고, 그 이하의 값은 0~255로 mapping 됩니다. (0.0~1.0, 기본=1.0)
Parameters:
Returns:
| Type | Description |
|---|---|
ndarray
|
np.ndarray: (H, W)의 크기를 가지는 surface normal map입니다. (0~255) |