-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproc_flat3
executable file
·102 lines (77 loc) · 2.72 KB
/
proc_flat3
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
#!/usr/bin/env python3
'''
samples.
'''
import sys
import numpy as np
import cv2
import tifffile
import argparse
from astro_utils import sigma_clip, imgread
from astropy.io import fits
parser = argparse.ArgumentParser()
parser.add_argument("outfile",
help="output tiff file")
parser.add_argument("flat", nargs='+',
help="input low-pass flat")
parser.add_argument("--darkframe",
help="input darkframe")
parser.add_argument("--apply_darkframe", action='store_true', default=False)
parser.add_argument("--preblur", type=int, default=5,
help="preprocess blur size")
parser.add_argument("--blur", type=int, default=200,
help="blur size")
parser.add_argument("--lowmask", type=int, default=4,
help="lowmask iterations")
parser.add_argument("--mono", action='store_true', default=False)
args = parser.parse_args()
def flat_coef(img_b):
return ( np.average(img_b[0::2, 0::2]),
(np.average(img_b[1::2, 0::2]) + np.average(img_b[0::2, 1::2])) / 2,
np.average(img_b[1::2, 1::2]))
darkframe_avg = 0
if args.darkframe:
darkframe = imgread(args.darkframe)[0]
darkframe = np.atleast_3d(darkframe)[:, :, 0]
darkframe_avg = np.median(darkframe)
print("darkframe_avg: ", darkframe_avg)
scale = 0.0
imgs = None
for i, flat in enumerate(args.flat):
img_b = imgread(flat)[0]
if args.darkframe and args.apply_darkframe:
img_b = cv2.subtract(img_b, darkframe)
else:
img_b = cv2.subtract(img_b, darkframe_avg)
img_float = np.array(img_b, dtype=np.float)
if args.mono:
scale1 = np.median(img_float)
print("scale1: ", scale1)
scale = max(scale, scale1)
img_float /= scale1
else:
scale_rgb = flat_coef(img_float)
print("scale_rgb: ", scale_rgb)
scale = max(scale, *scale_rgb)
img_float[0::2, 0::2] = img_float[0::2, 0::2] / scale_rgb[0]
img_float[1::2, 0::2] = img_float[1::2, 0::2] / scale_rgb[1]
img_float[0::2, 1::2] = img_float[0::2, 1::2] / scale_rgb[1]
img_float[1::2, 1::2] = img_float[1::2, 1::2] / scale_rgb[2]
if imgs is None:
imgs = np.empty((len(args.flat), img_float.shape[0], img_float.shape[1]), dtype=np.float)
imgs[i] = img_float
scale *= 0.9
print("scale: ", scale)
imgs *= scale
#avg = np.median(imgs, axis = 0, overwrite_input=True)
#avg = np.mean(imgs, axis = 0)
avg, num, outsigma = sigma_clip(imgs)
avg = cv2.add(avg, darkframe_avg, dtype=cv2.CV_16UC1)
if args.outfile.endswith('.fits'):
hdulist = fits.open(args.flat[0])
hdulist[0].data = avg
hdulist.writeto(args.outfile, overwrite=True)
sys.exit(0)
tifffile.imsave(args.outfile, avg)
avg = cv2.normalize(avg, avg, alpha = 0, beta = 255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)
tifffile.imsave("test.tif", avg)