在Matlab上循环使用不同的图像

时间:2014-07-23 10:03:16

标签: matlab loops

我有一个关于如何创建循环的问题。我打算尝试简化。我有三张图片(真正的问题有巨大的图像)。例如:

image1.tif
image2.tif
image3.tif

另一方面,我有一个文本文件(我不能直接在代码上引入它,因为它是用其他进程生成的),每个图像有两个不同的参数。例如:

Parameterimage1_1= 1.2; %corresponds to image1
Parameterimage1_2= 2.3; %corresponds to image1
Parameterimage2_1= 5.3; %corresponds to image2
Parameterimage2_2= 2.4; %corresponds to image2
(...)

我需要做的是读取文本文件,然后在循环中为每个图像应用两个不同的参数。我所做的是以下内容:

Image1= imread ('image1.tif');       
Image2= imread ('image2.tif'); 
Image3= imread ('image3.tif'); 

Data= READINGPARAMETERS(parameters)

param1= Data.param1;
param2= Data.param2;
param3=Data.param3;
(...)

Image1_out= param1*Image1/param2;
Image2_out= param3*Image1/param4;


imwrite(Image1_out, 'G:\Image1_out.tiff','tiff');
imwrite(Image2_out, 'G:\Image2_out.tiff','tiff');

function [Data] = READINGPARAMETERS(parameters)

fid = fopen(parameters); % I have defined the path previously
text = fscanf(fid, '%c');

posini= strfind(text,'=');
posfin= strfind(text,';');

Datos.param1= str2num(texto(posini(1)+1 : posfin(1)-1));
Datos.param2= str2num(texto(posini(2)+1 : posfin(2)-1));
Datos.param3= str2num(texto(posini(3)+1 : posfin(3)-1));
(...)

return

我的问题是我不知道如何为此创建循环。通常,我这样做,但我不知道如何表明必须采取这两个参数。

for k = 1:length(tifFiles)
baseFileName = tifFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
imageArray = imread(fullFileName);

AND here the process

imwrite(imageArray, fullFileName);

可以按名称查找参数吗? (我的意思是,例如在excel文件中获取与图像同名的值)。我不知道如何自动化。

任何形式的帮助都将受到赞赏,

问候,

1 个答案:

答案 0 :(得分:3)

我有点困惑,但你可以使用xlsread将混合文本和数字excel文件读入单元格数组

[num,txt,raw] = xlsread(___)

原始输出是一个单元格数组。您可以使用strfind匹配图像名称字符串,然后从电子表格中的其他列读取参数值。

如果您希望能够生成图像名称(例如' image3.tif'),请使用num2str并连接图像编号字符串...类似

    i = 3;
    image_str =  ['image' num2str(i) '.tif'] 

编辑:

params = magic(3); % lets pretend these are your parameters
number_of_images = numel(:,1);
for i = 1:numel(number_of_images) 
    %Create string to read image
    image_str =  ['image' num2str(i) '.tif'];
    % Read image
    image = imread(image_str);
    % apply the params
    image = param(i,1)*image/param(i,2);
    %write image output
    imwrite(image, ['G:\' image_str],'tiff');
end