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[np.ndarray]
|
Grayscale 이미지 리스트입니다. |
required |
tilt_degree_list |
List[int]
|
각 이미지의 광원 방향입니다 (이미지 우측이 0도, 반시계 방향). |
required |
elevation |
Optional[int]]
|
빛의 각도입니다. Defaults to 30. |
30
|
Raises:
| Type | Description |
|---|---|
error.NotEnoughImageError
|
이미지 최소 3장이 필요합니다. |
error.ImageAndTiltNumMismatchError
|
이미지 수와 tilt 수가 동일해야 합니다. |
error.InvalidTiltAngleError
|
주어진 tilt 조건에서 분석을 수행할 수 없습니다. 다른 tilt 조건이 필요합니다. |
error.InvalidImageShapeError
|
모든 이미지는 동일한 크기여야 합니다. |
error.InvalidImageShapeError
|
모든 이미지는 grayscale이어야 합니다. |
error.ElevationAngleOutOfRangeError
|
Elevation angle이 0보다 작거나 90보다 큽니다. |
Returns:
| Type | Description |
|---|---|
Tuple[torch.Tensor, torch.Tensor]
|
Tuple[torch.Tensor, torch.Tensor]: surface normal, albedo |
postprocess(normal, albedo, config)
surface normal map에 이미지 프로세싱 기법을 적용합니다.
- mode : 용도에 맞게 모드를 선택합니다.
- shape : 흠집 검사에 적합합니다.
- gradientX : 표면의 X방향 경사 변화도를 나타냅니다.
- gradientY : 표면의 Y방향 경사 변화도를 나타냅니다.
- albedo : 표면 반사도를 표현합니다.
- shader_level : 쉐이더 레벨입니다. 낮을 수록 평평하고 높을 수록 입체감이 드러나며, 처리시간이 소폭 증가합니다. (1~5; 기본=2)
- contrast : 명암비입니다. 낮을 수록 대비가 낮고 높을 수록 대비가 높아집니다. (-100~100, 기본=10)
- brightness : 이미지 밝기입니다. 낮을 수록 어두워지고 높을 수록 밝아집니다. (-30~30, 기본=0)
- normalize_image: 결과물의 정규화 여부를 선택합니다. False일 경우 실제 이미지에 더 가깝습니다. (기본=True)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
normal |
torch.Tensor
|
(3, H, W)의 크기를 가지는 surface normal map입니다. |
required |
albedo |
torch.Tensor
|
(H, W)의 크기를 가지는 albedo map입니다. |
required |
config |
dict
|
이미지 프로세싱 파라미터를 담은 dictionary 입니다. |
required |
Returns:
| Type | Description |
|---|---|
np.ndarray
|
np.ndarray: (H, W)의 크기를 가지는 surface normal map입니다. (0~255) |