查找最大坐标点,其中x轴上的像素值为1,二维图像(二进制)(Matlab)

时间:2014-02-03 16:16:53

标签: matlab

我正在使用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”。

有谁知道最简单的方法吗?

2 个答案:

答案 0 :(得分:3)

使用anyfind的简单方法。我假设您的图片名为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