【问题标题】:Base coordinate for poly2mask matlabpoly2mask matlab的基坐标
【发布时间】:2018-03-26 22:13:15
【问题描述】:

我想问一下MATLAB中poly2mask函数中使用的图像坐标系中的原点像素是什么。

OpenCV中的其他人问过它,想知道它在MATLAB中是否相同。让我重复这个人的问题:

一般这样的系统可能有两种,第一种(0,0)定义为左上像素的中心,即左上像素的左上角为(-0,5) , -0.5) 并且图像的中心是 ((cols - 1) / 2, (rows - 1) / 2)。

另外一个是(0,0)是左上像素的左上角,所以左上像素的中心是(0.5, 0.5),图像的中心是(cols / 2,行 / 2)。

我的问题是MATLAB中的poly2mask函数采用的是哪个系统?

【问题讨论】:

  • MATLAB 使用从 1 开始的索引。左上角像素的中心通常是 (1,1)。文档没有说明这一点吗?
  • 我不是在谈论索引。我想知道多边形坐标的 (0,0) 点在哪里作为 MATLAB 中 poly2mask 函数的输入。在opencv中,它是左上角,所以第一个(左上)像素的中心坐标变为(0.5,0.5)
  • 所有 MATLAB 中的所有坐标都基于您对矩阵的索引方式。你可以在我的回答中找到证据。

标签: matlab polygon coordinate-systems


【解决方案1】:

MATLAB 使用基于 1 的索引,而不是基于 0 的索引。因此,左上角像素的中心位于 (1,1)。 poly2mask 遵循相同的约定,它们在 MathWorks 中非常一致。

这个实验证明了这一点:

>> poly2mask([0.8,1.2,1.2,0.8],[0.8,0.8,1.2,1.2],3,5)
ans =
  3×5 logical array
   1   0   0   0   0
   0   0   0   0   0
   0   0   0   0   0

我在 (1,1) 点附近绘制了一个多边形,并且蒙版显示了标记的左上角像素。如果围绕 (0.5,0.5) 点绘制多边形,则不会标记任何像素:

>> poly2mask([0.8,1.2,1.2,0.8]-0.5,[0.8,0.8,1.2,1.2]-0.5,3,5)
ans =
  3×5 logical array
   0   0   0   0   0
   0   0   0   0   0
   0   0   0   0   0

容易出错的一件事是轴的顺序。第一个索引是 y,第二个索引是 x。但是图像处理工具箱(和其他地方)中的许多函数将坐标作为 (x,y),而不是 (y,x)。例如:

>> poly2mask([0.8,1.2,1.2,0.8]+1,[0.8,0.8,1.2,1.2],3,5)
ans =
  3×5 logical array
   0   1   0   0   0
   0   0   0   0   0
   0   0   0   0   0

这里,x = 2 和 y = 1,像素ans(1,2) 设置好了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多