2
我有一個表示RGB圖像的MxNx3矩陣。我試圖爲每個像素檢索R,G和B中的最大值。通過使用for循環可以輕鬆實現這一點,因爲性能原因,我不希望這樣做。 我怎麼能這樣做呢?我的想法是使用find和max以下列方式,並得到一個m×n矩陣:查找RGB圖像中像素的最大值
maxRGB = find(max(rgbImage(i, j, :)));
但我不知道我怎麼可能消除i和j。
我有一個表示RGB圖像的MxNx3矩陣。我試圖爲每個像素檢索R,G和B中的最大值。通過使用for循環可以輕鬆實現這一點,因爲性能原因,我不希望這樣做。 我怎麼能這樣做呢?我的想法是使用find和max以下列方式,並得到一個m×n矩陣:查找RGB圖像中像素的最大值
maxRGB = find(max(rgbImage(i, j, :)));
但我不知道我怎麼可能消除i和j。
max
函數允許指定最大值沿哪個維度確定。標準值是第一個維度。在你的情況,你要沿陣列的第三維計算最大:
maxValue = max(rgbImage,[],3);
它返回尺寸爲M×N的含有每個像素的最大值的矩陣。
例如,讓我們拍攝一張隨機的3x3 RGB圖像。施加max
功能如上述產生
rgbImage = rand(3,3,3);
maxValue = max(rgbImage,[],3);
maxValue =
0.6948 0.7094 0.7655
0.6555 0.7547 0.7952
0.9502 0.3816 0.8235
這些是存在於rgbImage
在每個像素位置處的最大值。但是,您不知道該值是否在R,G或B像素中。
爲了找到答案,這顏色是最大的,你可以使用max
第二個(可選)的說法,這是發現的最大的索引:
[~,maxIndex] = max(rgbImage,[],3);
在這個小例子是
maxIndex =
2 3 2
1 3 2
2 2 1
其中1
對應於R,2
對應於G和3
相當於B. 要查找所有像素,其中紅色部分是最大的,你可以使用日Ëfind
功能(可能有2個輸出參數:行和列)
[xRed,yRed] = find(maxIndex == 1)
xRed =
2
3
yRed =
1
3
所以對於像素的(2,1)
和(3,3)
紅色分量是最大的。這正是矩陣maxIndex
也顯示給我們的。
那麼maxIndex也會是一個MxN矩陣嗎? –
是的,'maxIndex'與'maxValue'具有相同的大小。對於'maxValue'中的每個元素,索引(即1,2或3 = R,G或B)都存儲在'maxIndex'中。 – hbaderts
是的。我編輯了我的答案,試圖證明這一點。這有幫助嗎? – hbaderts