Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何确定灰度图像中形状的内部和外部_Matlab_Image Processing - Fatal编程技术网

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

Matlab 如何确定灰度图像中形状的内部和外部,matlab,image-processing,Matlab,Image Processing,我有一张这样的地面图像: 我还有一系列的点围绕着这个形状,你可以在图片上看到 我的目标是显示每个点的法向量,使其指向“内部”区域,即白色区域。 我的尝试是计算每个点的法向量(它的两个方向)。 在得到双面法向量后,我试图通过将法向量的两条边周围的区域(3*3,5*5…)相加,并在它们之间进行比较()来确定哪一侧指向“内部”。 结果模棱两可 我需要帮助才能找到另一个主意 虽然我希望有人能提供更智能的数学解决方案,但我会为您提供一个编程/MATLAB解决方案。请注意,如果该区域是凸的,则可以找到一个

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

我还有一系列的点围绕着这个形状,你可以在图片上看到

我的目标是显示每个点的法向量,使其指向“内部”区域,即白色区域。 我的尝试是计算每个点的法向量(它的两个方向)。 在得到双面法向量后,我试图通过将法向量的两条边周围的区域(3*3,5*5…)相加,并在它们之间进行比较()来确定哪一侧指向“内部”。
结果模棱两可


我需要帮助才能找到另一个主意

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

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

a) 区域内

b) 区外

取决于法线指向的方向

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


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

您还可以受益于向量乘法的功能

  • 用于标量乘法
    • A。当矢量之间的角度小于90°时,B>0
    • A。当角度大于90°时,B<0
    • A。当角度等于90°时,B=0
  • 向量乘法
    • A x B
      当向量顺序为“右侧”时指向上方
    • A x B
      向下点vhen向量顺序为“左手”
    • 当向量共线时,
      ab
      (0,0,0)
然后按照以下步骤编写代码:

  • 计算每个点的法向和切向向量(
    n{ii}
    t{ii}
  • 计算每个点的
    v{ii}=n{ii}x t{ii}
  • 为每个点计算
    sg(ii)=符号(v{ii-1}.v{ii})
  • sg(ii)
    ii
    第四个向量与
    ii-1
    第四个向量方向相同时为正。
    sg(ii)
    ii
    第th个向量指向内部和
    ii-1
    第th个向量指向外部时为负值,反之亦然


    如果确定任意点的法向量是指向i还是向外,则可以轻松确定所有点的方向。

    如果按照
    realmin
    的顺序确定真实点和临时点之间的差异,则形状“扰动”必须低于分辨率,才能扭曲结果。您还可以测试两个方向的位移,并检查
    true
    false
    结果。谢谢。2件事:你能告诉我,
    sg(…)
    代表什么吗?另一件事:我不确定你写的东西是否有助于确定“内部”和“外部”,或者有助于在确定任何点的法向量是指向内部还是指向外部后得出结论。再次感谢!1.很抱歉,我拼错了
    符号
    函数。它检查
    v{ii}
    v{ii-1}
    的乘积是正的还是负的。您还可以将其与零进行比较。2.如果您确定一个向量是内部向量或外部向量,例如通过Ander的回答,您可以评估所有向量,而不存在任何缺陷。如果您知道您正在顺时针或逆时针检查点,那么您也有足够的信息。不幸的是,点不是顺时针或逆时针排列的。