处理和下载WISE红外图像数据

步骤 1: 访问 SDSS 数据查询工具

  1. 打开 SDSS SkyServer 网站:https://skyserver.sdss.org/
  2. 在主页上点击 “Explore the SDSS Database” 或者 “Tools” 部分下的 “SQL Search”
  3. 本文尝试“Tools” 部分下的 “SQL Search”

步骤 2: 使用 SQL 查询工具

SDSS 提供了一个强大的 SQL 查询工具来查询数据库中的天文数据。你可以通过编写 SQL 查询来选择感兴趣的天体并导出相应的数据(如赤经和赤纬)。

  1. SQL Search 页中,选择你要查询的 数据表。SDSS 提供多个数据表,常用的表包括:

    • PhotoObj:包含关于天体的位置、光度等信息。
    • SpecObj:包含关于光谱数据的信息。
  2. 输入你的 SQL 查询语句。例如,如果你想获取某个区域(由赤经 ra 和赤纬 dec 定义)的所有天体数据,你可以使用类似下面的 SQL 查询:

步骤 3: 检查和处理 CSV 文件

下载 CSV 文件后,你会得到包含你查询的天体数据的表格。一般来说,这些 CSV 文件包含多个字段,比如:

  • ra: 赤经
  • dec: 赤纬
  • 其他光度数据或其他天文参数

1. CSV 文件转化为 TXT 格式

首先,你需要从CSV文件中提取 radec 两列,并将它们保存为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. 三个程序的处理流程

根据你的描述,下载的文件需要通过以下三个程序来处理:

  1. 红外数据处理 (红外数据处理.py)
  2. 红外数据整合 (红外数据整合.py)
  3. 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. 程序运行顺序:

确保按照以下顺序运行脚本:

  1. 红外数据处理:首先对下载的图像数据进行预处理。
  2. 红外数据整合:将处理后的数据进行整合。
  3. RGB图像合成:最后,将整合后的数据生成RGB图像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值