步骤 1: 访问 SDSS 数据查询工具
- 打开 SDSS SkyServer 网站:https://skyserver.sdss.org/
- 在主页上点击 “Explore the SDSS Database” 或者 “Tools” 部分下的 “SQL Search”
- 本文尝试“Tools” 部分下的 “SQL Search”
步骤 2: 使用 SQL 查询工具
SDSS 提供了一个强大的 SQL 查询工具来查询数据库中的天文数据。你可以通过编写 SQL 查询来选择感兴趣的天体并导出相应的数据(如赤经和赤纬)。
-
在 SQL Search 页中,选择你要查询的 数据表。SDSS 提供多个数据表,常用的表包括:
PhotoObj
:包含关于天体的位置、光度等信息。SpecObj
:包含关于光谱数据的信息。
-
输入你的 SQL 查询语句。例如,如果你想获取某个区域(由赤经
ra
和赤纬dec
定义)的所有天体数据,你可以使用类似下面的 SQL 查询:
步骤 3: 检查和处理 CSV 文件
下载 CSV 文件后,你会得到包含你查询的天体数据的表格。一般来说,这些 CSV 文件包含多个字段,比如:
ra
: 赤经dec
: 赤纬- 其他光度数据或其他天文参数
1. CSV 文件转化为 TXT 格式
首先,你需要从CSV文件中提取 ra
和 dec
两列,并将它们保存为TXT文件,以便上传到网站。你可以使用一个Python脚本(ra_dec_format.py
)来实现这个任务。
生成的csv文件里面#Table要删除掉,不然在转换的时候会报错
Python脚本:ra_dec_format.py
import numpy as np
import pandas as pd
np.set_printoptions(suppress=True)
# 读取数据
data = pd.read_csv(rf'data.csv')
print(data.head()) # 打印前几行,确保数据已经加载
# 转换为 numpy 数组
data = np.array(data)
ra_dec = []
for line in data:
# 检查并打印每行数据
print(line) # 调试打印
ra = line[1]
dec = line[2]
ra_dec.append(str(ra).ljust(19))
ra_dec.append(str(dec).ljust(24))
# 将 ra_dec 转换为 numpy 数组并调整形状
ra_dec = np.array(ra_dec).reshape(-1, 2)
# 使用 with 语句确保文件正确关闭
with open(rf'data.txt', 'w') as file:
file.write('| ra | dec |\n'
'| double | double |\n')
for line in ra_dec:
file.write(f' {line[0]} {line[1]}\n')
print("数据已经成功写入到 data.txt 文件。")
2. 下载 WISE 红外图像数据
上传转换后的 data.txt
文件到指定网站(WISE网站:IRSA ),根据网站提供的搜索界面,选择合适的设置(将600改为50),然后点击搜索。然后批量下载相关的图像数据。解压下载的文件并确保它们能被后续处理程序识别。
注意事项:
- 确保文件路径中没有特殊字符或空格,避免程序出错。
- 确保下载的图像数据文件格式正确(例如FITS文件)。
3. 三个程序的处理流程
根据你的描述,下载的文件需要通过以下三个程序来处理:
- 红外数据处理 (
红外数据处理.py
) - 红外数据整合 (
红外数据整合.py
) - RGB图像合成 (
rgb图像合成.py
)
3.1 红外数据处理 (红外数据处理.py
)
这是第一个处理步骤,通常用于对下载的红外图像进行初步的处理,比如去除噪声、标准化图像、裁剪等。你需要确保在这个脚本中正确设置文件路径,以便读取和写入数据。
示例代码:
import os
from astropy.io import fits
import numpy as np
path1 = r"3a_Files-part1/L3a"
save_path = r'3a_Files-part1/L3a/处理/'
# 确保目标目录存在
if not os.path.exists(save_path):
os.makedirs(save_path)
files = os.listdir(path1)
for file in files:
file_path = os.path.join(path1, file)
print(file)
hyfiles = os.listdir(file_path)
for hyfile in hyfiles:
# 尝试按 - 分割,并确保长度足够
split_hyfile = hyfile.split('-', 3)
if len(split_hyfile) < 2:
print(f"Skipping file (invalid format): {hyfile}")
continue # 如果格式不正确,则跳过该文件
w = split_hyfile[1] # 取第二部分
# 安全地处理 ra 和 dec,避免超出索引
try:
ra1 = float((hyfile.split('_', 4)[2])[2:])
ra1 = round(ra1, 7)
ra1 = str(ra1)
dec1 = float((hyfile.split('_', 5)[3])[3:])
dec1 = round(dec1, 7)
dec1 = str(dec1)
except IndexError:
print(f"Skipping file due to incorrect RA/DEC format: {hyfile}")
continue # 如果格式不对,跳过该文件
# 打开文件并处理数据
hyfile_path = os.path.join(file_path, hyfile)
data1 = fits.open(hyfile_path)
data = data1[0].data
# 构造保存文件路径
save_file_name = f'{ra1}_{dec1}_{w}_.npy'
save_file_path = os.path.join(save_path, save_file_name)
# 保存数据
np.save(save_file_path, data)
print(f'Saved: {save_file_path}')
3.2 红外数据整合 (红外数据整合.py
)
这一步通常是将多个处理后的图像文件合并到一起,可能需要将多个图像拼接成一个大的图像或者生成一个数据集。
示例代码:
import numpy as np
import os
path = r'3a_Files-part1/L3a/处理/'
files = os.listdir(path)
# print(files)
for file in files:
ra = file.split('_', 3)[0]
dec = file.split('_', 3)[1]
datas = []
for w in ['w1', 'w2', 'w3', 'w4']:
data_name = ra + '_' + dec + '_' + w + '_' + '.npy'
file_path = os.path.join(path, data_name)
print(file_path)
data1 = np.load(file_path)
# print(data1.shape)
# data2=np.resize(data1,(74,74))
# print(data2.shape)
datas.append(data1)
# print('________')
datas = np.array(datas)
# print(datas.shape)
np.save(r'3a_Files-part1/L3a/整合/' + ra + '_' + dec + '.npy', datas)
3.3 RGB图像合成 (rgb图像合成.py
)
这个程序的目的是将处理好的红外图像合成一个RGB图像,可能是通过将不同波段的数据映射到RGB颜色通道上。
示例代码:
import os
import glob
from astropy.visualization import make_lupton_rgb
from astropy.io import fits
from astropy.utils.data import get_pkg_data_filename
import numpy as np
from astropy.wcs import WCS
from tqdm import tqdm
import pandas as pd
def noramlization(data):
minVals = data.min()
maxVals = data.max()
ranges = maxVals - minVals
normData = np.zeros(np.shape(data))
m = data.shape[0]
normData = data - np.tile(minVals, (m, 1))
normData = normData / np.tile(ranges, (m, 1))
return normData
path = r'3a_Files-part1/L3a/整合/'
files_name = os.listdir(path)
for file_name in files_name:
file_path = os.path.join(path, file_name)
data = np.load(file_path, allow_pickle=True)
# data = np.resize(data, (3,74, 74))
# g=data[0,:,:]
# r=data[1, :, :]
# i=data[2, :, :]
# data = data[:, 20:54, 20:54]
w1 = data[0, :, :]
w1 = noramlization(w1)
w2 = data[1, :, :]
w2 = noramlization(w2)
w3 = data[2, :, :]
w3 = noramlization(w3)
# name_irg = r'E:\测光特征提取\形态特征\椭圆' + '\\' + 'ty' + '_' + file_name[:-4] + '.jpg'
# name_w = r'D:\deeplearning\pycharm\数据整合\特征融合\类星体图' + '\\' + 'wx' + '_' + file_name[:-4] + '.jpg'
name_w = r'3a_Files-part1/L3a/图像/' + file_name[:-4] + '_QSO' + '.jpg'
# rgb = make_lupton_rgb(i, r, g, Q=10, stretch=0.5, filename=name_irg)
rgb = make_lupton_rgb(w3, w2, w1, Q=2, stretch=0.5, filename=name_w)
4. 程序运行顺序:
确保按照以下顺序运行脚本:
- 红外数据处理:首先对下载的图像数据进行预处理。
- 红外数据整合:将处理后的数据进行整合。
- RGB图像合成:最后,将整合后的数据生成RGB图像。