我有一个二维矩阵。矩阵中有一些区域的元素是非零的,特别是边缘周围的所有地方都是零。
我使用图像作为颜色图绘制矩阵,并想添加显示矩阵中非零值与零值之间边界的曲线。有什么巧妙的方法可以在没有循环的情况下做到这一点吗?
最佳答案
这看起来像是 convhull
的工作:
为了说明这段代码,我将举一个虚拟的例子:
A=zeros(10);
B=binornd(1,0.5,8,8);
A(2:end-1,2:end-1)=B
A =
0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 1 1 1 1 1 0 0
0 0 1 1 0 0 0 0 1 0
0 0 0 1 0 0 0 1 0 0
0 1 0 0 0 0 0 1 0 0
0 0 0 1 1 1 1 1 1 0
0 0 1 0 1 1 1 1 0 0
0 1 0 1 1 1 1 0 1 0
0 0 0 0 0 0 0 0 0 0
1/找到所有非零条目的位置:
[row,col]=find(A);
2/取这些位置的凸包
k=convhull(row,col);
3/绘制凸包(我也绘制了非零点,但在你的问题中它将是你的图像点)
plot(row(k),col(k),'r-',row,col,'b*')
结果:
关于matlab - 确定没有循环的矩阵边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37000184/