矢量特征¶
罗塞里奥的 features
模块提供了提取栅格特征形状以及通过将形状“烧录”到栅格中创建新特征的功能: shapes()
和 rasterize()
. 这些函数以一般的方式公开gdal函数,使用迭代器覆盖geojson(如python对象)而不是gis层。
提取栅格特征的形状¶
考虑一下python徽标。
前景特征的形状可以这样提取:
import pprint
import rasterio
from rasterio import features
with rasterio.open('13547682814_f2e459f7a5_o_d.png') as src:
blue = src.read(3)
mask = blue != 255
shapes = features.shapes(blue, mask=mask)
pprint.pprint(next(shapes))
# Output
# pprint.pprint(next(shapes))
# ({'coordinates': [[(71.0, 6.0),
# (71.0, 7.0),
# (72.0, 7.0),
# (72.0, 6.0),
# (71.0, 6.0)]],
# 'type': 'Polygon'},
# 253)
shapes迭代器生成 geometry, value
对。第二项是对应于形状的栅格特征值,第一项是其几何图形。在这种情况下,几何图形的坐标以像素单位表示,原点位于图像的左上角。如果源数据集是地理引用的,您将获得类似的地理引用几何图形,如下所示:
shapes = features.shapes(blue, mask=mask, transform=src.transform)
将形状烧制为栅格¶
要转到另一个方向,请使用 rasterize()
将值刻录到与几何体相交的像素中。
image = features.rasterize(
((g, 255) for g, v in shapes),
out_shape=src.shape)
默认情况下,只有中心在多边形内或由Bresenham的直线算法选择的像素才会被烧掉。您可以指定 all_touched=True
在几何体接触的所有像素中进行烧录。几何图形将由“画师算法”栅格化-几何图形将按顺序处理,以后的几何图形将覆盖以前的值。
同样,要在地理参考形状中进行刻录,请为要创建的图像传递适当的转换。
image = features.rasterize(
((g, 255) for g, v in shapes),
out_shape=src.shape,
transform=src.transform)
输入形状的值将替换为 255
在生成器表达式中。输入几何图形未覆盖的区域将替换为可选的 fill
值,默认为 0
. 像这样写入磁盘的结果图像,
with rasterio.open(
'/tmp/rasterized-results.tif', 'w',
driver='GTiff',
dtype=rasterio.uint8,
count=1,
width=src.width,
height=src.height) as dst:
dst.write(image, indexes=1)
具有黑色背景和白色前景功能。