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

使用多边形坐标创建图像掩码时位置与尺寸异常问题排查

掩码位置偏移及尺寸异常的排查与修复

核心问题分析

你遇到的掩码位置错误、尺寸偏小,主要是坐标系统不匹配和坐标超出图像范围导致的,结合skimage.draw.polygon2mask的特性,具体原因有以下几点:


1. 坐标维度顺序不匹配

polygon2mask的参数规则是:

  • image_shape 要求传入 (行数, 列数),对应图像的 (高度, 宽度),你的(1920,1080)是正确的。
  • 多边形坐标的每个点必须是 (列坐标, 行坐标),也就是 (x, y),其中x的有效范围是0~1079,y的有效范围是0~1919。

如果你的外部软件输出的坐标是 (y, x) 顺序(比如先高度后宽度),直接传入就会导致坐标错位,掩码跑到底部。

2. 坐标系y轴方向相反

多数图像编辑软件的坐标系是左上角为原点,y轴向下,但部分工具可能采用左下角为原点,y轴向上的规则。这种情况下,y坐标会完全反转,原本中心的区域会被映射到图像底部。

3. 坐标超出图像范围

你给出的第一个坐标1080.15已经超出了图像列数的最大值1079(像素索引从0开始),超出部分会被截断,直接导致掩码尺寸偏小。


修复方案与修正代码

针对上述问题,按以下步骤修正:

步骤1:统一坐标顺序

如果外部软件输出的是(y, x),先交换每个点的坐标顺序:

# 将[y, x]转换为[x, y]
swapped_coords = [(x, y) for y, x in coordinates]

步骤2:反转y轴坐标(若坐标系方向相反)

将外部软件的y坐标转换为skimage兼容的y轴方向:

image_height = 1920
corrected_coords = [(x, image_height - y) for x, y in swapped_coords]

步骤3:裁剪超出范围的坐标

把所有坐标限制在图像有效范围内:

image_width = 1080
clipped_coords = [
    (max(0, min(x, image_width - 1)), 
     max(0, min(y, image_height - 1))) 
    for x, y in corrected_coords
]

完整修正代码

import numpy as np
import matplotlib.pyplot as plt
from skimage.draw import polygon2mask
import numpy.ma as ma  # 补充缺失的ma模块导入

# 图像尺寸(行数,列数)
image_shape = (1920, 1080)
coordinates = ([1080.15, 400.122], [1011.45, 400.90], .......) # 你的27个原始坐标点

# 坐标修正流程
swapped_coords = [(x, y) for y, x in coordinates]  # 交换坐标顺序(按需调整)
corrected_coords = [(x, image_shape[0] - y) for x, y in swapped_coords]  # 反转y轴(按需调整)
clipped_coords = [(max(0, min(x, image_shape[1]-1)), max(0, min(y, image_shape[0]-1))) for x, y in corrected_coords]

# 生成掩码与结果
polygon = np.array(clipped_coords)
mask = polygon2mask(image_shape, polygon)
result = ma.masked_array(image, np.invert(mask))

plt.imshow(result, cmap='gray')
plt.show()

注意:如果你的外部软件坐标顺序本来就是(x,y),可以跳过swapped_coords这一步;如果坐标系y轴方向和skimage一致,跳过corrected_coords步骤,按需调整即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:50:15