-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmultiply_imgs.py
executable file
·106 lines (88 loc) · 2.78 KB
/
multiply_imgs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import numpy as np
import argparse
import imageio
from skimage.color import rgb2gray
from myImageToolset import normalize_img, imreg
# from os import getcwd
import pystripe as stripe
from detrend2d import subtract_plane
import parseSTM as ps
from skimage.exposure import rescale_intensity
def _parseargs():
parser = argparse.ArgumentParser(
description="Multiply STM buffers\n\n",
epilog="Developed by Huy Nguyen, Gruebele-Lyding Groups\n"
"University of Illinois at Urbana-Champaign\n",
)
parser.add_argument(
"input", nargs="*", type=str, help="[STM File 1 STM File 2 ...]."
)
parser.add_argument(
"--buffers",
"-b",
help="Buffers to multiply",
nargs="*",
type=int,
required=True,
)
parser.add_argument(
"--secondarySet",
"-a",
action="store_true",
help="Use topo set to register images",
)
parser.add_argument(
"--textout",
"-t",
action="store_true",
help="Output a text file for the mult data (helpful for reusing it in other script)",
)
args = parser.parse_args()
return args
def read_img(path, buf):
stmfile = ps.STMfile(path)
return stmfile.get_height_buffers([buf])[buf]
def get_bufset(paths, bufs):
out = {}
for buf in bufs:
out[buf] = [read_img(path, buf) for path in paths]
return out
def img_process(img):
# Will return a 16-bit image
img = stripe.filter_streaks(img, sigma=[10, 20], level=2, wavelet="db3")
return img
def img_post_process(img):
img = rescale_intensity(
img, in_range=(np.percentile(img, 0.3), np.percentile(img, 99.7))
)
return img
def mult_img(imset, secondarySet=None, returnText=False):
if secondarySet is not None:
imset = imreg(imset, secondarySet=secondarySet, upsample_factor=100)
else:
imset = imreg(imset, upsample_factor=100)
mult = np.ones_like(imset[0], dtype="float")
for im in imset:
mult *= im
if not returnText:
mult = normalize_img(mult, 0, 2 ** 16 - 1).astype("uint16")
return mult
def main():
# cwd = getcwd()
args = _parseargs()
bufset = get_bufset(args.input, args.buffers)
topos = get_bufset(args.input, [1])[1]
topos = [img_process(img) for img in topos]
for buf in args.buffers:
imset = bufset[buf]
if args.secondarySet:
mult = mult_img(imset, secondarySet=topos, returnText=args.textout)
else:
mult = mult_img(imset, returnText=args.textout)
if not args.textout:
mult = img_post_process(mult)
imageio.imwrite(f"./mult_buf{buf}.tiff", mult)
else:
np.savetxt(f"./mult_buf{buf}.txt", mult, delimiter=",")
if __name__ == "__main__":
main()