|
5 | 5 | class ColorMapper(VideoSupplier): |
6 | 6 | def __init__(self, reader, source_colors, destination_colors): |
7 | 7 | super().__init__(n_frames=reader.n_frames, inputs=(reader,)) |
8 | | - self.cache = (None,None) |
9 | | - # Ensure inputs are numpy arrays |
10 | | - source_colors = np.array(source_colors) |
11 | | - destination_colors = np.array(destination_colors) |
| 8 | + self.map_colors = self.get_color_mapper(source_colors, destination_colors) |
12 | 9 |
|
| 10 | + @staticmethod |
| 11 | + def get_color_mapper(source_colors:np.ndarray, destination_colors:np.ndarray): |
13 | 12 | # Create a Delaunay triangulation for the source colors |
14 | | - delaunay = Delaunay(source_colors) |
15 | 13 |
|
| 14 | + source_colors = np.array(source_colors) |
| 15 | + destination_colors = np.array(destination_colors) |
| 16 | + delaunay = Delaunay(source_colors) |
16 | 17 | def map_colors(query_colors): |
17 | 18 | query_colors = np.atleast_2d(query_colors) # Ensure input is 2D |
18 | 19 |
|
19 | | - mapped_colors = np.empty((query_colors.shape[0], destination_colors.shape[1])) |
| 20 | + mapped_colors = np.empty((*query_colors.shape[:-1], destination_colors.shape[1])) |
20 | 21 | # Find simplices (triangles) for each query color |
21 | 22 | simplices = delaunay.find_simplex(query_colors) |
22 | 23 |
|
@@ -75,8 +76,7 @@ def map_colors(query_colors): |
75 | 76 | mapped_colors[inside_mask] = inside_colors |
76 | 77 |
|
77 | 78 | return mapped_colors |
78 | | - self.map_colors = map_colors |
79 | | - |
| 79 | + return map_colors |
80 | 80 |
|
81 | 81 | def read(self, index, force_type=np): |
82 | 82 | current = self.inputs[0].read(index=index, force_type=np) |
|
0 commit comments