我要做的是根据长度和角度在二进制图像上生成多条线。然后返回所有行/列值以及这些行下面的像素值,并将它们放入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'的东西。 非常感谢你的帮助!
答案 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)
rr
和cc
将包含该行所经过的值的行索引和列索引。您可以访问这些值:
>>> values = img[rr, cc]
假设img
是您图片的名称。
请注意,对于不同于45度间隔的角度,此实现不提供插值或子像素精度。它将在点A和B之间创建一条穿过整个像素的离散阶梯线。