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
相关产品推荐
相关产品推荐

