gpt4 book ai didi

c++ - 在图像顶部模拟天体(星星)

转载 作者:行者123 更新时间:2023-11-30 03:16:08 31 4
gpt4 key购买 nike

我正在研究在图像上模拟星星。该图像是按正态分布(均值、标准差)生成的灰度矩阵。现在,给定像素坐标和恒星 SNR,我必须将其作为点源种植在图像之上。有什么建议我如何实现它以使其成为有用的模拟?你能建议代码示例吗?我正在用 C++ 开发,但 Matlab/pseudocode 也不错。提前致谢

最佳答案

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

我会简单地生成这个函数并在像素坐标处对其进行采样。请注意,艾里斑在距离中心相对较短的距离处会非常接近于零,因此您可以在该中心周围定义一个小区域,例如 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);

绘制艾里斑会更复杂一些。

关于c++ - 在图像顶部模拟天体(星星),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56554327/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com