0

特定のピクセルの値に応じて、比較して異なる操作を実行したい2つの画像があります。問題は、それが非常に遅く、操作を大幅に高速化する必要があることです。コードで何ができるでしょうか?

currentFrame = rgbimage; %rgbimage is an 800x450x3 matrix

for i = 1:size(currentFrame, 1)

   for j = 1 : size(currentFrame,2) 

       if currentFrame(i,j) > backgroundImage(i,j) %backgroundimage is an equally sized image which i would like to compare with
          backgroundImage(i,j, :) = double(backgroundImage(i,j, :) +1); 

       elseif currentFrame(i,j) < backgroundImage(i,j)
          backgroundImage(i,j, :) = double(backgroundImage(i,j, :) -1);          
       end


   end

end

diff = abs(double(currentFrame) - double(backgroundImage)); %difference between my backgroundimage and my current frame
fusion = zeros(size(currentFrame)); % A fusion image

for i=1:size(backgroundImage,1)
    for j = 1:size(backgroundImage,2)

           if diff(i,j) > 20

            fusion(i,j, :) = double(currentFrame(i,j, :));

           else
             fusion(i,j, :) = 0;  

           end
    end 
end

助けてくれてありがとう!

4

2 に答える 2

1

1 回の操作で行列を比較できます。例えば、

D = diff > 20;

行列 D には、diff(i,j) > 20 の場合 D(i,j) = 1、それ以外の場合はゼロが含まれます。

次に、それを使用して他の行列を設定できます。

fusion = zeros(size(currentFrame));
fusion(diff > 20) = double(currentFrame(diff > 20));

最初のループと同じです。

于 2012-06-19T08:59:30.040 に答える
1

ループする必要はありません-次のようなことができます:

indexes = currentFrame > backgroundImage;
backgroundImage(indexes) = backgroundImage(indexes) + 1;

ところで。あなたのコードcurrentFrame(i,j) > backgroundImage(i,j)では、3 つの色次元の最初のものを比較しているだけです。これは意図したものですか?

于 2012-06-19T09:00:35.790 に答える