-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfits-decorder.py
142 lines (107 loc) · 3.71 KB
/
fits-decorder.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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# 趣味のPython学習 Project 02-10
# Python FITS DECODER
# ばーじょん 0.0.2
ver = "0.0.2"
from PIL import Image
import astropy.io.fits as fits
def getdata(data,a1,a2,a3,axis) :
if axis == 2 :
return data[a2][a1]
return data[a3][a2][a1]
def adj(val,mi,mx,gm,ord) :
return int(ord*(float(val-mi)/(mx-mi))**(1/gm))
print(f"*** FITS DECODE PROGRAM VERSION:{ver} ***")
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
if axis==2 :
ax1 = header["NAXIS1"]
ax2 = header["NAXIS2"]
ax3 = 1
wd = ax1
ht = ax2
if axis==3 :
ax1 = header["NAXIS1"]
ax2 = header["NAXIS2"]
ax3 = header["NAXIS3"]
if ax1 == 3 :
col = 1
wd = ax2
ht = ax3
if ax2 == 3 :
col = 2
wd = ax1
ht = ax3
if ax3 == 3 :
col = 3
wd = ax1
ht = ax2
assert(col>0)
assert(axis<=3)
print(f"AX1:{ax1} AX2:{ax2} AX3:{ax3}")
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) :
for a3 in range(ax3) :
dt = getdata(data,a1,a2,a3,axis)
av = av + dt/ax1/ax2/ax3
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
if axis==2 : img_cv = Image.new('L',(wd,ht))
if axis==3 : img_cv = Image.new('RGB',(wd,ht))
for y in range(ht) :
for x in range(wd) :
if col == 0 :
dt = adj(getdata(data,x,y,0,2),mi,mx,gm,255)
img_cv.putpixel((x,ht-1-y),dt)
if col == 1 :
d0 = adj(getdata(data,0,x,y,3),mi,mx,gm,255)
d1 = adj(getdata(data,1,x,y,3),mi,mx,gm,255)
d2 = adj(getdata(data,2,x,y,3),mi,mx,gm,255)
img_cv.putpixel((x,ht-1-y),(d0,d1,d2))
if col == 2 :
d0 = adj(getdata(data,x,0,y,3),mi,mx,gm,255)
d1 = adj(getdata(data,x,1,y,3),mi,mx,gm,255)
d2 = adj(getdata(data,x,2,y,3),mi,mx,gm,255)
img_cv.putpixel((x,ht-1-y),(d0,d1,d2))
if col == 3 :
d0 = adj(getdata(data,x,y,0,3),mi,mx,gm,255)
d1 = adj(getdata(data,x,y,1,3),mi,mx,gm,255)
d2 = adj(getdata(data,x,y,2,3),mi,mx,gm,255)
img_cv.putpixel((x,ht-1-y),(d0,d1,d2))
fno = fnm + ".dcd.png"
print(f"WRITE OUT : {fno}")
img_cv.save(fno)
print("*** DONE ***")
# END OF FILE