2017-05-27 2 views
1

移動ウィンドウベースの操作でループを減らすにはどうすればよいですか?私は2つの画像を横切って15×15のウィンドウを使用しており、ピクセルごとに平均値を得るために乗算を実行しています。移動ウィンドウベースの操作でループを減らすにはどうすればいいですか?

enter image description here

[ma,na]=size(g); 
z= (win1 -1)/2;%centre of window 
ini=z+1; 
for i= ini :(ma-z) 
    for j= ini:(na-z) 
      for a= (i-z):(i+z)  
       for b=(j-z):(j+z) 
        W(pp,qq)= g(a, b);%window on image 
        Es(pp,qq)=edg(a,b);%window on edge 
        qq=qq+1; 
       end 
       qq=1; 
       pp=pp+1; 
      end 
      pp=1; 
    E(i,j)=sum(sum(W.*Es))/sum(sum(Es)); 
    end 
    end 

答えて

2

私はあなたのループで失わ得ているかもしれないと私は正確に(それは少しあいまいだ)式を読み取ることができませんが、私は、これはあなたが欲しいものだと思う:

g = rand(5); %sample img1 
edg = rand(5); %sample img2 
windowsize = 3; %set this to 15 for real images 

A = g.*edg; % multiply each element beforehand, corresponds to mu*sigma in formula 
B = movsum(movsum(A,windowsize,2),windowsize,1); % get moving window sum of A, corresponds to numerator in formula 
C = movsum(movsum(edg,windowsize,2),windowsize,1); % get moving window sum of edg, corresponds to denominator in formula 
E = B./C; %hopefully what you wanted 

Ps:これを実行するには2016a以上が必要です

関連する問題