我正在使用Matlab,我有一个二维数组(图像),就像这样
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 1 0 0
0 0 1 1 1 1 1 1 1 1 0
0 0 0 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 1 1 0
0 0 0 0 0 0 0 1 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
在下面的数组中,我想得到第一个位置(相对于X轴),其中X和Y的值为“1”,最后一个位置(相对于X轴),其中X和Y有值“1”。
有谁知道最简单的方法吗?
答案 0 :(得分:3)
使用any
和find
的简单方法。我假设您的图片名为image
minimumX = find(any(image,1),1,'first')
maximumX = find(any(image,1),1,'last')
另一种方法是使用BoundingBox
中的regionprops
:
stats = regionprops(image,'BoundingBox');
minimumX = stats.BoundingBox(1);
maximumX = sum(stats.BoundingBox([1 3]));
答案 1 :(得分:0)
您可以使用max
来实现它,并使用
[Y,I] = MAX(X,[],DIM)沿尺寸DIM运行。
那个
如果值[...]包含多个最大元素,则返回第一个元素的索引。
让img
表示您的2D数组。我假设你的x轴是行索引。否则,将,2
更改为,1
(三次),将fliplr
更改为flipud
(一次)。
[valid, first] = max(img,[],2);
first(~valid) = NaN;
[~, last] = max(fliplr(img),[],2);
last = size(img,2)-last+1;
last(~valid) = NaN;
在你的例子中:
first =
NaN
NaN
5
3
4
5
8
NaN
NaN
last =
NaN
NaN
9
10
11
10
8
NaN
NaN