我有一组以下列方式定义的(x,y)点:
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];
________________________________________
| ___________________________________ |
| | | |
| | _____________________| |
| | | ____________________|
| | | |
| | | |_______
| | |________ |
| | | |
| | | |
| |______________________| |
|___________________________|
关于如何做到这一点的任何想法?我一直在绞尽脑汁,但却无法想出一个强有力的方法来做到这一点。我需要它来自动为任何输入顶点组执行此操作。另外,澄清一下 - 我只对如何指定顶点集而不是绘图部分感兴趣。
非常感谢!
答案 0 :(得分:1)
这是一个基于图像处理工具箱功能的解决方案。基本思路如下:
代码示例:
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};
请注意,newBnds可能包含比您想要的更多的点,因为它会跟踪边界上的每个像素。您可以编写一个简单的迭代例程来丢弃非端点。