|
13 | 13 | import dask |
14 | 14 | import datashader as ds |
15 | 15 | import matplotlib |
16 | | -import matplotlib.colors as mcolors |
17 | 16 | import matplotlib.patches as mpatches |
18 | 17 | import matplotlib.path as mpath |
19 | 18 | import matplotlib.pyplot as plt |
@@ -1210,35 +1209,14 @@ def _map_color_seg( |
1210 | 1209 | ) |
1211 | 1210 |
|
1212 | 1211 | if seg_boundaries: |
1213 | | - if seg.shape[0] == 1: |
1214 | | - seg = np.squeeze(seg, axis=0) |
1215 | | - |
1216 | | - # Binary boundary mask |
1217 | | - boundary_mask = seg.astype(bool) |
1218 | | - |
1219 | | - # Ensure seg_im is float in 0-1 and has 3 channels |
1220 | | - seg_float = seg_im.astype(float) |
1221 | | - if seg_float.ndim == 2: |
1222 | | - seg_float = np.stack([seg_float] * 3, axis=-1) # H x W x 3 |
1223 | | - |
1224 | | - # Add alpha channel from val_im (preserve original mask) |
1225 | | - alpha_channel = (val_im > 0).astype(float) |
1226 | | - seg_float = np.dstack((seg_float, alpha_channel)) # H x W x 4 |
1227 | | - |
1228 | | - # Convert outline_color to RGBA |
1229 | | - if outline_color is None: |
1230 | | - outline_rgba = (0, 0, 0, 1.0) # default black |
1231 | | - elif isinstance(outline_color, str): |
1232 | | - outline_rgba = mcolors.to_rgba(outline_color) # named color or hex string |
1233 | | - else: |
1234 | | - # assume it's your Color object |
1235 | | - outline_rgba = mcolors.to_rgba(outline_color.get_hex_with_alpha()) |
1236 | | - |
1237 | | - # Apply outline color to boundary pixels, but keep original alpha from val_im |
1238 | | - seg_float[boundary_mask, :3] = outline_rgba[:3] # RGB |
1239 | | - seg_float[boundary_mask, 3] = alpha_channel[boundary_mask] * outline_rgba[3] # scale alpha |
| 1212 | + outline_rgba = colors.to_rgba(outline_color.get_hex_with_alpha() if outline_color is not None else "black") |
1240 | 1213 |
|
1241 | | - return seg_float # H x W x 4, valid RGBA |
| 1214 | + # Build RGBA image: outline_color on the eroded ring, transparent elsewhere |
| 1215 | + outline_mask = val_im > 0 |
| 1216 | + rgba = np.zeros((*val_im.shape, 4), dtype=float) |
| 1217 | + rgba[outline_mask, :3] = outline_rgba[:3] |
| 1218 | + rgba[outline_mask, 3] = outline_rgba[3] |
| 1219 | + return rgba |
1242 | 1220 |
|
1243 | 1221 | if len(val_im.shape) != len(seg_im.shape): |
1244 | 1222 | val_im = np.expand_dims((val_im > 0).astype(int), axis=-1) |
@@ -2463,7 +2441,7 @@ def _validate_label_render_params( |
2463 | 2441 | na_color: ColorLike | None, |
2464 | 2442 | norm: Normalize | None, |
2465 | 2443 | outline_alpha: float | int, |
2466 | | - outline_color: ColorLike | tuple[ColorLike] | None, |
| 2444 | + outline_color: ColorLike | None, |
2467 | 2445 | scale: str | None, |
2468 | 2446 | table_name: str | None, |
2469 | 2447 | table_layer: str | None, |
|
0 commit comments