Fix slice mask auto orientation

This commit is contained in:
KunLnn
2026-05-09 05:35:11 +08:00
parent ca6bb35012
commit 1023136cb0
2 changed files with 9 additions and 4 deletions
+2 -2
View File
@@ -66,14 +66,14 @@ Inputs:
- `min_area_ratio`: Removes tiny disconnected components before grouping and matching, with `0.01` step precision. Default is `0.01`; `0.0` disables filtering. Values are relative to the largest disconnected component in the same input group, so `0.02` removes components smaller than 2% of that largest component's foreground area.
- `rows`: Number of equal-height bbox grid rows. Default is `4`.
- `columns`: Number of equal-width bbox grid columns. Default is `1`.
- `auto_match_orientation`: Automatically swaps `rows` and `columns` for horizontal `mask1` product bboxes. Default is enabled.
- `auto_match_orientation`: Automatically makes the longer split direction follow the longer side of the `mask1` product bbox. Default is enabled.
Outputs:
- `mask1`: First sliced/grouped mask batch.
- `mask2`: Second mask batch aligned to `mask1`. When only one input is connected, this is an empty placeholder batch.
The node splits disconnected painted islands internally, removes components below `min_area_ratio`, unions the remaining regions into one product mask, and slices that product bbox into a row-major grid: top to bottom, left to right. When `auto_match_orientation` is enabled, `rows=4, columns=1` stays 4x1 for vertical products and becomes 1x4 for horizontal products. In `mask` mode, empty `mask1` cells are skipped and `mask2` keeps the same remaining cell positions. In `bbox` mode, the full `rows × columns` rectangular grid is preserved. Use multiple rows and columns for two-dimensional local regions.
The node splits disconnected painted islands internally, removes components below `min_area_ratio`, unions the remaining regions into one product mask, and slices that product bbox into a row-major grid: top to bottom, left to right. When `auto_match_orientation` is enabled, the larger of `rows` and `columns` follows the longer side of the product bbox: `rows=4, columns=1` stays 4x1 for vertical products and becomes 1x4 for horizontal products, while `rows=1, columns=3` becomes 3x1 for vertical products and stays 1x3 for horizontal products. In `mask` mode, empty `mask1` cells are skipped and `mask2` keeps the same remaining cell positions. In `bbox` mode, the full `rows × columns` rectangular grid is preserved. Use multiple rows and columns for two-dimensional local regions.
### RefineNode Match Product Angle
+7 -2
View File
@@ -522,8 +522,13 @@ def slice_masks_by_product_bbox(
if mask1_bbox is None:
return ([Image.new("L", mask1_size, 0)], [Image.new("L", mask2_size, 0)])
if auto_match_orientation and (mask1_bbox[2] - mask1_bbox[0]) > (mask1_bbox[3] - mask1_bbox[1]):
rows, columns = columns, rows
if auto_match_orientation and rows != columns:
long_count = max(rows, columns)
short_count = min(rows, columns)
if (mask1_bbox[2] - mask1_bbox[0]) > (mask1_bbox[3] - mask1_bbox[1]):
rows, columns = short_count, long_count
else:
rows, columns = long_count, short_count
cells = normalized_grid_cells(rows, columns)