我必须为多个图像运行我的代码并比较所有图像的输出。为了运行多个图像,我已按照此链接中的想法给出:Loading multiple images in MATLAB
工作正常。现在,我必须将所有图像的结果导出到excel文件。为此,我在MATLAB中使用xlswrite命令。我面临的问题是输出被覆盖在excel文件中的相同位置,因此在模拟结束时,我只有一个输出保存在excel文件中。在excel文件中写入第一张图像的结果后,下一张图像的结果应写在下一个位置,依此类推所有图像。我无法这样做。请帮帮我。
ex = {'IDR', 'CAR', 'PSNRN', 'psnr'; IDR CAR psnrn psnr}
xlswrite('output.xls', ex, 'SBF', 'E1');
mse=kk/(m*n);
psnr=10*(log10((double(255*255))/mse));
display(psnrn);
display(psnr);
ex = {'IDR', 'CAR', 'PSNRN', 'psnr'; IDR CAR psnrn psnr}
xlswrite('output.xls', ex, 'SBF', 'E1');
end
如果需要,我会提供完整的代码。请帮忙,我是MATLAB的新手
答案 0 :(得分:2)
它始终写入同一位置的原因是您始终为其提供相同的单元格引用'E1'
。您需要使用OP建议的专用xls附加脚本,或者在循环中更改单元格引用,或者一次性写入整个批次。
<强>示例:强>
写一个循环:
xlStartColStr = 'E';
xlStartRow = 1;
for myIndex = 1:something
% Do your stuff...
try
ex = {...};
xlStartRow = myIndex;
cellRef = [xlStartColStr num2str(xlStartRow)];
xlswrite('output.xls', ex, 'SBF', cellRef);
catch err
error([mfilename ':ErrorSavingFile'], ...
'Could not save file for image %g : %s', myIndex, err.message);
end
end
或者立刻写下来:
allMyData = {};
for myIndex = 1:something
% Do your stuff...
ex = {...};
allMyData = [allMyData; ex];
end
cellRef = 'E1';
try
xlswrite('output.xls', allMyData, 'SBF', cellRef);
catch err
error([mfilename ':ErrorSavingFile'], ...
'Could not save file for images : %s', err.message);
end
循环版本中的try...catch
是为了在出现故障时为您提供额外信息,但在非循环版本中执行此操作仍然是个好主意,因此我也将其包含在那里。第一种方法能够保存一些数据,即使其余数据对xlsread
无效(只是将错误更改为警告或某种日志消息),但速度会慢一些。
答案 1 :(得分:1)
尝试this
另一种选择是附加数据并在循环外调用xlswrite
。