获取嵌入矩阵的多边形边界和其他 post 处理技术

obtaining boundary of polygon embedded in a matrix and other post-processing techniques

我有一个名为 mat 的 100x100 布尔矩阵。除了连续的多边形区域之外,所有单元格都具有错误值。我可以通过 运行 遍历矩阵的每个单元格并找到真正的单元格来读取属于该多边形的单元格。

region_of_interest=false(size(mat));
for i=1:size(mat,1)
    for j=1:size(mat,2)
        if mat(i,j)
            region_of_interest(i,j)=true;
        end
    end
end

现在我想进一步处理这个多边形,比如只存储边界单元格。这该怎么做?我试着访问每个多边形单元格,看看它的四个邻居是否都在多边形中。但这似乎不是很有效。有更好的算法吗?

如果有其他post-处理方法可以运行在这种情况下请建议。也欢迎在 Matlab 之外提出建议。

这既不是 Python 也不是凸包问题。

但是,我要指出的是,多边形内部的边界单元为真且至少有一个相邻单元为假,而多边形外部的边界单元为假且至少有一个相邻单元为真。

由您决定是否需要内部或外部边界单元格,以及 "neighbor" 是什么。例如,一个单元格的邻居是主方向上的四个邻居,还是对角方向上的八个邻居?如果是前者,那么在以下情况下,您仍然必须搜索八个邻居才能使用我在下面描述的算法从单元格 1 到单元格 2:

...XX
...2X
XX1XX
XXXXX

也就是说,这取决于您的数据如何编写算法。如果你知道有一个没有洞的连续块,这似乎是你的问题所暗示的,那么一旦你找到一个边界单元,你只需要沿着边界走,直到再次找到第一个单元。所以搜索邻居直到找到下一个边界单元格,然后再做一次。

问题是找到第一个边界单元格。

一种方法是随机搜索,直到找到补丁内的单元格,然后向任意方向行走,直到找到边界。

另一种方法是进行某种统一搜索,也许是在网格中,直到找到与上述相同的第一个单元格。如果你知道你的补丁大小总是至少 x 单元格大,你可以根据它调整你的网格大小。

没有更具体的信息,这些想法至少应该可以帮助您找到解决方案。祝你好运!