2011-10-22 91 views
1

仍然需要帮助,答案不是我正在寻找的东西!得到一个图片的每个通道(R,G,B)的平均灰度[MATLAB]

我需要让我每个信道的平均灰度(R,G,B)的图像

ave = getAverageGreyScale(image) 

AVE的必须返回3个元素的向量的函数。每一个与一个信道的平均灰度(R,G,B):

[ABC]
R的=平均灰度
B =平均灰阶的 ģ
C = B的平均灰度

仍然需要帮助!任何人都可以给我一个帮助吗?
在此先感谢!澄清后

+1

灰度值的“规范”公式(参见[Poynton's Color FAQ](http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC11))为0.299R + 0.587G + 0.114B 。如果你的每个通道都是一个向量,那么获得灰度值的向量是微不足道的。 –

+0

这就是我需要的。该函数必须返回3个元素的向量。每个通道具有一个通道的平均灰度(R,G,B) – user981227

+0

是否需要整个图像的平均值?这将涉及对图像进行迭代,对通道值求和,然后除以像素数。如果您愿意,可以应用Chris的比例因子。 –

回答

2

我认为你正在寻找为

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

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

假设我是rows x cols x 3矩阵(您可以从中获得,例如,imread)。

+0

dantswain,谢谢,但例如,从我的样本图像中,Bavg结果为我提供了一个“ 129.932“,这是一个大于100的数字。可以得到这个结果吗? – user981227

+1

是的,数字可能范围从0到255。 – dantswain

1

编辑:

你需要沿着维度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 
+0

该代码给出了所有颜色的平均值。我需要该函数来返回一个3项目的向量。每一个,每个R,G,B的平均值。我编辑了我的第一条消息,以便更清楚。 – user981227

+0

我该怎么做? :/ – user981227

+0

@ user981227我编辑了我的答案 –