comparison mergeneighboursinlabelimage.py @ 0:66f7e94db2e6 draft

planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/\mergeneighboursinlabelimage commit d0759a055484abd42bba38b2fa46f2a7b8f96259
author thomaswollmann
date Tue, 08 Jan 2019 08:54:16 -0500
parents
children 3536648d0a93
comparison
equal deleted inserted replaced
-1:000000000000 0:66f7e94db2e6
1 #!/usr/bin/python
2
3 import argparse
4 import sys
5 import skimage.io
6 import skimage.util
7 from skimage.measure import regionprops
8 import scipy.spatial.distance
9 import numpy as np
10 import warnings
11
12 def merge_n(img, dist=50):
13 props = regionprops(img)
14 found = False
15 for i in range(0, len(props)):
16 i_coords = props[i].coords
17 for q in range(0, len(props)):
18 if i==q:
19 continue
20 q_coords = props[q].coords
21 iq_dist = np.min(scipy.spatial.distance.cdist(i_coords, q_coords, 'euclidean'))
22 if iq_dist <= dist:
23 props[q].label = props[i].label
24 for a_point in range(0, q_coords.shape[0]):
25 img[q_coords[a_point, 0], q_coords[a_point, 1]] = props[i].label
26 found = True
27 if found:
28 merge_n(img, dist)
29 return img
30
31 if __name__ == "__main__":
32 parser = argparse.ArgumentParser()
33 parser.add_argument('input_file', type=argparse.FileType('r'), default=sys.stdin, help='input file')
34 parser.add_argument('out_file', type=argparse.FileType('w'), default=sys.stdin, help='out file (TIFF)')
35 parser.add_argument(
36 '-c',
37 dest='cluster_merge',
38 type=int,
39 required=False,
40 default=50,
41 help='Distance in pixel of clusters which are merged',
42 )
43 args = parser.parse_args()
44
45 label_image = skimage.io.imread(args.input_file.name)
46 label_image = merge_n(label_image, args.cluster_merge)
47 with warnings.catch_warnings():
48 warnings.simplefilter("ignore")
49 res = skimage.util.img_as_uint(res)
50 skimage.io.imsave("tmp.tiff", res)
51 os.rename("tmp.tiff", args.output_file.name)