BW = logical([1 1 1 0 0 0 0 0
1 1 1 0 1 1 0 0
1 1 1 0 1 1 0 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 1 1 0
1 1 1 0 0 0 0 0]);
L = bwlabel(BW,4);
[r,c] = find(L == 2);
如何将矩阵与标量进行比较?
答案 0 :(得分:5)
也许一个直观的例子可能有所帮助。
>> b=[1 2 3;2 3 1;3 1 2]
b =
1 2 3
2 3 1
3 1 2
>> b==2
ans =
0 1 0
1 0 0
0 0 1
>> b==3
ans =
0 0 1
0 1 0
1 0 0
返回与被比较矩阵大小相同的逻辑类矩阵。
>> find(ans)
ans =
2
4
9
find
然后返回非零元素的线性地址。
答案 1 :(得分:4)
将矩阵与标量进行比较会导致逐元素比较。即将矩阵的每个元素与标量进行比较。结果是一个矩阵,在所有位置都有1,比较返回true,所有其他位置都为0。
另一方面, find
返回参数为非零的所有索引。
答案 2 :(得分:2)
“如何将矩阵与标量进行比较?”:在matlab提示下尝试doc eq
并说:
A == B比较每个元素... for 平等...每个输入 表达式可以是数组或标量 值。
如果一个输入是标量而另一个是a 非标量数组,然后是标量输入 被视为数组 尺寸与。相同 非标量输入数组。换一种说法, 如果输入A是数字100,而B是 一个3乘5的矩阵,然后A被视为 如果它是一个3乘5的矩阵 元素,每个设置为100. MATLAB 返回一个相同的数组 尺寸作为非标量输入 阵列。
答案 3 :(得分:1)
find(L==2)
将返回等于2的所有元素行和列。
因此,如果您获得[r]=[1 2 3 5 6]
和[c]=[1 2 3 5 6]
,则表示等于2的元素的行和列为{1,1}
,{2,2}
,{{ 1}}等等。
官方matlab解释is here。您还可以使用术语“matlab find”
答案 4 :(得分:1)
请参阅bwlabel
功能,它对您有用。
示例:
使用4个连接的对象标记组件。注意对象2和3;使用8连接标签时,bwlabel
会认为这些是单个对象而不是两个单独的对象。
BW = logical ([1 1 1 0 0 0 0 0
1 1 1 0 1 1 0 0
1 1 1 0 1 1 0 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 1 1 0
1 1 1 0 0 0 0 0]);
L = bwlabel(BW,4)
L =
1 1 1 0 0 0 0 0
1 1 1 0 2 2 0 0
1 1 1 0 2 2 0 0
1 1 1 0 0 0 3 0
1 1 1 0 0 0 3 0
1 1 1 0 0 0 3 0
1 1 1 0 0 3 3 0
1 1 1 0 0 0 0 0
[r, c] = find(L==2);
rc = [r c]
rc =
2 5
3 5
2 6
3 6
答案 5 :(得分:0)
另一种解释:
说,
A = [1 2 3
4 5 6
7 8 9]
然后当你说:
A == 5;
MATLAB看到了什么(实际的实现与此不同,但逻辑保持不变):
A == B*5;
其中,
B = [1 1 1
1 1 1
1 1 1];
您可以为任意A矩阵扩展它。
添加相同。