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