Image 循环:加载单个图像像素而不是完整图像?

Image 循环:加载单个图像像素而不是完整图像?,image,matlab,loops,pixels,Image,Matlab,Loops,Pixels,我正在使用高分辨率12位图像(650280)计算两点相关函数。我使用以下循环以迭代方式加载每个图像 for c = 0:199; img = zeros(650,1280,'uint16'); if c<10, img=imread([int2str(b),name,'000',int2str(c),'.tif']);end; if c>=10 && c<100, img=imread([int2str(b),name,'00',in

我正在使用高分辨率12位图像(650280)计算两点相关函数。我使用以下循环以迭代方式加载每个图像

for c = 0:199;

    img = zeros(650,1280,'uint16');

    if c<10, img=imread([int2str(b),name,'000',int2str(c),'.tif']);end;
    if c>=10 && c<100, img=imread([int2str(b),name,'00',int2str(c),'.tif']);end;
    if c>=100, img=imread([int2str(b),name,'0',int2str(c),'.tif']);end;

end

+ calculate 2point correlation from the same location and averaging over the 200         
c=0:199时的
;
img=零(650280,'uint16');
如果c=10&&c=100,img=imread([int2str(b),名称,'0',int2str(c),'.tif']);结束;
结束
+从同一位置计算2点相关性,并在200分钟内取平均值
然后取相关函数。这个计算大约需要7分钟,等待这么长时间是非常痛苦的

我的问题是否可以加载单个像素(知道两点相关性的确切位置)而不是整个图像?我想这两个是在循环中的每个图像相同


我怀疑加载一个图像200次会减慢我的程序的速度,并且如果从每个图像中加载特定的图像像素,将会大大受益。

一个可选的像素区域参数可用于Tiff图像,它指定要读取的像素,例如

imread('img.tif','PixelRegion',{[rowStart,rowEnd],[colStart,colEnd]})
当开始和停止值相等时,可以读取单个像素(或行/列)

有关更完整的说明和其他示例,请参见

最后一点考虑 快一点吗

clear;
tic,A=imread('test.tif');B1=A(50,50,:);toc

Elapsed time is 0.017896 seconds.

clear;
tic,B2=imread('test.tif','PixelRegion',{[50,50],[50,50]});toc

Elapsed time is 0.002447 seconds.

是的…

如果b是另一个迭代器,我假设数据库中有200多个可能需要导入的图像,对吗?我认为您导入的不是一个而是至少200个这样的图像,这是我可以从您的代码中收集到的。看一看tif图像的可能性,在@Divakar页面底部附近的“读取tiff图像的指定区域”下有一个示例,是的,“c”循环嵌入在“b”上的一个循环中,b是不同文件夹的索引,每个包含200个图像。@RTL这看起来正是我需要的!注意事项-tiff文件的类型将发挥重要作用。Tiff要么是平铺的,要么是内部剥离的(),如果所需的像素位于一个平铺/条带内,则必须至少读取一个完整的平铺/条带。因此,如果您从条形图中读取一行,您可能会很快。但是,如果你从一个剥离图像中读到一列,我怀疑你可能看不到性能上的胜利。一个公平的警告,值得记录,但是,我认为,它不适用于单个像素加载。