【问题标题】:Getting the average grey scale of each channel (R,G,B) of a pic [MATLAB]获取图片每个通道(R,G,B)的平均灰度[MATLAB]
【发布时间】:2011-10-22 11:45:00
【问题描述】:

仍然需要帮助,答案不是我想要的!

我需要一个函数来获取图像每个通道 (R,G,B) 的平均灰度

ave = getAverageGreyScale(image)

ave 必须返回一个包含 3 个元素的向量。每一个都有一个通道的平均灰度(R,G,B):

[ a b c ]
a = R 的平均灰度
b = 的平均灰度 G
c = B的平均灰度

仍然需要帮助!谁能帮我解决这个问题?
提前致谢!

【问题讨论】:

  • 灰度值的“标准”公式(参见Poynton's Color FAQ)是 0.299R + 0.587G + 0.114B。如果您的每个通道都是一个向量,那么获取灰度值的向量是微不足道的。
  • 这就是我需要的。该函数必须返回一个包含 3 个元素的向量。每一个都有一个通道的平均灰度(R,G,B)
  • 您想要整个图像的平均值吗?这将涉及对图像进行迭代,对通道值求和,然后除以像素数。如果你愿意,可以应用上面 Chris 的比例因子。
  • 我需要一张图像每个通道的平均值。该函数必须返回 3 件事。 1:R 的平均值。2:G 的平均值。3:B 的平均值。

标签: matlab rgb average grayscale


【解决方案1】:

我想你正在寻找

function [Ravg, Gavg, Bavg] = getAverageRGBValues(I)

Ravg = mean(mean(I(:, :, 1)));
Gavg = mean(mean(I(:, :, 2)));
Bavg = mean(mean(I(:, :, 3)));

假设 I 是一个 rows x cols x 3 矩阵(这是你从中得到的,例如,imread)。

【讨论】:

  • dantswain,谢谢,但是,例如,从我的示例图像中,Bavg 结果给我一个大于 100 的数字“129.932”。这个结果对吗?
  • 是的,数字的范围可能是 0 到 255。
【解决方案2】:

澄清后编辑:

您需要维度 1 和 2 的平均值,使用:

ave = mean(mean(image,2),1);

原答案:

如果(按用法)您的图像是最后一维长度为 3 的 3 维矩阵,您只需使用:

ave=squeeze(mean(image,3)); %#compute the average value for each pixel along the third dimension

平均值是亮度的粗略估计,但更好的方法是首先将每个颜色平面乘以不同的系数,因为红色、绿色和蓝色不等于亮度。 Standard coefficients 是:

  • 0.3 为红色
  • 0.59 为绿色
  • 0.11 为蓝色

因此,您的代码将如下所示:

ave=image(:,:,1)*0.3 + image(:,:,2)*0.59 + image(:,:,3)*0.11

【讨论】:

  • 该代码给了我所有颜色的平均值。我需要该函数返回一个 3 项向量。每个,每个 R、G、B 平均值。我编辑了我的第一条消息,使其更加清晰。
  • 您好 Laurent,感谢您的编辑。让我问你一件事。例如,从我的示例图像中,“蓝色”结果给我一个“129.932”,这是一个大于 100 的数字。这个结果对吗?
  • 是的,计算机图像的范围通常在 0 到 255 之间。因此是我的答案和 4 小时后您接受的结果;)
猜你喜欢
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 2011-02-03
相关资源
最近更新 更多