在不知道第二个坐标的情况下获得一条直线上的点/像素

问题描述 投票:3回答:2

我正在尝试构建一个功能,该功能从特定坐标给定角度延伸,并循环遍历该行上的像素,直到遇到黑色像素为止。

如果角度为例如180度,则很容易实现。在这种情况下,搜索将仅向下扩展,在每次迭代中将1加到列坐标。但是,例如10度更复杂。因此,我大概需要在数学上计算像素位置X处的下一个像素。

This answer在类似问题中没有帮助我,因为y轴上的值未按预期变化:

import numpy as np
angle = 90*np.pi/180

x = np.arange(0, 10)
y = np.round(np.sin(angle)*x).astype(int)
print([(x, y) for x, y in zip(x, y)])

印刷品:[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)]这是错误的,因为考虑到90度角,我不希望y轴发生变化。

[The answer to this other question需要第二个'终点'坐标,我没有。”>

[最后,我找到了this question,很遗憾,该答案没有有效答案。问题中的代码似乎不返回偏移量而是浮点数,我不确定其含义。当我绕过浮子时,偏移量是错误的:

import numpy

def pol2cart(rotdist, cwangle):
    x = rotdist * numpy.cos(cwangle)
    y = rotdist * numpy.sin(cwangle)
    return round(x), round(y)

print(pol2cart(1, 180))

打印:(-1.0, -1.0),而预期输出为(1.0, 0.0)

但是上述答案在每次迭代时也会给出一致的偏移量。这将仅导致三个不同的角度(水平,垂直和45度)。这是not

所需要的,因为我将遇到另一个角度,然后将其放入函数中。

编辑: 输入示例

下面的图像是图像数据的示例。红点表示可能的起始位置。该点的方向没有显示。如果红点笔直指向下方,则其方向为180度。

嵌套字典包含每个像素的坐标(行,列)和颜色值:{1: {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 255, 8: 255,...

enter image description here

我正在尝试构建一个函数,该函数从给定角度的特定坐标开始延伸,并循环遍历该行上的像素,直到遇到黑色像素为止。如果...

python numpy image-processing pixel angle
2个回答
0
投票

我认为您可以使用Wikipedia上描述的here的Bresenham的“ Line Algorithm”

[我知道您说过您只有起点,没有终点,但是您知道行进的角度(方向),并且您知道矩形中最长的直线是对角线,所以如果您想像一条更长的线比对角线,从起点开始并向正确的方向前进,您可以生成和超出矩形边缘的终点,并将其用于Bresenham算法的另一端。


-1
投票

第一个建议的答案可以通过首先检查您的线条是水平的还是垂直的,并使用该尺寸作为迭代尺寸(在您的示例中为x)来解决。

关于第二个建议的答案:您当然可以计算任意远的终点,并将这些算法应用于您提到的已知起点和终点的直线。然后,您可以遍历返回的点以检查黑色像素,如果找不到任何像素,甚至可以重新启动算法,直到达到任意终点为止。

© www.soinside.com 2019 - 2024. All rights reserved.