[英]Find Maximum Coordinate Point where Pixel value is 1 on x-axis, in 2-D image (Binary) (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和Y的值為“ 1”的第一個位置(相對於X軸)和X和Y的值為“ 1”的最后一個位置(相對於X軸) 。
有誰知道最簡單的方法嗎?
使用any
和find
簡單方法。 我假設您的圖片稱為image
minimumX = find(any(image,1),1,'first')
maximumX = find(any(image,1),1,'last')
另一種方法是從regionprops
使用BoundingBox
:
stats = regionprops(image,'BoundingBox');
minimumX = stats.BoundingBox(1);
maximumX = sum(stats.BoundingBox([1 3]));
您可以使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.