Mercurial > repos > thomaswollmann > projective_transformation
annotate projective_transformation.py @ 0:e3e4b058db67 draft default tip
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
author | thomaswollmann |
---|---|
date | Mon, 07 Jan 2019 05:38:46 -0500 |
parents | |
children |
rev | line source |
---|---|
0
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
1 import skimage.io |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
2 from skimage.transform import ProjectiveTransform |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
3 from scipy.ndimage import map_coordinates |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
4 import numpy as np |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
5 import pandas as pd |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
6 import argparse |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
7 import warnings |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
8 import shutil |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
9 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
10 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
11 def _stackcopy(a, b): |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
12 if a.ndim == 3: |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
13 a[:] = b[:, :, np.newaxis] |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
14 else: |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
15 a[:] = b |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
16 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
17 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
18 def warp_coords_batch(coord_map, shape, dtype=np.float64, batch_size=1000000): |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
19 rows, cols = shape[0], shape[1] |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
20 coords_shape = [len(shape), rows, cols] |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
21 if len(shape) == 3: |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
22 coords_shape.append(shape[2]) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
23 coords = np.empty(coords_shape, dtype=dtype) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
24 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
25 tf_coords = np.indices((cols, rows), dtype=dtype).reshape(2, -1).T |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
26 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
27 for i in range(0, (tf_coords.shape[0]//batch_size+1)): |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
28 tf_coords[batch_size*i:batch_size*(i+1)] = coord_map(tf_coords[batch_size*i:batch_size*(i+1)]) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
29 tf_coords = tf_coords.T.reshape((-1, cols, rows)).swapaxes(1, 2) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
30 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
31 _stackcopy(coords[1, ...], tf_coords[0, ...]) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
32 _stackcopy(coords[0, ...], tf_coords[1, ...]) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
33 if len(shape) == 3: |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
34 coords[2, ...] = range(shape[2]) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
35 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
36 return coords |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
37 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
38 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
39 def transform(moving_image, fixed_image, warp_matrix, out): |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
40 moving_image = skimage.io.imread(moving_image) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
41 fixed_image = skimage.io.imread(fixed_image) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
42 warp_matrix = pd.read_csv(warp_matrix, delimiter=",", header=None) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
43 warp_matrix = np.array(warp_matrix) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
44 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
45 trans = ProjectiveTransform(matrix=warp_matrix) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
46 warped_coords = warp_coords_batch(trans, fixed_image.shape) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
47 t = map_coordinates(moving_image, warped_coords, mode='reflect') |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
48 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
49 with warnings.catch_warnings(): |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
50 warnings.simplefilter("ignore") |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
51 skimage.io.imsave(out, t) |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
52 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
53 |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
54 if __name__ == "__main__": |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
55 parser = argparse.ArgumentParser(description="Transform the image") |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
56 parser.add_argument("fixed_image", help="Paste path to image.png that should be transformed") |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
57 parser.add_argument("moving_image", help="Paste path to fixed image.png") |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
58 parser.add_argument("warp_matrix", help="Paste path to warp_matrix.csv that should be used for transformation") |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
59 parser.add_argument("out", help="Paste path to file in which transformed image should be saved") |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
60 args = parser.parse_args() |
e3e4b058db67
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tools/projective_transformation/ commit 787ebcc8daa1834214bc92c201c921c704ef2d1f
thomaswollmann
parents:
diff
changeset
|
61 transform(args.moving_image, args.fixed_image, args.warp_matrix, args.out) |