查找 RGB 图像中像素的最大值
Finding the maximum of a pixel in an RGB image
我有一个表示 RGB 图像的 MxNx3 矩阵。我试图为每个像素检索 R、G 和 B 中的最大值。这可以通过使用 for 循环变得容易,出于性能原因我不想这样做。
我该怎么做呢?我的想法是按以下方式使用 find 和 max 并得到一个 MxN 矩阵:
maxRGB = find(max(rgbImage(i, j, :)));
但我不确定如何消除 i 和 j。
max
函数允许指定沿着哪个维度确定最大值。标准值是第一个维度。在您的情况下,您需要计算数组第三维的最大值:
maxValue = max(rgbImage,[],3);
其中 returns 大小为 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
也向我们展示的内容。
我有一个表示 RGB 图像的 MxNx3 矩阵。我试图为每个像素检索 R、G 和 B 中的最大值。这可以通过使用 for 循环变得容易,出于性能原因我不想这样做。 我该怎么做呢?我的想法是按以下方式使用 find 和 max 并得到一个 MxN 矩阵:
maxRGB = find(max(rgbImage(i, j, :)));
但我不确定如何消除 i 和 j。
max
函数允许指定沿着哪个维度确定最大值。标准值是第一个维度。在您的情况下,您需要计算数组第三维的最大值:
maxValue = max(rgbImage,[],3);
其中 returns 大小为 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
也向我们展示的内容。