【问题标题】:Write pixel data to FITS file Cfitsio将像素数据写入 FITS 文件 Cfitsio
【发布时间】:2023-03-07 08:01:02
【问题描述】:

我正在尝试使用cfitsio 将像素数据写入图像并将其填充到新的拟合文件中。我不确定我在哪里做错了,但所有数据都没有写入 fit 文件。我使用binary vi 来检查数据和图像数据没有正确创建。我使用了NASA website 中的第二个image HST WFPC 2 fits file。这是我写的代码:

#include <string.h> 
#include <stdio.h> 
#include "fitsio.h" 

int main() { 
    fitsfile *fptr; 
    int status = 0, i;  

    fits_open_file(&fptr, "WFPC2ASSNu5780205bx.fits", READONLY, &status);  
    long naxes[2]; 
    fits_get_img_size(fptr, 3, naxes, &status); 

    fitsfile *ofptr;
    fits_create_file(&ofptr, "o_nasa.fits", &status); 
    fits_copy_header(fptr, ofptr, &status); 

    long fp[2] = {1, 1}; 
    long nelements = naxes[0];

    float arr[nelements]; 
    for (i = 0; i < nelements; i++) { 
        arr[i] = 100;
    }   

    int ii, jj, kk; 
    for (ii = 1; ii <= naxes[0]; ii++) { 
        for (jj = 1; jj <= naxes[1]; jj++) { 
            fits_write_pix(ofptr, TFLOAT, fp, nelements, arr, &status); // this is not working
        }   
    }   
    fits_close_file(ofptr, &status); 
    fits_close_file(fptr, &status); 

    return status;
} 

【问题讨论】:

    标签: c astronomy fits pyfits


    【解决方案1】:

    我发现代码有什么问题。我刚刚发布了答案,因为似乎没有很多社区在 CFITSIO 上工作。带有变量ii, jj 的双循环中的代码是错误的。我认为fp 是第一个指向图像数组开始写入的像素数组,它被使用一次来开始整个迭代,但write_pix 在整个迭代中使用它来知道在哪里写入。我的代码也在尝试编写/更新1, 1 pixel,它似乎是NULL。正确的代码是:

    for (fp[1] = 1; fp[1] <= naxes[0]; fp[1]++) { 
        for (fp[0] = 1; fp[0] <= naxes[1]; fp[0]++) { 
            fits_write_pix(ofptr, TFLOAT, fp, nelements, arr, &status); 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 2014-05-18
      • 2013-12-13
      相关资源
      最近更新 更多