Sum of a cell of arrays

1 次查看(过去 30 天)
Michael
Michael 2014-6-23
评论: José-Luis 2014-6-24
My code consists of scanning the current directory for all .bmp image files, creating a cell array (called "C") with the names of these files, and then imread-ing them. This creates a cell of the array images.
My question is how to take the sum of each image array read to create a single new array? The sum function obviously doesn't work since it produces a single value output. Manually typing C{1} + C{2} (and so on) will get me the correct results, but I need this to be automated and to work for any number of image files. I have tried to do a recursive function as well, but apparently it doesn't like adding arrays together. My code is shown below:
files = dir(fullfile(pwd, '*.bmp'));
C = cell(length(files), 1);
for k = 1:length(files);
names = files(k).name;
C{k} = imread(names);
end
le = length(files);
Final = recursive(le);
function r = recursive(x)
if (x == 0)
total = 0;
else
files = dir(fullfile(pwd, '*.bmp'));
C = cell(length(files), 1);
for k = 1:length(files);
names = files(k).name;
C{k} = imread(names);
total = C{x} + recursive(x-1);
end
end
r = total;
I of course have the first set of scripts under another function, but have not pasted it here. Any help would be appreciated.

回答(2 个)

José-Luis
José-Luis 2014-6-23
%dummy data
C = cell(10,1);
m = 15; %image size
n = 18;
numImages = 20;
for ii = 1:numImages
C(ii) = {rand(m,n)};
end
%The sum:
your_sum = sum ( reshape (cell2mat(C),m,n,numImages), 3 );
  4 个评论
Michael
Michael 2014-6-24
Yes all the images will be the same size. The images I am combining are black and white images. Each image has different areas of white (or gray), and I am trying to see the total area of "whiteness" that occurs in the final composite picture. So for each pixel in the image, I am trying to find the total sum of its "whiteness" from the other pictures. A spot that is lit up in every picture should produce a bright white pixel, while other pixels that do not light up in every image should be gray in the final composite.
Therefore, the maximum sum of a pixel should result in a bright white pixel. I hope this helped answer your question.
José-Luis
José-Luis 2014-6-24
And how would you define "whiteness" mathematically. Maybe you need to make your image grayscale first and pick the ones with the lowest sum.

请先登录,再进行评论。


Michael sch
Michael sch 2014-6-23
so what you can do get length(x) and then loop for all x and then sum them k=1:length(x) y=y+x{k} end
x{1}=[1 2; 3 4]
x{2}=[ 5 6 ;7 8]
x{1}+x{2}
ans =
6 8
10 12
length(x)
ans =
2

类别

Help CenterFile Exchange 中查找有关 Characters and Strings 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by