计算沃罗诺伊像元面积



我正在尝试计算matlab中每个Voronoi单元格的面积,但我被卡住了。我在网上找到了这段代码:

[v , c] = voronoin(sdata);
for i = 1 : size(c ,1)
  ind = c{i}';
  tess_area(i,1) = polyarea( v(ind,1) , v(ind,2) );
end

此代码不起作用,因为 v 中的一个点是 [Inf,Inf]。这是无穷大中的一个点。如何绕过此问题?

根据 'voronoin' 文档中的示例,v 的第一点将始终是 [Inf, Inf]。这是一句话:

V 的第一行是无穷远处的点。如果单元格中的任何索引 单元格数组为 1,则相应的 Voronoi 单元格包含 V 中的第一个点,无穷远处的点。这意味着沃罗诺伊细胞是 无限。

如果你想在顶点 v 上使用"polyarea"而不得到 NaN,那么我幼稚的答案是在将 v 的第一行输入到"polyarea"之前将其切掉

 sdata = [ 0.5    0
      0      0.5
     -0.5   -0.5
     -0.2   -0.1
     -0.1    0.1
      0.1   -0.1
      0.1    0.1 ]
[v , c] = voronoin(sdata);
for i = 1 : size(c ,1)
  ind = c{i}';
  tess_area(i,1) = polyarea( v(2:end,1), v(2:end,2))
end

但是,如果这不是你所说的"不工作"的意思,那么也许你可以详细说明你期望看到的内容?

这可以

避免NaN的事情:

      [ v, c] = voronoin ( sdata );
       tess_area=zeros(size(c,1),1);
       for i = 1 : size(c ,1)
          ind = c{i}';
         if ind~=1
          tess_area(i,1) = polyarea( v(ind,1) , v(ind,2) );
         end
       end

您需要定义您感兴趣的空间的边界。例如,如果您在 voronoi 单元格周围绘制一个正方形,则根据正方形的大小,单元格将具有不同的区域。

Voronoi 分区本身不能在单元格上设置外部边界。

如果 Matlab 具有多边形交集函数,那么它应该很容易做到。一些相关的线程可能是:

多边形的交集和并集

计算图像和多边形之间重叠的简单方法是什么?

如果 Matlab 没有此功能,您可以手动计算 voronoi 线与多边形边界线之间的交点,然后基于此计算一个新多边形,然后从中计算面积。

相关内容

  • 没有找到相关文章

最新更新