在图像顶部模拟天体(恒星)
simulate astronomic body (star) on top of image
我正在模拟图像顶部的恒星。 图像是用正态分布(平均值、标准差)生成的灰度矩阵。现在,给定像素坐标和恒星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);
绘制艾里磁盘会更复杂一些。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 将图像添加到资源文件夹UWP C++
- 彩色图像的卤化物处理平均值
- 如何解决这个超硬恒星的创造问题
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 重新定位图像时如何前进到下一个内存块
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 为什么 BMP 图像上的 imwrite 会卡住/不返回?
- Gstreamer:每 5 秒使用多文件墨水保存图像/jpeg
- 如何使用CImg打开图像?
- 在图像顶部模拟天体(恒星)