Mercurial > repos > imgteam > points2labelimage
comparison points2label.py @ 4:aef9911c0d5c draft
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/points2labelimage/ commit 78614a9010c2ca0e1fa5973639c05ab74bcdb148
| author | imgteam |
|---|---|
| date | Wed, 23 Apr 2025 14:37:42 +0000 |
| parents | de611b3b5ae8 |
| children | 4a49f74a3c14 |
comparison
equal
deleted
inserted
replaced
| 3:de611b3b5ae8 | 4:aef9911c0d5c |
|---|---|
| 31 assert len(pos_x_list) == len(radius_list) | 31 assert len(pos_x_list) == len(radius_list) |
| 32 except KeyError: | 32 except KeyError: |
| 33 radius_list = [0] * len(pos_x_list) | 33 radius_list = [0] * len(pos_x_list) |
| 34 | 34 |
| 35 try: | 35 try: |
| 36 width_column = giatools.pandas.find_column(df, ['width', 'WIDTH']) | |
| 37 height_column = giatools.pandas.find_column(df, ['height', 'HEIGHT']) | |
| 38 width_list = df[width_column] | |
| 39 height_list = df[height_column] | |
| 40 assert len(pos_x_list) == len(width_list) | |
| 41 assert len(pos_x_list) == len(height_list) | |
| 42 except KeyError: | |
| 43 width_list = [0] * len(pos_x_list) | |
| 44 height_list = [0] * len(pos_x_list) | |
| 45 | |
| 46 try: | |
| 36 label_column = giatools.pandas.find_column(df, ['label', 'LABEL']) | 47 label_column = giatools.pandas.find_column(df, ['label', 'LABEL']) |
| 37 label_list = df[label_column] | 48 label_list = df[label_column] |
| 38 assert len(pos_x_list) == len(label_list) | 49 assert len(pos_x_list) == len(label_list) |
| 39 except KeyError: | 50 except KeyError: |
| 40 label_list = list(range(1, len(pos_x_list) + 1)) | 51 label_list = list(range(1, len(pos_x_list) + 1)) |
| 43 else: | 54 else: |
| 44 df = pd.read_csv(point_file, header=None, delimiter='\t') | 55 df = pd.read_csv(point_file, header=None, delimiter='\t') |
| 45 pos_x_list = df[0].round().astype(int) | 56 pos_x_list = df[0].round().astype(int) |
| 46 pos_y_list = df[1].round().astype(int) | 57 pos_y_list = df[1].round().astype(int) |
| 47 assert len(pos_x_list) == len(pos_y_list) | 58 assert len(pos_x_list) == len(pos_y_list) |
| 48 radius_list = [0] * len(pos_x_list) | 59 radius_list, width_list, height_list = [[0] * len(pos_x_list)] * 3 |
| 49 label_list = list(range(1, len(pos_x_list) + 1)) | 60 label_list = list(range(1, len(pos_x_list) + 1)) |
| 50 | 61 |
| 51 # Optionally swap the coordinates | 62 # Optionally swap the coordinates |
| 52 if swap_xy: | 63 if swap_xy: |
| 53 pos_x_list, pos_y_list = pos_y_list, pos_x_list | 64 pos_x_list, pos_y_list = pos_y_list, pos_x_list |
| 54 | 65 |
| 55 # Perform the rasterization | 66 # Perform the rasterization |
| 56 for y, x, radius, label in zip(pos_y_list, pos_x_list, radius_list, label_list): | 67 for y, x, radius, width, height, label in zip( |
| 68 pos_y_list, pos_x_list, radius_list, width_list, height_list, label_list, | |
| 69 ): | |
| 57 if fg_value is not None: | 70 if fg_value is not None: |
| 58 label = fg_value | 71 label = fg_value |
| 59 | 72 |
| 60 if y < 0 or x < 0 or y >= shape[0] or x >= shape[1]: | 73 if y < 0 or x < 0 or y >= shape[0] or x >= shape[1]: |
| 61 raise IndexError(f'The point x={x}, y={y} exceeds the bounds of the image (width: {shape[1]}, height: {shape[0]})') | 74 raise IndexError(f'The point x={x}, y={y} exceeds the bounds of the image (width: {shape[1]}, height: {shape[0]})') |
| 62 | 75 |
| 63 # Rasterize circle and distribute overlapping image area | 76 # Rasterize circle and distribute overlapping image area |
| 64 if radius > 0: | 77 # Rasterize primitive geometry |
| 65 mask = np.ones(shape, dtype=bool) | 78 if radius > 0 or (width > 0 and height > 0): |
| 66 mask[y, x] = False | 79 |
| 67 mask = (ndi.distance_transform_edt(mask) <= radius) | 80 # Rasterize circle |
| 81 if radius > 0: | |
| 82 mask = np.ones(shape, dtype=bool) | |
| 83 mask[y, x] = False | |
| 84 mask = (ndi.distance_transform_edt(mask) <= radius) | |
| 85 else: | |
| 86 mask = np.zeros(shape, dtype=bool) | |
| 87 | |
| 88 # Rasterize rectangle | |
| 89 if width > 0 and height > 0: | |
| 90 mask[ | |
| 91 y:min(shape[0], y + width), | |
| 92 x:min(shape[1], x + height) | |
| 93 ] = True | |
| 68 | 94 |
| 69 # Compute the overlap (pretend there is none if the rasterization is binary) | 95 # Compute the overlap (pretend there is none if the rasterization is binary) |
| 70 if fg_value is None: | 96 if fg_value is None: |
| 71 overlap = np.logical_and(img > 0, mask) | 97 overlap = np.logical_and(img > 0, mask) |
| 72 else: | 98 else: |
