矢量特征

罗塞里奥的 features 模块提供了提取栅格特征形状以及通过将形状“烧录”到栅格中创建新特征的功能: shapes()rasterize() . 这些函数以一般的方式公开gdal函数,使用迭代器覆盖geojson(如python对象)而不是gis层。

提取栅格特征的形状

考虑一下python徽标。

https://farm8.staticflickr.com/7018/13547682814_f2e459f7a5_o_d.png

前景特征的形状可以这样提取:

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)

具有黑色背景和白色前景功能。

https://farm4.staticflickr.com/3728/13547425455_79bdb5eaeb_o_d.png