我想在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;
答案 0 :(得分:0)
见
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);
答案 1 :(得分:0)
@ Dr.J是对的,但我相信答案中有一个拼写错误。它应该是:
mean_red_X2 = mean(mean(A(:, :, 1),1),2);
计算y中的平均值,然后计算x方向。
但是,您也可以使用mean2
来计算传递的整个n维数组的平均值:
mean_red_X = mean2(A(:, :, 1));