This repository was archived by the owner on Jan 4, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathfpp_structures.py
55 lines (42 loc) · 1.6 KB
/
fpp_structures.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
'''Module to store FPP data structures'''
from __future__ import annotations
from typing import Optional
import enum
from dataclasses import dataclass, field
import numpy as np
class PhaseShiftingAlgorithm(enum.IntEnum):
'''Enum for phase shift algorithm type'''
n_step = 1
double_three_step = 2
@dataclass
class CameraMeasurement:
'''
Class to store result of measurement for one camera
'''
fringe_orientation: Optional[str] = 'vertical'
imgs_list: Optional[list[list[np.ndarray]]] = field(default_factory=lambda:list())
imgs_file_names: Optional[list[list[str]]] = field(default_factory=lambda:list())
# Calculated attributes
phases: Optional[list[np.ndarray]] = field(init=False)
unwrapped_phases: Optional[list[np.ndarray]] = field(init=False)
average_intensities: Optional[list[np.ndarray]] = field(init=False)
modulated_intensities: Optional[list[np.ndarray]] = field(init=False)
signal_to_noise_mask: Optional[np.ndarray] = field(init=False)
ROI: Optional[np.array[list]] = field(init=False)
ROI_mask: Optional[np.ndarray] = field(init=False)
use_ROI_mask: bool = field(init=False, default=True)
@dataclass
class FPPMeasurement:
'''
Class to store FPP measurement data
'''
phase_shifting_type: PhaseShiftingAlgorithm
frequencies: list[float]
shifts: list[float]
camera_results: list[CameraMeasurement] = field(default_factory=lambda:list())
@property
def frequency_counts(self) -> int:
return len(self.frequencies)
@property
def shifts_count(self) -> int:
return len(self.shifts)