【问题标题】:How can I calculate the area of an object by using its contour (chain code)?如何使用轮廓(链码)计算对象的面积?
【发布时间】:2013-04-26 20:53:48
【问题描述】:

假设我有一个使用 8 连通性的带有链码 [1, 1, 1, 1, 3, 3, 3, 3, 5, 5, 5, 5, 7, 7, 7] 的旋转平方对象。我怎样才能得出它的面积,如像素数?

编辑:

我从边界像素导出链码。如果通过边界像素来计算面积更容易,怎么办?

算法应该能够找到边界包围的像素数(包括边界像素)。边界的形状可以是任意的,只要它是闭合的并且不与自身相交。

【问题讨论】:

  • 你的意思是要计算立方体的面积吗?
  • 不,来自黑白图像 (x,y) 的对象。对于这个例子,答案应该是 41。如果没有旋转,则为 5*5 = 25

标签: python algorithm math image-processing


【解决方案1】:

任何多边形的面积都可以使用这个公式从它的顶点计算出来:

A = 1/2 Sum(i = 1..n, x[i]*y[i+1] - x[i+1]*y[i])

来源:Wolfram MathWorld

【讨论】:

  • 检查您的公式是否为非旋转正方形 2x2 ;-)
  • @EgorSkriptunoff:对于顶点为{{0, 0}, {2, 0}, {2, 2}, {0, 2}} 的非旋转 2x2 正方形,我得到面积 4。对我来说似乎是正确的。
  • 你是如何从链码[0, 2, 4, 6]得到这样的坐标的?
  • @nikie:这个公式给出了一个数学上正确的区域,但我需要像素数......
【解决方案2】:


在哪里
n - 边框像素数,
(x_k, y_k) - 第 k 个边界像素的坐标(通过假设 x_1=0, y_1=0 源自您的链码),
(n+1)-th 像素是第一个像素。

【讨论】:

  • @denver - 参考什么?这个公式是我自己推导出来的。
  • n+2 是从哪里来的?
  • @nikie - 它是由边界像素中心形成的多边形周围的框架区域。
  • @EgorSkriptunoff:这个公式没有给出任意非相交闭合轮廓的一般解决方案
  • 如果你自己推导出来,你能提供你的推导吗?
【解决方案3】:

Wikipedia: Pick's Theorem

这是一个非凡的结果,仅当顶点在平面的某些表示中具有整数坐标时才适用。我认为这在你的情况下是正确的。如果是,它提供了一种非常简单的面积计算方法。

【讨论】:

  • 一点也不简单!因为你知道轮廓点的数量,也就是弗里曼链的长度,但你不知道内部点的数量。要找到这些,您可以绘制轮廓并使用种子填充,或者执行直接多边形填充,但这比鞋带公式复杂得多,效率也低得多。
猜你喜欢
  • 2014-11-20
  • 2012-01-14
  • 2014-05-05
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
相关资源
最近更新 更多