确定没有循环的矩阵边界

Wol*_*ger 3 matlab matrix

我有一个2D矩阵.矩阵中存在一些区域,其中元素是非零的,特别是在边缘周围的任何区域它们都是零.

我使用图像作为颜色图绘制矩阵,并希望在矩阵中添加显示非零值与零值之间边界的曲线.没有循环,有没有任何巧妙的方法来做到这一点?

Bil*_*eey 6

这看起来像是一份工作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
Run Code Online (Sandbox Code Playgroud)

1 /查找所有非零条目的位置:

[row,col]=find(A);
Run Code Online (Sandbox Code Playgroud)

2 /取这些位置的凸包

k=convhull(row,col);
Run Code Online (Sandbox Code Playgroud)

3 /绘制凸包(我绘制非零点,但在你的问题中它将是你的图像点)

plot(row(k),col(k),'r-',row,col,'b*')
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述