【问题标题】:Mean and standard deviation of red channel of multiple images多幅图像红色通道的均值和标准差
【发布时间】:2017-04-28 06:47:42
【问题描述】:

我想在matlab中计算多张图像红色通道的均值和标准差。

到目前为止,这是我的代码:

imagesPath = imageSet('path');

n = size(imagesPath.ImageLocation,2)

sum = zeros(512,512);

for i=1 : n

    I = imread(imagesPath.ImageLocation{i});
    I = imresize(I, [512 512]); 
    I = double(I);
    I = rgb2gray(I);
    sum = sum + I;
end

   m = sum. /n;

【问题讨论】:

  • 没有问题。你的代码有什么问题?

标签: matlab image-processing


【解决方案1】:

https://mathworks.com/help/matlab/ref/imread.html

A = imread('ngc6543a.jpg');
//imread returns a 650-by-600-by-3 array, A.

图像是 RGB 格式,这意味着我们有 650 x 600 像素的红色,然后是绿色,最后是蓝色。要平均红色,只需这样做

mean_red_X = mean(A(:, :, 1), 1);

(为了说明正在发生的事情,我取了两次平均值,一次用于 x 维度,一次用于 y 维度)

要获得标准差,对 std 执行相同操作,但请注意,第二个参数指定要采用标准差的维度(即不模拟均值)。如果你想在两个维度上取标准差,可以先线性化矩阵。

all_red_A = A(:, :, 1);
all_red_A = all_red_A(:);
std_red   = std(all_red_A); 

【讨论】:

    【解决方案2】:

    @Dr.J 是对的,但我相信回复中有错字。应该是:

    mean_red_X2 = mean(mean(A(:, :, 1),1),2);

    这会计算 y 方向的平均值,然后是 x 方向。

    不过,您也可以使用mean2,它计算传递的整个 n 维数组的平均值:

    mean_red_X = mean2(A(:, :, 1));

    【讨论】:

      猜你喜欢
      • 2020-05-22
      • 1970-01-01
      • 2014-03-15
      • 2014-04-27
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      相关资源
      最近更新 更多