我有一个代表RGB图像的MxNx3矩阵.我试图为每个像素检索R,G和B中的最大值.这可以通过使用for循环来实现,我不希望出于性能原因这样做.我怎么能这样做呢?我的想法是以下列方式使用find和max并获得一个MxN矩阵:
maxRGB = find(max(rgbImage(i, j, :)));
Run Code Online (Sandbox Code Playgroud)
但我不确定如何消除i和j.
该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
也向我们展示的内容.