查找RGB图像中的最大像素

サソリ*_*サソリ 2 rgb matlab max

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

maxRGB = find(max(rgbImage(i, j, :)));
Run Code Online (Sandbox Code Playgroud)

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

hba*_*rts 6

max功能允许指定确定最大值的维度.标准值是第一个维度.在您的情况下,您将要计算沿阵列第三维的最大值:

maxValue = max(rgbImage,[],3);
Run Code Online (Sandbox Code Playgroud)

返回包含每个像素的最大值的大小为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
Run Code Online (Sandbox Code Playgroud)

这些是rgbImage在每个像素位置处存在的最大值.但是,您不知道此值是否在R,G或B像素中.

要找出哪种颜色是最大的,您可以使用第二个(可选)参数max,它是找到的最大值的索引:

[~,maxIndex] = max(rgbImage,[],3);
Run Code Online (Sandbox Code Playgroud)

在这个小例子中

maxIndex =
     2     3     2
     1     3     2
     2     2     1
Run Code Online (Sandbox Code Playgroud)

其中1对应于R,2对应于G并且3对应于B.要查找红色分量最大的所有像素,可以使用该find函数(可能有2个输出参数:行和列)

[xRed,yRed] = find(maxIndex == 1)

xRed =
     2
     3


yRed =
     1
     3
Run Code Online (Sandbox Code Playgroud)

因此,红色分量处(2,1)和处的像素(3,3)是最大的.这正是矩阵maxIndex也向我们展示的内容.