オブジェクトの追跡
オブジェクトの追跡は、歩行者の回避、セキュリティと監視、拡張現実などのさまざまな用途で不可欠なものです。この例では、固定カメラから取得した動画に対し、動きに基づいた歩行者の追跡を実行する方法を説明します。
オブジェクトの検出とカウント
動画シーケンス内を移動するオブジェクトを検出してカウントするために、動画処理を使用できます。このケーススタディでは、オーストラリアの科学者たちがビデオ映像を使って水鳥の野生個体数を推定しています。
MATLAB には、動画の表示、解析、読み取り、書き込みを行うツールやアルゴリズムが用意されています。動画処理は、以下のような用途で役立ちます。
動画処理の簡単な 4 つのステップ
MATLAB を用いた動画処理のステップは以下のとおりです。
- 動画の読み込み
- 動画の表示
- 動画の処理
- 動画の書き込み
ステップ 1.動画の読み込み
ファイルから、または直接カメラから動画を読み込むことができます。
単一の MATLAB コマンドでファイルから動画を読み込むことができます。
>> vid = VideoReader('filename.avi')
MATLAB は動画処理用の Web カメラをサポート しています。Image Acquisition Toolbox を使用すれば、さまざまな工業用カメラや科学用カメラからライブ画像を取得することも可能です。
MATLAB では、Microsoft® Windows®、Mac、Linux® 用の OS 固有のコーデックなど、さまざまなコーデックを使用して動画ファイルを読み取ることができます。
ステップ 2.動画の表示
MATLAB で動画を表示するには、次の 2 つの方法があります。
deployableVideoPlayer
:一連のビデオフレームを効率的に表示しますimplay
:ビデオ ビューアー アプリを起動して動画を表示します
MATLAB ムービー、動画、または画像シーケンスを再生するビデオ ビューアー アプリ。このアプリでは、さまざまな速度で動画を開始、停止、再生でき、動画の特定のセクションにジャンプすることもできます。
ステップ 3.動画の処理
動画は、個々のビデオフレームまたは画像のシーケンスです。これは、画像上でエッジ検出を実行するように設計されたアルゴリズムを、動画上でエッジ検出を実行するものに迅速に変換できることを意味します。
1 つの画像を読み取る |
ビデオから画像フレームを読み取る |
---|---|
|
|
動画処理は、エッジ検出を使用した例のように非常に単純な場合もあれば、前のフレーム内のオブジェクトの位置を考慮する必要がある追跡アルゴリズムのように、非常に複雑な場合もあります。
高度な動画処理の詳細については、以下の例を参照してください。
ステップ 4.動画の書き込み
処理の後、動画の各フレームをファイルに書き戻すことができます。次の関数を使用して動画ファイルを作成できます。
>> vid_w = VideoWriter('newfile.avi'); >> open(vid_w)
変数 vid_w
に、新しく作成したフレームを蓄積して動画を作成します。
MATLAB の詳細な例
すべてのコンポーネントをまとめて、動画の読み込み、表示、処理、書き込みの手順を示す詳細な例を見てみましょう。
%% Read and process a video into MATLAB % Setup: create Video Reader and Writer videoFileReader = VideoReader('tilted_face.avi'); myVideo = VideoWriter('myFile.avi'); % Setup: create deployable video player and face detector depVideoPlayer = vision.DeployableVideoPlayer; faceDetector = vision.CascadeObjectDetector(); open(myVideo); %% Detect faces in each frame while hasFrame(videoFileReader) % read video frame videoFrame = readFrame(videoFileReader); % process frame bbox = faceDetector(videoFrame); videoFrame = insertShape(videoFrame, 'Rectangle', bbox); % Display video frame to screen depVideoPlayer(videoFrame); % Write frame to final video file writeVideo(myVideo, videoFrame); pause(1/videoFileReader.FrameRate); end close(myVideo)
このコードは MATLAB Central から ダウンロードできます。
コンピューター ビジョンのための動画処理アルゴリズム
動画処理に時間的相関関係を使用する MATLAB アルゴリズムは、「状態」の概念に基づいています。これは、アルゴリズムが現在のビデオフレームに対して機能しているだけでなく、前のフレームを使用してその出力を決定するという考えです。これは、事前の情報に基づいて将来の動作を教えるオブジェクトの追跡アルゴリズムでは非常に重要です。追跡の一般的な例として、オブジェクト内の個々のポイントを追跡してオブジェクトの位置を検出する KLT アルゴリズム が挙げられます。
動画処理アルゴリズムの開発者は、 Computer Vision System Toolbox のビジョン固有のアルゴリズムを使用することもできます。このアルゴリズムを使用することで、高速かつメモリ効率の良い方法で高解像度の動画を読み込み、視聴できます。このツールボックスには、3D 点群処理、ステレオビジョン、オブジェクト検出、追跡と認識、およびその他のアプリケーション用のアルゴリズムも含まれています。