このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
オブジェクトのカウント
この例では、モルフォロジー演算を使用してビデオ ストリーム内のオブジェクトをカウントする方法を説明します。
はじめに
入力ビデオ ストリームにはホチキスの針のイメージが含まれています。この例では、トップ ハット モルフォロジー演算を使って不均一な明るさを排除し、opening モルフォロジー演算を使って針の間の隙間を取り除きます。その後、各フレームに対して異なるしきい値を適用して、イメージをバイナリに変換します。このしきい値を適用した後、針の数をカウントしてそれぞれの針の重心を計算します。
初期化
次のコード セクションを使用して必要な変数と System object を初期化します。
avi ファイルからビデオを読み取る System object を作成します。
filename = 'staples.mp4';
hVideoSrc = VideoReader(filename);
針をカウントしてその重心を見つけるブロブ解析用 System object を作成します。
hBlob = vision.BlobAnalysis( ... 'AreaOutputPort',false, ... 'BoundingBoxOutputPort',false, ... 'OutputDataType','single');
出力ビデオを表示する System object を作成します。
hVideoOut = vision.VideoPlayer('Name','Counted Staples'); hVideoOut.Position(3:4) = [650 350];
ストリーム処理ループ
ここでは処理ループを呼び出して、入力ビデオにある針の数をカウントします。このループはインスタンス化した System object を使用します。
ループは入力ファイルの末尾に達すると停止します。末尾は BinaryFileReader System object によって検出されます。
while hasFrame(hVideoSrc) I = im2gray(readFrame(hVideoSrc)); Im = imtophat(I, strel('square',18)); Im = imopen(Im, strel('rect',[15 3])); th = multithresh(Im); % Determine threshold using Otsu's method BW = Im > th; Centroids = step(hBlob,BW); % Blob Analysis StaplesCount = int32(size(Centroids,1)); txt = sprintf('Staple count: %d', StaplesCount); It = insertText(I,[10 280],txt,'FontSize',22); % Display staples count Centroids(:, 2) = Centroids(1,2); % Align markers horizontally It = insertMarker(It,Centroids,'o','Size',6,'Color','r'); It = insertMarker(It,Centroids,'o','Size',5,'Color','r'); It = insertMarker(It,Centroids,'+','Size',5,'Color','r'); step(hVideoOut,It); pause(1); end
まとめ
出力ビデオには個々の針が十字入りの円でマークされて表示されます。また、各フレームに含まれる針の数も表示されます。