查找RGB图像中的最大像素

时间:2015-10-14 06:50:18

标签: matlab max rgb

我有一个代表RGB图像的MxNx3矩阵。我试图为每个像素检索R,G和B中的最大值。这可以通过使用for循环来实现,我不希望出于性能原因这样做。 我怎么能这样做呢?我的想法是以下列方式使用find和max并得到一个MxN矩阵:

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

但我不确定如何消除i和j。

1 个答案:

答案 0 :(得分:6)

max函数允许指定确定最大值的维度。标准值是第一个维度。在您的情况下,您需要计算数组第三维的最大值:

maxValue = max(rgbImage,[],3);

返回包含每个像素的最大值的大小为MxN的矩阵。

例如,让我们拍摄一张随机的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也向我们展示的内容。