给定图像、像素点和以像素为单位的半径。如何找到它创建的圆形边框的像素坐标

Given a image, a pixel point and a radious in pixels. How do I find the pixel coordenate of the circle border it creates

给定一个图像矩阵,我想找到以(x,y)为圆心的给定圆边界内所有points/pixels的像素点坐标,其中x和y为整数,半径为r,其中 r 也是一个整数。考虑到边框是 1 像素厚。只有这个外缘是我需要找到的。我遇到了麻烦,因为我只能使用整数。我尝试了曼哈顿距离,但它给了我一个旋转 45 度的正方形。我真的不知道如何前进

看到你上一个问题,看来你需要扩大圈子。

请注意,简单绘制圆周像素可能会产生小的空白 spaces。绘制半径为 1,2,...,n 的圆的示例:

但是您可以像 Bresenham 的那样完成整数圆绘制算法。

r值逐一增加。在第一个八分圆中使用 Bresenham 算法生成像素坐标序列。如果像素尚未填充(从另一个单元格中心),则绘制像素,并检查下部像素是否已填充 - 如果没有,绘制它以删除空 space。对 7 个对称像素及其相邻像素执行相同操作(第二个八分圆位于底部,依此类推)

假设中心是原点(如果不是,你可以很容易翻译),你得到的是

定义的区域的轮廓
x² + y² - r² ≤ 0.

对于给定的 x,这是验证约束的最大 y。也就是说,

x² + y² - r² ≤ 0 < x² + (y+1)² - r² = x² + y² - r² + 2y + 1.

现在如果你增加 x,

(x+1)² + y² - r² = x² + y² - r² + 2x + 1 ≤ 0 < (x+1)² + (y+1)² = x² + y² - r² + 2x + 2y + 2

可能会变成假,你需要通过递减来调整y。

这就是圆的增量算法的本质。您保持 x² + y² - r² 更新并逐个单元调整 x, y。这只涉及整数运算。其实只是加减比较而已!由于坐标每次最多变化1,因此曲线将是连续的。

我没有提到一点复杂性,这意味着八种不同的情况:x 和 y 可能需要递增或递减,并且 x 可以比 y 变化得更快,或者相反。这些对应于平面在八个主要八分圆中的分解。