在MATLAB中加载多个图像tiff文件的最快方法是什么?

如何解决在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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?