2017-12-19 9 views
0

ビデオの現在のフレームと背景フレームのh、s、v値の差を計算し、その値を表示してランダムなチェックをしたいさらなるアクションのための差分値。私は360x640マトリックスとして最終的な出力を得ました。最後のフレームの差分値を表示すると思います。誰も私がH、SおよびVの全ての差分値を表示するように助けることができる。matlabを使用してビデオ内の全フレームのフレーム差分出力を表示する方法

videoObject = VideoReader(movieFullFileName) 
    % Determine how many frames there are. 
% numberOfFrames = videoObject.NumberOfFrames; 
    vidHeight = videoObject.Height; 
    vidWidth = videoObject.Width; 
for frame = 1 : numberOfFrames 
     % Extract the frame from the movie structure. 
     thisFrame = read(videoObject, frame); 
% Now let's do the differencing 
     alpha = 0.5; 
     if frame == 1 
      Background = thisFrame; 
     else 
      % Change background slightly at each frame 
      %   Background(t+1)=(1-alpha)*I+alpha*Background 
      Background = (1-alpha)* thisFrame + alpha * Background; 
     end 
     % Display the changing/adapting background. 
     subplot(2, 2, 3); 
     imshow(Background); 
     title('Adaptive Background', 'FontSize', fontSize); 
     % Do color conversion from rgb to hsv 
     x=rgb2hsv(thisFrame); 
     y=rgb2hsv(Background); 
     % Split the hsv component to h,s,v value 
     Hx = x(:,:,1); 
     Sx = x(:,:,2); 
     Vx = x(:,:,3); 
     Hy = y(:,:,1); 
     Sy = y(:,:,2); 
     Vy = y(:,:,3); 
     dh=(abs(double(Hx) - double(Hy))); 
     ds1=(abs(double(Sx) - double(Sy))); 
     dv1=(abs(double(Vx) - double(Vy))); 
     disp(dh); 
     disp(ds1); 
     disp(dv1); 
    end 
end 
+0

わかりません。 h、s、vの3つの画像を表示したいですか?あなたの希望する出力は何ですか? –

+0

@AndreaPerissinotto私の望む出力は、ビデオのすべてのフレームの現在のフレームとバックグラウンドフレームの 'h'、 's'、 'v'値の差を計算して表示することです。 – SHOBA

+0

Weel、あなたはすでにdh =(abs(double(Hx) - double(Hy)))の差分を計算していると思います。 –

答えて

0

あなたは完全なイメージ

ファーストを表示したい場合は、完全なHSVの画像

hsv=zeros(size(x,1),size(x,2)) 

hsv(:,:,1) = dh; 
hsv(:,:,2) = ds1; 
hsv(:,:,3) = dv1; 

を評価する必要があり、その後使用してRGBに変換:あなたは

rgb = hsv2rgb(hsv); 

をすることができますそれを使って表示:

image(rgb); 

あなたは、単一のH、SおよびVの画像

を表示したい場合は、単に使用します。

for frame = 1 : numberOfFrames 

    subplot(3,1,1) 
    imshow(dh) 
    subplot(3,1,2) 
    imshow(ds1) 
    subplot(3,1,3) 
    imshow(ds2) 
    impixelinfo; 
    pause; 

end 

カーソルがあるときは、画像の左下の部分にピクセル値が表示されます画像の上に 次の画像を続行するには、キーボードのいずれかのキーを押してください。

+0

ええ、それは動作します、ありがとう。 – SHOBA

0

あなたはFigureウィンドウにすべてのフレームを更新するfor - ループの最後にdrawnowを追加する必要があります。

また、dispは、差分行列を数値で表示します。差マトリクスを視覚化するために適切な色スケーリングを使用して

subplot(2, 2, 1) 
imshow(dh) 

のようなものを使用することを検討してください。

+0

差異出力があります。私の疑いは、それが唯一の最終的なフレーム差の出力を示すかどうかです? – SHOBA

+0

はい、あります。 forサイクル内の各結果を確認したい場合は、繰り返しごとに数字を生成できます(私の答えを参照)。それ以外の場合は、プロットの後に "一時停止"を入れることができます。これは、続行する前にユーザーがキーボード・キーを押すのを待つので、出力を見る時間があります。 –

+0

@AndreaPerissinottoありがとうございます。ピクセル値が0に近いかどうかを確認するために、各繰り返しの出力を表示したいと考えています。どのように可能になるのでしょうか? – SHOBA

関連する問題