Skip to content

Commit 8f186c5

Browse files
authored
Add files via upload
1 parent 2d663eb commit 8f186c5

2 files changed

Lines changed: 255 additions & 0 deletions

File tree

fits-debayer.py

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# 趣味のPython学習 Project 02-11
2+
# Python FITS DEBAYER
3+
# ばーじょん 0.0.1
4+
5+
ver = "0.0.1"
6+
7+
from PIL import Image
8+
9+
import astropy.io.fits as fits
10+
11+
def getdata(data,a1,a2) :
12+
return data[a2][a1]
13+
14+
def adj(val,mi,mx,gm,ord) :
15+
return int(ord*(float(val-mi)/(mx-mi))**(1/gm))
16+
17+
def RGGB2x2(data,x,y) :
18+
19+
red = getdata(data,(x>>1)*2 + 0,(y>>1)*2 + 0)
20+
gr1 = getdata(data,(x>>1)*2 + 1,(y>>1)*2 + 0)
21+
gr2 = getdata(data,(x>>1)*2 + 0,(y>>1)*2 + 1)
22+
blu = getdata(data,(x>>1)*2 + 1,(y>>1)*2 + 1)
23+
24+
grn = (gr1+gr2)/2
25+
26+
return (red,grn,blu)
27+
28+
print(f"*** FITS DEBAYER PROGRAM VERSION:{ver} ***")
29+
print("\nFOR SharpScan\n")
30+
print("\nSELECT FITS FILE\n")
31+
while len( fnm := input("file : ") ) > 0 :
32+
33+
try :
34+
35+
hdulist = fits.open(fnm)
36+
37+
hdu = hdulist[0]
38+
data = hdu.data
39+
header = hdu.header
40+
41+
axis = header["NAXIS"]
42+
43+
assert(axis==2)
44+
45+
col = 0
46+
47+
ax1 = header["NAXIS1"]
48+
ax2 = header["NAXIS2"]
49+
50+
wd = ax1
51+
ht = ax2
52+
53+
print(f"AX1:{ax1} AX2:{ax2}")
54+
55+
except FileNotFoundError:
56+
print(f"{fnm} : not found !")
57+
58+
except AssertionError:
59+
print(f"{fnm} : type error !")
60+
61+
else :
62+
63+
print(f"{fnm} : read OK !")
64+
65+
mi = 0xFFFFFFFF
66+
mx = 0x00000000
67+
av = 0
68+
69+
for a1 in range(ax1) :
70+
for a2 in range(ax2) :
71+
dt = getdata(data,a1,a2)
72+
av = av + dt
73+
if dt < mi :
74+
mi = dt
75+
if dt> mx :
76+
mx = dt
77+
78+
av = av/ax1/ax2
79+
80+
print(f"W:{wd} H:{ht}")
81+
print(f"MIN:{mi}")
82+
print(f"MAX:{mx}")
83+
print(f"AVE:{av}")
84+
85+
print("*** CONVERT MODE ***")
86+
87+
while True :
88+
try :
89+
gm = float(input("GNM :"))
90+
if gm <= 0 : continue
91+
break
92+
except ValueError :
93+
continue
94+
95+
# CONVERT DATA
96+
img_cv = Image.new('RGB',(wd,ht))
97+
98+
for y in range(ht) :
99+
for x in range(wd) :
100+
dt = RGGB2x2(data,x,y)
101+
d0 = adj(dt[0],mi,mx,gm,255)
102+
d1 = adj(dt[1],mi,mx,gm,255)
103+
d2 = adj(dt[2],mi,mx,gm,255)
104+
img_cv.putpixel((x,ht-1-y),(d0,d1,d2))
105+
106+
fno = fnm + ".dev.png"
107+
print(f"WRITE OUT : {fno}")
108+
img_cv.save(fno)
109+
110+
print("*** DONE ***")
111+
112+
# END OF FILE

fits-decorder.py

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
# 趣味のPython学習 Project 02-10
2+
# Python FITS DECODER
3+
# ばーじょん 0.0.1
4+
5+
ver = "0.0.1"
6+
7+
from PIL import Image
8+
9+
import astropy.io.fits as fits
10+
11+
def getdata(data,a1,a2,a3,axis) :
12+
if axis == 2 :
13+
return data[a2][a1]
14+
return data[a3][a2][a1]
15+
16+
def adj(val,mi,mx,gm,ord) :
17+
return int(ord*(float(val-mi)/(mx-mi))**(1/gm))
18+
19+
print(f"*** FITS DECODE PROGRAM VERSION:{ver} ***")
20+
print("\nSELECT FITS FILE\n")
21+
while len( fnm := input("file : ") ) > 0 :
22+
23+
try :
24+
25+
hdulist = fits.open(fnm)
26+
27+
hdu = hdulist[0]
28+
data = hdu.data
29+
header = hdu.header
30+
31+
axis = header["NAXIS"]
32+
33+
assert(axis>=2)
34+
35+
col = 0
36+
37+
if axis==2 :
38+
39+
ax1 = header["NAXIS1"]
40+
ax2 = header["NAXIS2"]
41+
ax3 = 1
42+
43+
wd = ax1
44+
ht = ax2
45+
46+
if axis==3 :
47+
48+
ax1 = header["NAXIS1"]
49+
ax2 = header["NAXIS2"]
50+
ax3 = header["NAXIS3"]
51+
52+
if ax1 == 3 :
53+
col = 1
54+
wd = ax2
55+
ht = ax3
56+
if ax2 == 3 :
57+
col = 2
58+
wd = ax1
59+
ht = ax3
60+
if ax3 == 3 :
61+
col = 3
62+
wd = ax1
63+
ht = ax2
64+
65+
assert(col>0)
66+
assert(axis<=3)
67+
68+
print(f"AX1:{ax1} AX2:{ax2} AX3:{ax3}")
69+
70+
except FileNotFoundError:
71+
print(f"{fnm} : not found !")
72+
73+
except AssertionError:
74+
print(f"{fnm} : type error !")
75+
76+
else :
77+
78+
print(f"{fnm} : read OK !")
79+
80+
mi = 0xFFFFFFFF
81+
mx = 0x00000000
82+
av = 0
83+
84+
for a1 in range(ax1) :
85+
for a2 in range(ax2) :
86+
for a3 in range(ax3) :
87+
dt = getdata(data,a1,a2,a3,axis)
88+
av = av + dt
89+
if dt < mi :
90+
mi = dt
91+
if dt> mx :
92+
mx = dt
93+
94+
av = av/ax1/ax2/ax3
95+
96+
97+
print(f"W:{wd} H:{ht}")
98+
print(f"MIN:{mi}")
99+
print(f"MAX:{mx}")
100+
print(f"AVE:{av}")
101+
102+
print("*** CONVERT MODE ***")
103+
104+
while True :
105+
try :
106+
gm = float(input("GNM :"))
107+
if gm <= 0 : continue
108+
break
109+
except ValueError :
110+
continue
111+
112+
# CONVERT DATA
113+
if axis==2 : img_cv = Image.new('L',(wd,ht))
114+
if axis==3 : img_cv = Image.new('RGB',(wd,ht))
115+
116+
for y in range(ht) :
117+
for x in range(wd) :
118+
if col == 0 :
119+
dt = adj(getdata(data,x,y,0,2),mi,mx,gm,255)
120+
img_cv.putpixel((x,ht-1-y),dt)
121+
if col == 1 :
122+
d0 = adj(getdata(data,0,x,y,3),mi,mx,gm,255)
123+
d1 = adj(getdata(data,1,x,y,3),mi,mx,gm,255)
124+
d2 = adj(getdata(data,2,x,y,3),mi,mx,gm,255)
125+
img_cv.putpixel((x,ht-1-y),(d0,d1,d2))
126+
if col == 2 :
127+
d0 = adj(getdata(data,x,0,y,3),mi,mx,gm,255)
128+
d1 = adj(getdata(data,x,1,y,3),mi,mx,gm,255)
129+
d2 = adj(getdata(data,x,2,y,3),mi,mx,gm,255)
130+
img_cv.putpixel((x,ht-1-y),(d0,d1,d2))
131+
if col == 3 :
132+
d0 = adj(getdata(data,x,y,0,3),mi,mx,gm,255)
133+
d1 = adj(getdata(data,x,y,1,3),mi,mx,gm,255)
134+
d2 = adj(getdata(data,x,y,2,3),mi,mx,gm,255)
135+
img_cv.putpixel((x,ht-1-y),(d0,d1,d2))
136+
137+
fno = fnm + ".dcd.png"
138+
print(f"WRITE OUT : {fno}")
139+
img_cv.save(fno)
140+
141+
print("*** DONE ***")
142+
143+
# END OF FILE

0 commit comments

Comments
 (0)