Matlab:查找顶点集的内边界
我有一组(x,y)点,按以下方式定义:Matlab:查找顶点集的内边界,matlab,draw,vertices,Matlab,Draw,Vertices,我有一组(x,y)点,按以下方式定义: map=[0,0;66,0;66,44;44,44;44,66;110,66;110,110;0,110]; 然后有一个函数将这些点(即顶点,即角点)连接在一起以形成闭合形状。我给出的示例顶点形成如下形状: ________________________________________ | | |
map=[0,0;66,0;66,44;44,44;44,66;110,66;110,110;0,110];
然后有一个函数将这些点(即顶点,即角点)连接在一起以形成闭合形状。我给出的示例顶点形成如下形状:
________________________________________
| |
| |
| |
| ____________________|
| |
| |_______
| |
| |
| |
| |
|___________________________|
现在我想自动生成第二组顶点,这些顶点在形状内部形成边界,偏移一定量。即:
inner_boundary=[5,5;61,5;61,39;39,39;39,71;105,71;105,105;5,105];
________________________________________
| ___________________________________ |
| | | |
| | _____________________| |
| | | ____________________|
| | | |
| | | |_______
| | |________ |
| | | |
| | | |
| |______________________| |
|___________________________|
有什么办法吗?我一直在绞尽脑汁,但想不出一个强有力的方法来做到这一点。我需要它对任何输入顶点集自动执行此操作。另外,为了澄清,我只对如何指定顶点集感兴趣,而不是绘图部分
非常感谢 这是一个基于图像处理工具箱函数的解决方案。基本思路如下:
x = [4 10 10 4 4];
y = [4 4 10 10 4];
mask = poly2mask(x,y,12,12);
mask_eroded = imerode(mask, 1);
newBnds = bwboundaries(mask_eroded);
newBnds = newBnds{1};
请注意,新边界可能包含比您想要的更多的点,因为它跟踪边界上的每个像素。您可以编写一个简单的迭代例程来丢弃非端点 请澄清在这种情况下会发生什么,即原始边界太细,无法将较小的边界放入内部。表示两个顶点之间的距离小于
2*offset
。并且:您有图像处理工具箱吗?如果边之间的距离太小,无法容纳内部边界,我想停止并抛出一个错误。我想我有图像处理工具箱,是的。但是,我不确定我希望在其上运行此功能的其他机器是否会这样做-因此,如果有其他方法可以避免使用它,那么这将是更可取的。给定点的顺时针/逆时针顺序,您可以使用我的答案。很好的解决方案。我只建议您创建一个结构元素来同时进行侵蚀,而不是使用循环。例如,要腐蚀5个像素,请使用r=5;se=strel('square',2*r+1);掩膜腐蚀=imerode(掩膜,se)代码>。也感谢您的解决方案。如果其他能够使用图像处理工具箱的人看到了这一点,那么这看起来是一种简单的方法。因为我不确定我想让它工作的所有电脑都有工具箱,所以我会同意上面比克的建议。但是谢谢!