matlab - 确定没有循环的矩阵边界

标签 matlab matrix

我有一个二维矩阵。矩阵中有一些区域的元素是非零的,特别是边缘周围的所有地方都是零。

我使用图像作为颜色图绘制矩阵,并想添加显示矩阵中非零值与零值之间边界的曲线。有什么巧妙的方法可以在没有循环的情况下做到这一点吗?

最佳答案

这看起来像是 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*')

结果:

enter image description here

关于matlab - 确定没有循环的矩阵边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37000184/

相关文章:

Matlab:使用 bsxfun 时出错两个输入数组的非单一维度必须彼此匹配

c++ - 为矩阵分配新内存

R逐行乘法 - 重新设计?

MATLAB:如何堆叠数组 "shape-agnostically"?

matlab - 如何在直方图箱上方显示标签?

matlab - 将字符串原样写入Matlab中的文件

R 将列出的矩阵中的行附加到矩阵/数据帧,同时跳过缺失值

numpy - numpy 中不同行长度的矩阵

arrays - 如何对所有左上角的矩阵元素求和?

matlab - 错误消息 Mex 文件 Matlab