Cap*_*Obv 5 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
Run Code Online (Sandbox Code Playgroud)
我想摆脱所有单独的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
Run Code Online (Sandbox Code Playgroud)
(连接线是我想要保留的.我想摆脱所有不在连接线上的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
Run Code Online (Sandbox Code Playgroud)
我的困难在于,在此列的逐列过程中,我必须启用一种方法来识别连接线的开始,连接线的中间以及连接线的结束时间.当应用于噪声(单独的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
Run Code Online (Sandbox Code Playgroud)
如果您有图像处理工具箱,请尝试bwareaopen
b = bwareaopen(a, 3);
Run Code Online (Sandbox Code Playgroud)
示例运行#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
Run Code Online (Sandbox Code Playgroud)
示例运行#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
Run Code Online (Sandbox Code Playgroud)