在matlab中将图像存储到单元格中

时间:2015-11-07 21:54:12

标签: arrays image matlab cell

我知道之前已经提出了类似的问题,但我已经尝试了其他解决方案并且没有运气。真的很感激一些帮助!

我想1.lload一个图像文件,2。用imread读取它们,然后在一个单元格中输出,4。在单元格中的每个数组上逐步运行我的函数。

这是我的1个图像/文件的功能

function sym_file(filename) %this calls for the image file name
j=im2double(rgb2gray(imread(filename)));
%reads the image, turns int into grayscale and double

if rem(size(j,2),2)~=0,j(:,1)=[];
if rem(size(j,1),2)~=0,j(1,:)=[];
end
end                                      
%this made sure the rows and columns are even

jr=fliplr(j);
left=(j(:,1:size(j,2)/2));
right=(jr(:,1:size(j,2)/2));
t=sum(left,2);
u=sum(right,2);
symmetry= (left-right)./255;
symmetry2=reshape(symmetry,1,(numel(symmetry)));
imbalance=mean(symmetry2)
asymmetry=sqrt(mean(symmetry2.^2))

%runs calculations on image

figure('Name',num2str(filename),'NumberTitle','off')
subplot(3,2,1)
histogram(symmetry2,200)
title(['symmetry:' num2str(asymmetry)])
subplot(3,2,2)
imshow(j)
title(['imbalance:' num2str(imbalance)])
subplot(3,2,3)
imshow(left) 
title('left')
subplot(3,2,4)
imshow(fliplr(right)) 
title('right')
impixelinfo;
subplot(3,2,5)
plot(1:length(t),t,'-r',1:length(u),u,'-b')
title('results,red=left/blue=right')

%printing results in a figure

所以我想用一个图像文件来做这个,而不是逐个文件地做。最好的方法是什么?此外,如果有人知道如何将数据/数字存储在文件中也是一种奖励。

1 个答案:

答案 0 :(得分:0)

让我看看我是否直截了当:你有一组图像并将它们存储在一个单元格中。然后,您希望将函数应用于每个图像(换句话说:对单元格的每个元素)。

如果是,请使用cellfun()

示例:

X = imread('http://sipi.usc.edu/database/preview/aerials/3.2.25.png','png');
Y = imread('http://sipi.usc.edu/database/preview/misc/5.3.01.png','png');

my_cell{1} = X;
my_cell{2} = Y;

my_fftcell = cellfun(@fft2,my_cell,'UniformOutput', false)

在这种情况下,我加载了2个图像X和Y并将它们存储到my_cell中(括号{}表示它是MATLAB / Octave它是一个单元格)。然后我创建了另一个名为my_fftcell的单元格,它是应用在每个图像上的fft2。

要从文件夹/目录中获取许多文件,您只需循环遍历该目录中的每个文件并将其存储到单元格中。像这样:

Loading multiple images in MATLAB