MATLABを使用し​て時間間隔で画像を撮​影し,その画像をタイ​ムラプス動画化する方​法について

10 views (last 30 days)
卓真 小川
卓真 小川 on 23 Aug 2021
Commented: 卓真 小川 on 6 Sep 2021
現在,Image Acquisition Toolboxを用いて,顕微鏡のカメラから画像を1分間隔で計18時間撮影し,その画像を動画にしたいと考えていますが,どのようにすれば良いか分かりません.
vid = videoinput('winvideo', 1, 'RGB16_2752x2192');
start(vid);
preview(vid);
frame1 = getsnapshot(vid);
frame2 = getsnapshot(vid);
stop(vid);
delete(vid);
clear vid
このスクリプトでおそらくframe1と2の段階の画像は撮影できているとは思うのですが,Image Acquisition Toolbox内のframeやtriggerの意味がよく理解できておらず,例えば60frameで何秒を表しているのかが分からない状態です.
また,ここから動画を作成するにはどうすればいいでしょうか.
MATLABについては使い始めたばかりで右も左も分からない状態で困っています.
どなたかお力添えいただければと思います.
よろしくお願いいたします.

Accepted Answer

Naoya
Naoya on 26 Aug 2021
カメラから直接 aviファイルなどの動画像に保存する方法になると思いますが、該当するドキュメントとしては以下のようなものが参照いただけます。
>> web(fullfile(docroot, 'imaq/logging-image-data-to-disk.html'))
基本的に、 videoinputオブジェクトの LoggingMode プロパティを 'disk' として、
DiskLoggerプロパティに VideoWriterオブジェクトを指定します。
上記ドキュメント例の他に、以下の様な例題も作成してみましたので、併せてご参照ください。(1秒間隔で 10フレーム分 (計10秒分)を動画像に保存する)
% Webcamera から直接AVIに保存する
vid = videoinput('winvideo', 1, 'YUY2_640x480');
src = getselectedsource(vid);
% 取得するフレーム数
vid.FramesPerTrigger = 10; % ここでは小さな例として 10フレーム分
% 間引き数 (30フレームごと / 30fps の場合 1sec 毎に取得)
vid.FrameGrabInterval = 30;
% タイムアウト設定 (取得する時間以上の時間を設定)
vid.Timeout = 20;
% ロギングする対象 (disk / memory?)
vid.LoggingMode = 'disk';
diskLogger = VideoWriter('record.avi');
vid.DiskLogger = diskLogger;
vid.ReturnedColorspace = 'rgb';
% 画像取得開始
start(vid);
  1 Comment
卓真 小川
卓真 小川 on 6 Sep 2021
無事動画を撮影することができました.
ありがとうございました.
しかし,ロギングが途中で止まってしまうことが多々あり,原因がよく分かっていないです.
カメラの解像度が2752x2192と大きいからなのか,もともとカメラの最大フレームレートが2FPSと低いからなのかと考えていますがどうなのでしょうか...?

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!