在图像顶部模拟天体(恒星)

simulate astronomic body (star) on top of image

本文关键字:恒星 图像 顶部 模拟      更新时间:2023-10-16

我正在模拟图像顶部的恒星。 图像是用正态分布(平均值、标准差)生成的灰度矩阵。现在,给定像素坐标和恒星SNR,我必须将其作为点源植入图像顶部。任何建议如何实现它,使其成为一个有用的模拟? 你能建议代码示例吗?我正在开发C++但 Matlab/伪代码也会很好。 提前致谢

恒星可以被认为是点源。望远镜/相机的光学系统,如果是理想的光学系统,会将艾里盘投射到成像平面上(胶片,CCD,你有什么)。因此,你应该生成一个艾里圆盘并将其添加到现有的像素值中(多个附近的恒星将有重叠的圆盘,这些圆盘应该加在一起)。

我将简单地生成此函数并在像素坐标处对其进行采样。请注意,Airy 磁盘在距中心相对较短的距离处将非常接近于零,因此您可以在评估函数的中心周围定义一个小区域,例如 7x7 像素。这将节省大量计算。

为了进一步简化实现和计算成本,您可以使用高斯近似艾里圆盘。请注意,成像光学元件(包括大气)中的任何缺陷都会导致投影点不太像艾里圆盘,而更像高斯,因此这根本不是一个糟糕的近似值。

使用 DIPlib(我是作者),您可以通过调用dip::DrawBandlimitedPoint向图像添加高斯点:

constexpr std::size_t N = 10;
double coordinates[N][2] = {...};
double magnitudes[N] = {...};
dip::Image image({1024,1024});
for (std::size_t ii=0; ii<N; ++ii) {
dip::DrawBandlimitedPoint(image, {coordinates[ii][0], coordinates[ii][1]}, {magnitudes[ii]}, {1.0});
}

该函数调用中的{1.0}是高斯点的西格玛。调整此值以匹配您正在模拟的光学器件。该代码生成单精度浮点图像。您可以在适当缩放后将其转换为整数类型,例如:

image *= 10;
image.Convert(dip::DT_UINT16);

绘制艾里磁盘会更复杂一些。