-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfits-debayer.py
More file actions
112 lines (78 loc) · 2.5 KB
/
fits-debayer.py
File metadata and controls
112 lines (78 loc) · 2.5 KB
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
106
107
108
109
110
111
112
# 趣味のPython学習 Project 02-11
# Python FITS DEBAYER
# ばーじょん 0.0.2
ver = "0.0.2"
from PIL import Image
import astropy.io.fits as fits
def getdata(data,a1,a2) :
return data[a2][a1]
def adj(val,mi,mx,gm,ord) :
return int(ord*(float(val-mi)/(mx-mi))**(1/gm))
def RGGB2x2(data,x,y) :
red = getdata(data,(x>>1)*2 + 0,(y>>1)*2 + 0)
gr1 = getdata(data,(x>>1)*2 + 1,(y>>1)*2 + 0)
gr2 = getdata(data,(x>>1)*2 + 0,(y>>1)*2 + 1)
blu = getdata(data,(x>>1)*2 + 1,(y>>1)*2 + 1)
grn = (float(gr1)+float(gr2))/2
return (red,grn,blu)
print(f"*** FITS DEBAYER PROGRAM VERSION:{ver} ***")
print("\nFOR SharpScan\n")
print("\nSELECT FITS FILE\n")
while len( fnm := input("file : ") ) > 0 :
try :
hdulist = fits.open(fnm)
hdu = hdulist[0]
data = hdu.data
header = hdu.header
axis = header["NAXIS"]
assert(axis==2)
col = 0
ax1 = header["NAXIS1"]
ax2 = header["NAXIS2"]
wd = ax1
ht = ax2
print(f"AX1:{ax1} AX2:{ax2}")
except FileNotFoundError:
print(f"{fnm} : not found !")
except AssertionError:
print(f"{fnm} : type error !")
else :
print(f"{fnm} : read OK !")
mi = 0xFFFFFFFF
mx = 0x00000000
av = 0
for a1 in range(ax1) :
for a2 in range(ax2) :
dt = getdata(data,a1,a2)
av = av + dt/ax1/ax2
if dt < mi :
mi = dt
if dt> mx :
mx = dt
print(f"W:{wd} H:{ht}")
print(f"MIN:{mi}")
print(f"MAX:{mx}")
print(f"AVE:{av}")
if mi > 0.0 : mi = 0.0
print("*** CONVERT MODE ***")
while True :
try :
gm = float(input("GNM :"))
if gm <= 0 : continue
break
except ValueError :
continue
# CONVERT DATA
img_cv = Image.new('RGB',(wd,ht))
for y in range(ht) :
for x in range(wd) :
dt = RGGB2x2(data,x,y)
d0 = adj(dt[0],mi,mx,gm,255)
d1 = adj(dt[1],mi,mx,gm,255)
d2 = adj(dt[2],mi,mx,gm,255)
img_cv.putpixel((x,ht-1-y),(d0,d1,d2))
fno = fnm + ".dev.png"
print(f"WRITE OUT : {fno}")
img_cv.save(fno)
print("*** DONE ***")
# END OF FILE