如何确定灰度图像中形状的内部和外部

时间:2016-04-26 09:36:38

标签: matlab image-processing

我有一张像这样的地面图像:

input

我还有一系列包围形状的点,如图所示。

我的目标是以指向"内部"的方式显示每个点的法线向量。区域,即更白的区域。 我的尝试是计算每个点(它的2个方向)的法向量。 在我得到双面法线向量后,我试图确定哪个边指向"内部"通过在法线的2个边缘周围求一个面积(3 * 3,5 * 5 ......)并在它们之间进行比较()。
结果很模糊..

我需要帮助才能找到另一个想法..

2 个答案:

答案 0 :(得分:1)

虽然我期待有人能够提供更智能的数学解决方案,但我会为您提供程序化/ MATLAB解决方案。请注意,如果区域是凸的,则可以找到一个很好/简单的解决方案,但似乎并非如此。

Use inpolygon!

你提到你有点和法向量(否则得法线很容易)。在正常距离中向边界中的点添加非常小的量,从而计算将要

的新点

a)区域内

b)区域外

取决于法线指向的方向。

使用原始点定义多边形,然后使用旧点测试inpolygon新点。对于进入的点,法线是向内的,而如果它们出局,则法线向外。

当多边形非常非凸时,这有一个缺陷,因为有时指出的东西可以使得点。但是,如果你使用相邻点计算了所有法线,它们将全部向外或全部向内。你可以通过inpolygon技巧然后使用最重复的方向来了解原因。

答案 1 :(得分:1)

您还可以从矢量乘法的功能中受益。

  • 标量乘法
    • A . B > 0当vectros之间的角度低于90°时;
    • 当角度大于90°时
    • A . B < 0;
    • 当角度等于90°时,
    • A . B = 0
  • 用于向量乘法
      当矢量顺序为“右手”时,
    • A x B指向上方;
    • A x B向下点vhen vectro命令是“左手”;
    • 当矢量共线时,
    • A x B(0,0,0)

然后将您的代码编写为folloows:

  1. 计算每个点的法向和切向量(n{ii}t{ii})。
  2. 为每个点计算v{ii} = n{ii} x t{ii}
  3. 为每个点计算sg(ii)=sign(v{ii-1}.v{ii})
  4. sg(ii) - 向量与ii向量具有相同方向时,

    ii-1为正。 当sg(ii)时,ii为负数,向量指向内,ii-1指向外,反之亦然。

    如果您确定法线向量是指向前还是向外,则可以轻松确定所有点的方向。