2014-03-07 47 views
1

我正在計算使用高分辨率12位圖像(650,1280)的兩點相關函數。我正在使用以下循環迭代加載每個圖像循環:加載單個圖像像素不是全圖像?

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   

並且稍後將採用相關函數。這個計算大約需要7分鐘,等待這麼長時間是非常痛苦的。

我的問題是否可以加載單個像素(知道它們的兩點相關性的確切位置)而不是整個圖像?我希望這兩個對於循環中的每個圖像都是一樣的。

我懷疑加載一個圖像兩百倍是什麼減慢我的程序,並將從每個圖像加載定位特定圖像像素大大受益。

+0

如果b爲另一個迭代器,我假設數據庫有可能需要進口超過200張圖像,是不是啊?我認爲你輸入的不是一個,而是至少200個這樣的圖像,這是我可以從你的代碼中收集的。 – Divakar

+0

查看[Mathworks文檔](http://www.mathworks.co.uk/help/matlab/ref/imread.html)可以使用tif圖像,在'Read Specified region of TIFF圖像' – RTL

+0

@ Divakar,是的,「c」循環嵌入在「b」的循環中,該循環是不同文件夾的索引,每個文件夾包含200個圖像。 – huckleberry1008

回答

1

可用於指定像素的TIFF圖像將被讀取的可選像素區域參數,例如

imread('img.tif','PixelRegion',{[rowStart,rowEnd],[colStart,colEnd]}) 

讀取單個像素(或行/列)是可能的時,開始值和結束值是相等的。

看到Mathworks Documnetation更充分的說明及其他例子

一個最後審議 它是更快?

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. 

是...

+1

需要注意的事情 - tiff文件的類型將扮演重要角色。如果所需的像素落在一個瓷磚/條紋內,則Tiff的內部將平鋪或剝離(http://en.wikipedia.org/wiki/Tagged_Image_File_Format#Part_1:_Baseline_TIFF),則必須至少讀取一個完整的條紋/瓷磚。所以如果你從條形圖像中讀取一行,你可能會很快。但是如果你從一張剝離的圖像中讀到一列,我懷疑你可能看不到一場表現勝利。 –

+0

然而,值得記錄的公平警告,我認爲,它不適用於單個像素加載。 – RTL

+0

@ RTL,完美! – huckleberry1008