You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求可将SF/WKT多边形转为同维度掩码矩阵的R函数

生成SLIC分割结果的掩码矩阵

我有一个以矩阵存储的灰度图像,使用SLIC算法将其分割为若干区域后,得到包含多边形的Simple Feature(sf)对象(也可提取为Well-Known-Text(WKT)格式)。需要生成一个与原图像矩阵维度一致的掩码矩阵/数组,其中每个像素位置存储该像素所属的多边形ID。例如,若像素image[1,2]属于多边形5,则mask[1,2] <- 5。

用户提供的示例代码(基于随机“图像”):

mat <- array(runif(10000, min=0, max=500), dim=c(100,100))
# SLIC  
library(supercells);
library(sf);
library(terra);
# 矩阵转空间栅格
raster <- rast(mat);
rasterSLIC <- supercells(raster, k = 50, compactness = 1, dist_fun = "euclidean", avg_fun = "mean");
plot(raster);
plot(st_geometry(rasterSLIC), add = TRUE, lwd = 0.2);
point <- st_cast(rasterSLIC$geometry[2], to="POINT");
coord <- st_coordinates(point);

# 目标效果示例:
goal <- array(c(1,1,1,2,2,1,2,3,3), dim=c(3,3));
image(goal);
goal;

解决方案

直接利用terra包的rasterize函数,将SLIC得到的sf多边形对象栅格化,即可生成与原图像维度一致的掩码矩阵:

# 生成随机灰度图像矩阵
mat <- array(runif(10000, min=0, max=500), dim=c(100,100))

# 加载所需包
library(supercells);
library(sf);
library(terra);

# 矩阵转栅格对象
raster <- rast(mat);
# 执行SLIC超像素分割
rasterSLIC <- supercells(raster, k = 50, compactness = 1, dist_fun = "euclidean", avg_fun = "mean");

# 核心步骤:将sf多边形栅格化,用supercell_id作为像素值
mask_raster <- rasterize(rasterSLIC, raster, field = "supercell_id")
# 将栅格转换为数组,维度与原图像矩阵完全一致
mask_matrix <- as.array(mask_raster)

# 查看结果
image(mask_matrix)
head(mask_matrix)

说明

  • rasterize函数会自动匹配原栅格raster的分辨率和维度,将每个多边形覆盖的所有像素赋值为对应的supercell_id
  • as.array将栅格对象转换为数组后,其维度、行列顺序与原图像矩阵mat完全一致,满足需求

内容的提问来源于stack exchange,提问作者Allerleirauh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:15:30