Matlab:保持非零矩阵元素彼此相邻并忽略孤立元素

标签 matlab for-loop matrix

这是一个示例矩阵(但结果不应仅限于此):

a=zeros(7,7);
a(5,3:6)=1;
a(2,2)=1;
a(2,4)=1;
a(7,1:2)=1

a=
0 0 0 0 0 0 0
0 1 0 1 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 1 1 1 1 0
0 0 0 0 0 0 0
1 1 0 0 0 0 0

我想去掉所有单独的 1(噪音),这样我就只有第五行的 1 行。

规则: -如果有相邻的 1(包括对角线),则 1 位于“连接线”中,例如:

0 0 0    1 0 0    1 0 1
1 1 1    0 1 0    0 1 0
0 0 0    0 0 1    0 0 0

(相连的线是我要保留的,我想去掉所有不在相连线上的1,相连的线可以相互交叉)

  • '连接线的长度必须至少为 3 个元素。因此在 7x7 示例中,只有一行符合此条件。如果a(7,3)设为1,那么左下角也会有一条连线

我目前正在通过逐列方法查看此内容,这是迄今为止我的代码的初稿:

 for nnn=2:6
        rowPoss=find(a(:,nnn)==1);
        rowPoss2=find(a(:,nnn+1)==1);


        for nn=1:length(rowPoss)
            if myResult(rowPoss(nn)-1:rowPoss(nn)+1,n-1)==0 %
                %then?
            end
        end
    end

我的困难是,在这个逐栏处理的过程中,我必须启用一种方法来识别连接线的开头、连接线的中间以及连接线的结束时间。同样的规则,当应用于噪声(单独的 1)时,只会忽略单独的 1。

我想要的输出基本上是:

 b=
    0 0 0 0 0 0 0
    0 0 0 0 0 0 0
    0 0 0 0 0 0 0
    0 0 0 0 0 0 0
    0 0 1 1 1 1 0
    0 0 0 0 0 0 0
    0 0 0 0 0 0 0

最佳答案

如果你有图像处理工具箱,试试bwareaopen

b = bwareaopen(a, 3);

示例运行 #1:

>> a

a =

 0     0     0     0     0     0     0
 0     1     0     1     0     0     0
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     0     1     1     1     1     0
 0     0     0     0     0     0     0
 1     1     0     0     0     0     0

>> b

b =

 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     0     1     1     1     1     0
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0

示例运行 #2:

>> a

a = 

 0     0     0     0     0     0     0
 0     1     0     1     0     0     0
 0     0     1     0     0     0     0
 0     0     0     0     0     0     0
 0     0     1     1     1     1     0
 0     0     0     0     0     0     0
 1     1     0     0     0     0     0

>> b

b =

 0     0     0     0     0     0     0
 0     1     0     1     0     0     0
 0     0     1     0     0     0     0
 0     0     0     0     0     0     0
 0     0     1     1     1     1     0
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0

关于Matlab:保持非零矩阵元素彼此相邻并忽略孤立元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29888576/

相关文章:

matlab - 具有多个文本和 num2str 元素的一根线图标题

python - 如何在 pandas dataframe (Python) 中将单元格的新值设置为 float - 在嵌套 for 循环中时,DataFrame 将舍入为整数

c - 如何将这个 C 程序变成一个计算每行之和及其总和的函数?

python - SciPy 方法 eigsh 给出不直观的结果

image - 对图像进行机器学习时减少特征数量的方法

image - imshow 更新的问题

c++ - 为什么这两个简单循环都不是无限的?

java - for 循环时间

MATLAB:根据规范从现有矩阵创建新矩阵

matlab - 2 行 x 轴名称