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

MATLAB poly2mask函数图像坐标系原点像素定义咨询

MATLAB poly2mask 图像坐标系原点定义及与OpenCV的一致性验证

先给你最核心的结论:MATLAB的poly2mask函数采用的图像坐标系,和OpenCV的是完全一致的——二者都把(0,0)定义为左上角像素的左上角顶点,而非像素中心。

具体细节拆解

  • 对于rows×cols尺寸的图像:
    • 左上角像素的左上角坐标是(0,0),右下角坐标是(1,1);
    • 整个图像的右下角顶点坐标为(cols, rows);
    • 任意像素的中心坐标为(col_idx + 0.5, row_idx + 0.5),这里要注意:MATLAB中图像的索引是(row, col),对应坐标系里的(y, x),别搞混了顺序。

和OpenCV的匹配性

OpenCV的图像坐标系规则和上面完全一致:原点在左上角像素的左上角顶点,像素索引(row, col)对应空间坐标的(y, x),像素中心同样是索引加0.5的位置。所以用poly2mask生成的掩码,和用OpenCV的多边形掩码生成逻辑处理的结果,在坐标系层面是对齐的,不会出现偏移问题。

对比常见的两类图像坐标系

你提到的两类常见坐标系,这里再明确区分下:

  • 像素中心原点型:把(0,0)设为左上角像素的中心,此时左上角像素的左上角坐标是(-0.5, -0.5),图像中心坐标为((cols-1)/2, (rows-1)/2)。这类常见于部分计算机图形学库,但poly2mask和OpenCV都不采用这种。
  • 顶点原点型:就是poly2mask和OpenCV用的这种,原点在像素的左上角顶点,属于“栅格对齐”的物理空间定义,更贴合图像存储的内存布局逻辑。

快速验证小代码

如果你想自己验证,可以跑这段MATLAB代码:

% 创建2x2的图像画布
rows = 2; cols = 2;
% 定义一个刚好覆盖第一个像素的矩形多边形(从(0,0)到(1,1))
x = [0, 1, 1, 0]; y = [0, 0, 1, 1];
% 生成掩码
mask = poly2mask(x, y, rows, cols);
disp(mask);

输出的mask会是第一行第一列为1,其余为0,正好验证了(0,0)-(1,1)的区域对应第一个像素,说明原点是该像素的左上角顶点。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:52:09