Matlab regionprops方向与逻辑和整数的行为不同
如果我们给出一个逻辑或整数,regionprops的“方向”行为似乎有所不同:Matlab regionprops方向与逻辑和整数的行为不同,matlab,Matlab,如果我们给出一个逻辑或整数,regionprops的“方向”行为似乎有所不同: A = [ 0 0 0 1 1 0 ; 0 0 0 1 0 0 ; 1 1 0 0 0 0 ; 0 0 0 0 0 0 ; 0 0 0 0 1 0 ; 0 0 0 0 0 0 ] a_orientation = regionprops(A,'Orientation') % Orientation: 28.1550 B = logical(A) b_orientatio
A = [ 0 0 0 1 1 0 ;
0 0 0 1 0 0 ;
1 1 0 0 0 0 ;
0 0 0 0 0 0 ;
0 0 0 0 1 0 ;
0 0 0 0 0 0 ]
a_orientation = regionprops(A,'Orientation')
% Orientation: 28.1550
B = logical(A)
b_orientation = regionprops(B,'Orientation')
% 3x1 struct array with fields:
% Orientation
b_orientation.Orientation
% ans =
% 0
%
% ans =
% 45.0000
%
% ans =
% 0
%
如何使regionprops在不改变类型的情况下以与整数相同的逻辑方式运行?当您将
A
(一个双精度矩阵)传递到中时,它被视为一个,只有一个标记区域对应于一个。它基本上假设您提供给它的数据是来自的输出。在标记为1的所有像素上计算度量
当您传递B
(逻辑矩阵)时,它被视为a,其中有三个不同的1区域(即8个连接的组件)。为每个区域返回度量
我认为没有任何方法可以让
regionprops
在不转换逻辑输入类型的情况下对其进行不同的处理。逻辑输入似乎总是经过一个连接的组件处理步骤,该步骤将每个“孤岛”标识为要分析的独立区域。出于好奇,为什么不能使用类似b_-orientation=regionprops(双(b),'orientation')的东西呢?
?或者b_orientation=regionprops(uint8(b),'orientation')
如果内存有问题。无论如何,出现这种差异似乎是因为逻辑输入regionprops
计算true
值之间的连接组件,而对于数字,它将每个数字解释为已经定义了一个组件。比较a\u-orientation=regionprops(a,'Area')
和a\u-orientation=regionprops(B,'Area')
对于regionprops“Area”是相同的。我知道我可以利用你的建议,但我希望了解regionprops为什么会这样。你的问题是如何避免这种情况,而不是它为什么会发生。原因是我在评论中所说的。格诺维奇在他的回答中提供了更好的解释。