从行下面的数组返回行/列值

时间:2016-05-09 12:03:18

标签: python arrays numpy line

我要做的是根据长度和角度在二进制图像上生成多条线。然后返回所有行/列值以及这些行下面的像素值,并将它们放入python列表中。 为了生成这些线,我写了一个函数,输出每一行的开始和结束坐标。使用这些坐标我想生成线并提取值。

要从像素(0,1)到(3,1)的水平线中提取值,我可以这样做:

a = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
pixels = a[1, 0:3]

或垂直:

pixels = a[0:3, 1]

返回该行下面所有像素值的数组:

array([3, 4, 5])
array([1, 4, 7])

如何在具有角度的线上应用此方法?所以用x1,y1和x2,y2?这些返回(语法)错误:

a([0,0], [2,2])
a([0,0]:[2,2])
a[0,0:2,2]

我在Matlab中寻找类似'improfile'的东西。 非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用scikits-image的draw模块和draw.line方法:

>>> from skimage.draw import line
>>> y0 = 1; x0 = 1; y1 = 10; x1 = 10;
>>> rr, cc = line(y0, x0, y1, x1)

rrcc将包含该行所经过的值的行索引和列索引。您可以访问这些值:

>>> values = img[rr, cc]

假设img是您图片的名称。

请注意,对于不同于45度间隔的角度,此实现不提供插值或子像素精度。它将在点A和B之间创建一条穿过整个像素的离散阶梯线。