comparison mergeneighboursinlabelimage.py @ 2:9cbddb13fb9e draft default tip

planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/\mergeneighboursinlabelimage commit 2286a6c9da88596349ed9d967c51541409c0a7bf
author imgteam
date Mon, 13 Nov 2023 22:11:27 +0000
parents c6a6ab7c9940
children
comparison
equal deleted inserted replaced
1:c6a6ab7c9940 2:9cbddb13fb9e
1 import argparse 1 import argparse
2 import sys 2 import sys
3 import warnings
4
5 import numpy as np
6 import scipy.spatial.distance
3 import skimage.io 7 import skimage.io
4 import skimage.util 8 import skimage.util
5 from skimage.measure import regionprops 9 from skimage.measure import regionprops
6 import scipy.spatial.distance 10
7 import numpy as np
8 import warnings
9 11
10 def merge_n(img, dist=50): 12 def merge_n(img, dist=50):
11 props = regionprops(img) 13 props = regionprops(img)
12 found = False 14 found = False
13 for i in range(0, len(props)): 15 for i in range(0, len(props)):
14 i_coords = props[i].coords 16 i_coords = props[i].coords
15 for q in range(0, len(props)): 17 for q in range(0, len(props)):
16 if i==q: 18 if i == q:
17 continue 19 continue
18 q_coords = props[q].coords 20 q_coords = props[q].coords
19 iq_dist = np.min(scipy.spatial.distance.cdist(i_coords, q_coords, 'euclidean')) 21 iq_dist = np.min(scipy.spatial.distance.cdist(i_coords, q_coords, 'euclidean'))
20 if iq_dist <= dist: 22 if iq_dist <= dist:
21 props[q].label = props[i].label 23 props[q].label = props[i].label
23 img[q_coords[a_point, 0], q_coords[a_point, 1]] = props[i].label 25 img[q_coords[a_point, 0], q_coords[a_point, 1]] = props[i].label
24 found = True 26 found = True
25 if found: 27 if found:
26 merge_n(img, dist) 28 merge_n(img, dist)
27 return img 29 return img
30
28 31
29 if __name__ == "__main__": 32 if __name__ == "__main__":
30 parser = argparse.ArgumentParser() 33 parser = argparse.ArgumentParser()
31 parser.add_argument('input_file', type=argparse.FileType('r'), default=sys.stdin, help='input file') 34 parser.add_argument('input_file', type=argparse.FileType('r'), default=sys.stdin, help='input file')
32 parser.add_argument('out_file', type=argparse.FileType('w'), default=sys.stdin, help='out file (TIFF)') 35 parser.add_argument('out_file', type=argparse.FileType('w'), default=sys.stdin, help='out file (TIFF)')
41 args = parser.parse_args() 44 args = parser.parse_args()
42 45
43 label_image = skimage.io.imread(args.input_file.name) 46 label_image = skimage.io.imread(args.input_file.name)
44 label_image = merge_n(label_image, args.cluster_merge) 47 label_image = merge_n(label_image, args.cluster_merge)
45 with warnings.catch_warnings(): 48 with warnings.catch_warnings():
46 warnings.simplefilter("ignore") 49 warnings.simplefilter("ignore")
47 res = skimage.util.img_as_uint(label_image) 50 res = skimage.util.img_as_uint(label_image)
48 skimage.io.imsave(args.out_file.name, res, plugin="tifffile") 51 skimage.io.imsave(args.out_file.name, res, plugin="tifffile")