【问题标题】:Finding All Pixels Within Certain Range in Polar Coordinates在极坐标中查找特定范围内的所有像素
【发布时间】:2015-04-08 00:18:29
【问题描述】:

我想找到图像中位于某个极坐标范围内的所有像素(在笛卡尔坐标中),r_min r_max theta_min 和 theta_max。所以换句话说,我用上面提到的参数定义了一些环形部分,我想找到位于其中的像素的整数 x,y 坐标。蛮力解决方案出现在中间(遍历图像的所有像素并检查它是否在其中),但我想知道是否有更有效的解决方案。

谢谢

【问题讨论】:

  • 什么语言?根据您正在考虑的语言,蛮力方法实际上可能非常有效。

标签: image-processing graphics geometry computational-geometry polar-coordinates


【解决方案1】:

在蛮力解决方案中,您可以首先确定区域的紧密边界框,通过计算四个顶点并根据需要包括四个基本极值点。然后对于每个像素,您必须计算两个圆(二次表达式)和两条直线(线性表达式)。通过增量计算(X => X+1),操作的数量几乎为零。

圈内

f(X,Y) = X²+Y²-2XXc-2YYc+Xc²+Yc²-R² <= 0

逐渐地,

f(X+1,Y) = f(X,Y)+2X+1-2Xc <= 0

如果您真的想避免这种开销,您将求助于扫描线转换技术。首先考虑填充一个倾斜的矩形。通过中间顶点绘制两条水平线,将矩形分解为两个三角形和一个平行四边形。然后对于穿过其中一个形状的任何扫描线,您事先知道您将相交哪对边。从那里,您知道需要填充扫描线的哪一部分。

您可以推广到任何形状,尤其是您的圆段。准备好进行相对微妙的案例分析,但找到交叉点本身并不难。它可能有助于通过中心的垂直分割域,以便任何水平始终与轮廓相遇两次,而不是四次。

【讨论】:

    【解决方案2】:

    为简单起见,我们假设该部分的中心位于 0,0。如果没有,通过偏移所有坐标很容易改变。

    对于从r_max-r_max 的每个可能的 y 坐标,找到两个半径的圆的 x 坐标:-sqrt(r*r-y*y)sqrt(r*r-y*y)。对于r_max 圈内和r_min 圈外的每个点,它可能是该部分的一部分,需要进一步测试。

    现在执行相同的 x 坐标计算,但这次使用角度描述的线段。您需要一些条件逻辑来确定线的哪一边在里面,哪一边在外面,以及它是影响部分的上部还是下部。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多