2015-10-14 54 views
2

我有一個表示RGB圖像的MxNx3矩陣。我試圖爲每個像素檢索R,G和B中的最大值。通過使用for循環可以輕鬆實現這一點,因爲性能原因,我不希望這樣做。 我怎麼能這樣做呢?我的想法是使用find和max以下列方式,並得到一個m×n矩陣:查找RGB圖像中像素的最大值

maxRGB = find(max(rgbImage(i, j, :))); 

但我不知道我怎麼可能消除i和j。

回答

6

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也顯示給我們的。

+0

那麼maxIndex也會是一個MxN矩陣嗎? –

+0

是的,'maxIndex'與'maxValue'具有相同的大小。對於'maxValue'中的每個元素,索引(即1,2或3 = R,G或B)都存儲在'maxIndex'中。 – hbaderts

+0

是的。我編輯了我的答案,試圖證明這一點。這有幫助嗎? – hbaderts