如何解决在MATLAB中加载多个图像tiff文件的最快方法是什么?
| 我有一个多个图像tiff文件(例如3000帧),并希望将每个图像加载到matlab中(我现在使用的是2010a)。但是我发现随着帧索引的增加,读取图像所需的时间更长。以下是我现在使用的代码 for i=1:no_frame;
IM=imread(\'movie.tif\',i);
IM=double(IM);
Movie{i}=IM;
end
还有其他方法可以更快地做到吗?
解决方法
IMREAD的TIFF特定语法列表对
\'Info\'
参数表示以下含义:
从多张图像读取图像时
TIFF文件,传递输出
imfinfo
作为ѭ1the的值
参数有助于imread
找到
文件中的图片更快。
结合乔纳斯(Jonas)建议的单元阵列的预分配,这可以为您加快速度:
fileName = \'movie.tif\';
tiffInfo = imfinfo(fileName); %# Get the TIFF file information
no_frame = numel(tiffInfo); %# Get the number of images in the file
Movie = cell(no_frame,1); %# Preallocate the cell array
for iFrame = 1:no_frame
Movie{iFrame} = double(imread(fileName,\'Index\',iFrame,\'Info\',tiffInfo));
end
, 您可能需要预分配数组ѭ6(或使用R2011a,因为在循环内增加数组的问题较少)
Movie = cell(no_frame,1);
for i=1:no_frame;
IM=imread(\'movie.tif\',i);
IM=double(IM);
Movie{i}=IM;
end
, 我遇到了同样的问题,并在尝试此代码时发现了这个问题。我得到的时间与他不同,但仍然比其他图像格式好得多。对于最后一种可行的方法,您应该在matlab目录中找到tifflib.mexa64并将其复制到您的工作目录中。
FileTif=\'myfile.tif\';
InfoImage=imfinfo(FileTif);
mImage=InfoImage(1).Width;
nImage=InfoImage(1).Height;
NumberImages=length(InfoImage);
t=zeros(1,1000);
FinalImage=zeros(nImage,mImage,3,NumberImages,\'uint8\');
for i=1:NumberImages
tic
FinalImage(:,:,i)=imread(FileTif,i);
t(i)=toc;
end
%disp(sprintf(\'test1 timing result:\\n\\t\\t%d\',toc));
mean(t)
clear
%%
FileTif=\'myfile.tif\';
InfoImage=imfinfo(FileTif);
mImage=InfoImage(1).Width;
nImage=InfoImage(1).Height;
NumberImages=length(InfoImage);
FinalImage=zeros(nImage,\'uint8\');
t=zeros(1,1000);
for i=1:NumberImages
tic
FinalImage(:,i,InfoImage);
t(i) = toc;
end
%disp(sprintf(\'test2 timing result:\\n\\t\\t%d\',1000);
TifLink = Tiff(FileTif,\'r\');
for i=1:NumberImages
tic
TifLink.setDirectory(i);
FinalImage(:,i)=TifLink.read();
t(i) = toc;
end
TifLink.close();
%disp(sprintf(\'test3 timing result:\\n\\t\\t%d\',toc));
mean(t)
clear
%%
FileTif=\'myfile.tif\';
InfoImage=imfinfo(FileTif);
mImage=InfoImage(1).Width;
nImage=InfoImage(1).Height;
NumberImages=length(InfoImage);
FinalImage=zeros(nImage,\'uint8\');
FileID = tifflib(\'open\',FileTif,\'r\');
rps = tifflib(\'getField\',FileID,Tiff.TagID.RowsPerStrip);
t=zeros(1,1000);
for i=1:NumberImages
tic
tifflib(\'setDirectory\',i);
% Go through each strip of data.
rps = min(rps,nImage);
for r = 1:rps:nImage
row_inds = r:min(mImage,r+rps-1);
stripNum = tifflib(\'computeStrip\',r);
FinalImage(row_inds,i) = tifflib(\'readEncodedStrip\',stripNum);
end
t(i)=toc;
end
mean(t)
tifflib(\'close\',FileID);
, 我写了一个Matlab
类来快速有效地读取TIFF堆栈。
快速将多页TIFF堆栈加载到Matlab中。
或通过文件交换:
快速延迟加载TIFF堆栈。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。