Mercurial > repos > imgteam > superdsm
comparison run-superdsm.py @ 3:7fd8dba15bd3 draft
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/superdsm/ commit fea6c8161c4b3e6394fe035b12b69b73e6fa7d75
author | imgteam |
---|---|
date | Thu, 16 Nov 2023 12:29:41 +0000 |
parents | 244f67290d28 |
children | dc5f72f6b1e9 |
comparison
equal
deleted
inserted
replaced
2:244f67290d28 | 3:7fd8dba15bd3 |
---|---|
5 See file LICENSE for detail or copy at https://opensource.org/licenses/MIT | 5 See file LICENSE for detail or copy at https://opensource.org/licenses/MIT |
6 | 6 |
7 """ | 7 """ |
8 | 8 |
9 import argparse | 9 import argparse |
10 import csv | |
10 import imghdr | 11 import imghdr |
11 import os | 12 import os |
12 import pathlib | 13 import pathlib |
13 import shutil | 14 import shutil |
14 import tempfile | 15 import tempfile |
43 if value is not None: | 44 if value is not None: |
44 cfg[key] = value | 45 cfg[key] = value |
45 return cfg | 46 return cfg |
46 | 47 |
47 | 48 |
49 def flatten_dict(d, sep='/'): | |
50 result = {} | |
51 for key, val in d.items(): | |
52 if isinstance(val, dict): | |
53 for sub_key, sub_val in flatten_dict(val, sep=sep).items(): | |
54 result[f'{key}{sep}{sub_key}'] = sub_val | |
55 else: | |
56 result[key] = val | |
57 return result | |
58 | |
59 | |
48 if __name__ == "__main__": | 60 if __name__ == "__main__": |
49 parser = argparse.ArgumentParser(description='Segmentation of cell nuclei in 2-D fluorescence microscopy images') | 61 parser = argparse.ArgumentParser(description='Segmentation of cell nuclei in 2-D fluorescence microscopy images') |
50 parser.add_argument('image', help='Path to the input image') | 62 parser.add_argument('image', type=str, help='Path to the input image') |
51 parser.add_argument('cfg', help='Path to the file containing the configuration') | |
52 parser.add_argument('masks', help='Path to the file containing the segmentation masks') | |
53 parser.add_argument('overlay', help='Path to the file containing the overlay of the segmentation results') | |
54 parser.add_argument('seg_border', type=int) | |
55 parser.add_argument('slots', type=int) | 63 parser.add_argument('slots', type=int) |
64 parser.add_argument('--do-masks', type=str, default=None, help='Path to the file containing the segmentation masks') | |
65 parser.add_argument('--do-cfg', type=str, default=None, help='Path to the file containing the configuration') | |
66 parser.add_argument('--do-overlay', type=str, default=None, help='Path to the file containing the overlay of the segmentation results') | |
67 parser.add_argument('--do-overlay-border', type=int) | |
56 for key, ptype in hyperparameters: | 68 for key, ptype in hyperparameters: |
57 parser.add_argument('--' + get_param_name(key), type=ptype, default=None) | 69 parser.add_argument('--' + get_param_name(key), type=ptype, default=None) |
58 args = parser.parse_args() | 70 args = parser.parse_args() |
59 | 71 |
60 if args.slots >= 2: | 72 if args.slots >= 2: |
81 shutil.copy(str(args.image), img_filepath) | 93 shutil.copy(str(args.image), img_filepath) |
82 | 94 |
83 pipeline = superdsm.pipeline.create_default_pipeline() | 95 pipeline = superdsm.pipeline.create_default_pipeline() |
84 cfg = create_config(args) | 96 cfg = create_config(args) |
85 img = superdsm.io.imread(img_filepath) | 97 img = superdsm.io.imread(img_filepath) |
86 data, cfg, _ = superdsm.automation.process_image(pipeline, cfg, img) | |
87 | 98 |
88 with open(args.cfg, 'w') as fp: | 99 if args.do_cfg: |
89 cfg.dump_json(fp) | 100 print(f'Writing config to: {args.do_cfg}') |
101 cfg, _ = superdsm.automation.create_config(pipeline, cfg, img) | |
102 with open(args.do_cfg, 'w') as fp: | |
103 tsv_out = csv.writer(fp, delimiter='\t') | |
104 tsv_out.writerow(['Hyperparameter', 'Value']) | |
105 for key, value in flatten_dict(cfg.entries).items(): | |
106 tsv_out.writerow([key, value]) | |
90 | 107 |
91 overlay = superdsm.render.render_result_over_image(data, border_width=args.seg_border, normalize_img=False) | 108 if args.do_overlay or args.do_masks: |
92 superdsm.io.imwrite(args.overlay, overlay) | 109 print('Performing segmentation') |
110 data, cfg, _ = pipeline.process_image(img, cfg) | |
93 | 111 |
94 masks = superdsm.render.rasterize_labels(data) | 112 if args.do_overlay: |
95 superdsm.io.imwrite(args.masks, masks) | 113 print(f'Writing overlay to: {args.do_overlay}') |
114 overlay = superdsm.render.render_result_over_image(data, border_width=args.do_overlay_border, normalize_img=False) | |
115 superdsm.io.imwrite(args.do_overlay, overlay) | |
116 | |
117 if args.do_masks: | |
118 print(f'Writing masks to: {args.do_masks}') | |
119 masks = superdsm.render.rasterize_labels(data) | |
120 superdsm.io.imwrite(args.do_masks, masks) |