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,
}
# or
config = {
"mode": "depth",
"sigma": 2,
"depth_contrast": 0.5,
}
# 이미지 후처리 진행
error_code, result = saige_surface.postprocess(normal, albedo, config)
build(device, inference_mode)
classmethod
SaigeSurface class의 instance를 생성합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
device |
DeviceType
|
GPU device 입니다. str 또는 int로 입력합니다. |
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)
- sigma: [for depth mode] Depth 이미지의 표현 범위를 조절합니다. 낮을수록 세부 형상이 정확해지지만, 전체적으로 고저차가 드러나지 않습니다. 높을수록 세부 형상이 흐릿해지는 반면, 깊이의 고저차가 더욱 명확히 드러납니다. (2~5, 기본=2)
- depth_contrast: [for depth mode] Depth 이미지의 대비 정도를 조절합니다 (0.1~1.0, 기본=0.3)
Parameters:
Returns:
| Type | Description |
|---|---|
ndarray
|
np.ndarray: (H, W)의 크기를 가지는 surface normal map입니다. (0~255) |