gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:28:30 39 4
gpt4 key购买 nike

我有一个封闭的非自相交多边形。它的顶点保存在两个向量X和Y中。最后X和Y的值被限制在0到22之间。

我想构造一个大小为 22x22 的矩阵,如果多边形的一部分与该 bin 重叠,则将每个 bin 的值设置为 true,否则为 false。

我最初的想法是生成一个由 [a, b] = meshgrid(1:22) 定义的点网格,然后使用 inpolygon 来确定哪些点的网格在多边形中。

[a b] = meshgrid(1:22);
inPoly1 = inpolygon(a,b,X,Y);

然而,如果 bin 的中心包含在多边形中,这只会返回 true,即它返回下图中的红色形状。然而,需要更多的是沿着绿色形状的线条(尽管它仍然是一个不完整的解决方案)。

为了获得绿色 Blob ,我对 inpolygon 执行了四次调用。对于每次比较,我将 NE、NW、SE 或 SW 点的网格移动 1/2。这相当于测试 bin 的角是否在多边形中。

inPoly2 = inpolygon(a-.5,b-.5,X,Y) | inpolygon(a+.5,b-.5,X,Y) | inpolygon(a-.5,b+5,X,Y) | inpolygon(a+.5,b+.5,X,Y);

虽然这确实为我提供了一个部分解决方案,但在顶点包含在容器中但容器角都不包含的情况下,它会失败。

是否有更直接的方法来解决这个问题,最好是生成更易读代码的解决方案?

enter image description here

这个图是用以下方法绘制的:

imagesc(inPoly1 + inPoly2); hold on;
line(a, b, 'w.');
line(X, Y, 'y);

最佳答案

一个建议是使用 polybool 函数(在 2008b 或更早版本中不可用)。它找到两个多边形的交集并返回结果顶点(如果不存在顶点,则返回空向量)。为了在这里使用它,我们迭代(使用 arrayfun)网格中的所有方 block ,检查 polybool 的输出参数是否为空(例如,没有重叠)。

N=22;
sqX = repmat([1:N]',1,N);
sqX = sqX(:);
sqY = repmat(1:N,N,1);
sqY = sqY(:);

intersects = arrayfun((@(xs,ys) ...
(~isempty(polybool('intersection',X,Y,[xs-1 xs-1 xs xs],[ys-1 ys ys ys-1])))),...
sqX,sqY);

intersects = reshape(intersects,22,22);

这是生成的图像:

enter image description here

绘图代码:

imagesc(.5:1:N-.5,.5:1:N-.5,intersects');
hold on;
plot(X,Y,'w');
for x = 1:N
plot([0 N],[x x],'-k');
plot([x x],[0 N],'-k');
end
hold off;

关于matlab - 计算图像和多边形之间重叠的简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12222328/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com