gpt4 book ai didi

algorithm - 为 CCD 集成目的在阵列上画一个圆

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:04:04 24 4
gpt4 key购买 nike

我正在写一个函数来在方形数组上画一个近似的圆(在 Matlab 中,但问题主要是算法)。
目标是制作一个掩模,用于集成从衍射极限点源(其直径对应于 CCD 阵列上的几个像素)落在 CCD 传感器的一部分上的光。总之,CCD 传感器看到的图案具有旋转对称性,当然没有义务以 CCD 的一个特定像素为中心(参见下面的示例图片)。

这是我目前用来生成离散化圆形掩码的算法,它部分有效(Matlab/Octave 代码):

xt = linspace(-xmax, xmax, npixels_cam); % in physical coordinates (meters)
[X Y] = meshgrid(xt-center(1), xt-center(2)); % shifted coordinate matrices
[Theta R] = cart2pol(X,Y);
R = R'; % cart2pol uses a different convention for lines/columns
mask = (R<=radius);

如您所见,我的算法选择(设置为 1)物理距离(以米为单位)小于或等于半径的所有像素,该半径不需要是整数。

我觉得我的算法可能不是解决这个问题的最佳方案。特别是,我希望它包括存在中心的像素,即使半径非常小。
有什么想法吗?

(请参阅 http://i.stack.imgur.com/3mZ5X.png 以获取 CCD 相机上衍射极限点的示例图像)。

最佳答案

如果您希望选择像素当且仅当它们包含圆 C 的任何部分时:

在每个像素中放置一个小圆 A,其半径 = 像素大小的一半,并在其周围放置另一个 R=sqrt(2)* 圆的一半大小(外接圆)

要测试两个圆是否相互接触,您只需计算中心到中心的距离,然后减去两个半径的总和。

如果测试圆 C 在 A 内,则选择该像素。如果它在 B 内但不在 C 内,则需要像这样测试所有四个像素边是否重叠 Circle line-segment collision detection algorithm?

蛮力近似方法是在每个像素内制作更精细的网格,并测试该网格中的每个中心点。

关于algorithm - 为 CCD 集成目的在阵列上画一个圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9016971/

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