2016-10-04 79 views
0

只是一個簡短的問題,由於其緩慢,令我生氣。 我有一個單元格(300x2),第一列對應於平行強度值,第二列對應於垂直強度值。每個單元包含一個128x128矩陣。如何快速添加每個像素的亮度值?

所以,我想要做的是總結所有矩陣的每個像素的強度。我有以下的代碼,但它需要年齡被執行:

%Intensity_cell_par_per is the 300x2 cell 
%a=128; 
%b=128; 
%numfiles=300; 
I_matrix_par=zeros(128,128); 
I_matrix_per=zeros(128,128); 

for i=1:a 
    for j=1:b 
     I_par=0; 
     I_per=0; 
     for k=1:numfiles 
      I_par=I_par+sum(Image_cell_par_per{k,1}(i,j,1:end)); 
      I_per=I_per+sum(Image_cell_par_per{k,2}(i,j,1:end)); 
     end 
     I_matrix_par(i,j)=I_par; 
     I_matrix_per(i,j)=I_per; 
    end 
end 

的我該怎麼做一個快速的方法你知道嗎?

謝謝!

+1

所以,你說'Image_cell_par_per {k,1}'是128x128,但是你可以用3個值來索引它。我認爲我們需要一個[mcve]來幫助這裏 –

+0

另外,如果他們解決了您的問題,請考慮接受您的其他問題答案。它會讓人們更容易幫助你! –

回答

1

我在這裏假設你發佈的代碼給出你想要的結果。這是加速它的一個簡單的方法:

您可以撥打sum作爲sum(_ , 3)採取整個矩陣和總結其第三維,所以你避免2循環。下面的代碼與a=100,b=100numfiles=20一起運行,在0.0031 seconds中運行,而5.17 seconds與您的代碼運行在一起,大約是1660x更快。我希望這個速度夠快。

I_matrix_par=zeros(a,b); 
I_matrix_per=zeros(a,b); 
for k=1:numfiles 
    I_matrix_par=I_matrix_par+sum(Image_cell_par_per{k,1},3); 
    I_matrix_per=I_matrix_per+sum(Image_cell_par_per{k,2},3); 
end