2014-05-13 79 views
1

我有很多文件(例如100),其中包含CCD相機的512x512像素的強度,每個文件都處於不同的光頻。 這些文件的格式是這樣的:如何將特定的.csv文件信息放入特定的矩陣位置?

1, 1, 602 
1, 2, 598 
1, 3, 546 

第一個數字是像素的行,第二個是該像素的列和最後一個是對像素的強度。

我想爲每個像素都有一個數組。這裏是我到目前爲止的代碼:

%the user selects the "many files"% 
filenames = uigetfile('*.csv','','','Multiselect','on'); 

%here to know the number of different frequency for each pixel 
NumFiles = numel(filenames); 

%There are 512x512 pixels, each with NumFiles different intensities 
Pixel = cell(512,512,NumFiles); 

這一部分之後,我不太清楚如何進行。我希望Pixel(1,1,:)成爲我的第一個像素的所有強度,這些信息是從每個文件中提取的。

馬克 - 奧利維耶

回答

1

試試這個 -

%the user selects the "many files"% 
filenames = uigetfile('*.csv','','','Multiselect','on'); 

%here to know the number of different frequency for each pixel 
NumFiles = numel(filenames); 

%There are 512x512 pixels, each with NumFiles different intensities 
Pixel = cell(512,512,NumFiles) 
count = 0 
num_pixels = size(Pixel,1)*size(Pixel,2) 

for k = 1:NumFiles 
    fid = fopen(char(filenames(k))); 
    C = textscan(fid, '%d, %d, %d') 
    Pixel(count + sub2ind(size(Pixel),C{1},C{2})) = num2cell(C{3}); 
    count = count + num_pixels; 
    fclose(fid); 
end 
+0

我不太肯定了 「計數」 的一部分。 爲什麼「count = count + num_pixels;」? – Vissenbot

+1

@ Marc-olivierLessard這是關於'Pixel'使用的['linear indexing'](http://www.mathworks.in/help/matlab/math/matrix-indexing.htm)。第一個文件將被用於索引到Pixel',用於'num_pixels第二文件的'第一個'num_pixels'元件+ 1'到'2 *爲'2 * num_pixels + 1'到'3個* num_pixels num_pixels',第三文件'等等,這是由從'0'到'num_pixels'分別爲'2 * num_pixels'等'count'照顧的。希望這是有道理的! – Divakar

+0

我意識到我有一個錯誤,並沒有指定文件路徑。我添加了[文件名,文件路徑] = uigetfile我現在如何正確使用fopen?我試過「fid = fopen(char(filepath,filenames(k)));」但它不會工作。任何想法? – Vissenbot

相關問題