Python/Numpy中的扫描线填充算法

Hyp*_*ube 3 python numpy image-processing

我有4个角坐标(四边形)的数千个多边形,并希望将它们转换为光栅表示为numpy 2d数组.存在许多网格化算法,如流行的扫描线填充图形.(见http://www.cs.rit.edu/~icss571/filling/how_to.htmlhttp://cs.uvm.edu/~rsnapp/teaching/cs274/lectures/scanlinefill.pdf)

Octave在poly2mask函数中实现了这一点(例如http://octave.sourceforge.net/image/function/poly2mask.html).

Numpy也有类似的功能吗?我仍然没有得到这个算法如何详细工作,因此,如果你能给我一些关于如何有效地在Python/Numpy中实现它的提示,我将非常感激.

或者为了速度原因,在CPython(我也不熟悉)中对它进行编码会更好吗?

Joe*_*ton 7

在scipy生态系统中有一些不同的功能(无序):

1)最广泛使用的选项是使用matplotlib points_inside_poly.然而,填充规则网格非常不理想(即它是多边形测试中的显式点,而不是"扫描线"方法).

2)mahotas实现一个fill_polygon非常有效的功能:http://mahotas.readthedocs.org/en/latest/polygon.html#drawing

3)skimage(scikits-image)实现一个draw.polygon至少同样有效的功能,如果不是更多的话:http://scikit-image.org/docs/dev/api/skimage.draw.html#skimage.draw.polygon

4)最后,您还可以使用PIL并将图像转换为numpy数组.看一下ImageDraw模块:http://effbot.org/imagingbook/imagedraw.htm

总的来说,我建议安装skimage和使用它.这是一个非常有用的库.但是,如果由于某种原因无法安装scikits图像,则其他选项应该有所帮助.