如何使用轮廓(链码)来计算对象的面积?

3
假设我有一个使用8-连通性、旋转的平方物体,其链码为[1, 1, 1, 1, 3, 3, 3, 3, 5, 5, 5, 5, 7, 7, 7]。如何推导它的面积,即像素数量?
编辑:
我从边界像素中推导出了链码。如果通过边界像素更容易计算面积,如何做到这一点?
该算法应能够找到由边界所包围的像素数量(包括边界像素)。边界的形状可以是任意的,只要是封闭的且不与自身相交。

你的意思是要计算一个立方体的面积吗? - Michael David Watson
不,黑白图像(x,y)中没有对象。对于这个例子,答案应该是41。如果它没有旋转,那么它将是5*5=25。 - Skogen
3个回答

2
任何多边形的面积都可以使用以下公式根据其顶点计算得出:
A = 1/2 Sum(i = 1..n, x[i]*y[i+1] - x[i+1]*y[i])

Source: Wolfram MathWorld


检查一下您的公式,是否适用于未旋转的2x2正方形 ;-) - Egor Skriptunoff
@EgorSkriptunoff:对于一个未旋转的2x2正方形,其顶点为{{0, 0}, {2, 0}, {2, 2}, {0, 2}},我得到的面积为4。看起来没问题。 - Niki
你是如何从链码 [0, 2, 4, 6] 推导出这些坐标的? - Egor Skriptunoff
@nikie:这个公式可以给出数学上正确的面积,但我需要像素数量... - Skogen

1

formula
其中
n - 边缘像素的数量,
(x_k, y_k) - 第k个边界像素的坐标(通过假设x_1=0,y_1=0从您的链码中派生),
第(n+1)个像素是第一个像素。


@denver - 参考什么?我是自己推导出这个公式的。 - Egor Skriptunoff
n+2是从哪里来的? - Niki
@nikie - 这是由边界像素中心形成的多边形周围框架的区域。 - Egor Skriptunoff
@EgorSkriptunoff:这个公式不能给任意不相交的闭合轮廓提供通解。 - Skogen
1
如果您是自己推导出来的,那么能否提供您的推导过程。 - denver
@Skogen - 是的,它提供了一般解决方案。你有反例吗? - Egor Skriptunoff

0

请参见维基百科:皮克定理

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


非常不简单!因为你知道轮廓点的数量,这仅仅是 Freeman 链的长度,但你不知道内部点的数量。要找到这些点,你可以画出轮廓并使用种子填充,或者执行直接的多边形填充,但这比鞋带公式复杂得多,而且效率更低。 - user1196549

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接